首页 > 解决方案 > 如何实时向音频流添加帧以对音频进行时间拉伸

问题描述

我需要访问指向音频缓冲区的 unsafeRawPointer,在这种情况下,来自 Spotify iOS SDK。然后我想将帧添加到该缓冲区并按预期返回它执行 super.method。结果应该是没有音高失真的时间拉伸(减慢)音频。我似乎无法让它工作。我注释掉了一些尝试......我认为进入一个数组并将项目添加到数组中就可以了......但是当我尝试将它返回到该方法时...... .音频被破坏。请帮忙。我已经试错了好几个星期了。:-(

class CoreAudioController: SPTCoreAudioController {

  override func attempt(toDeliverAudioFrames audioFrames: UnsafeRawPointer!, ofCount frameCount: Int, streamDescription audioDescription: AudioStreamBasicDescription) -> Int {
  print("attempt to deliver audio frames")


  var pointer: UnsafePointer<Int16> = audioFrames.bindMemory(to: Int16.self, capacity: byteCount)

  // Attemping to add empty frames to space out the audio frames then return the expected pointer below...

  // let framePointer = UnsafeRawBufferPointer(start: pointer, count: byteCount)
  // var framePointer = UnsafeBufferPointer(start: pointer, count: frameCount)
  // var frames = Array(framePointer)

  // withUnsafePointer(to: &frames) { bytes in
  //
  //    }


    return super.attempt(toDeliverAudioFrames: pointer, ofCount: frameCount, streamDescription: audioDescription)
  }

}

标签: swiftaudiospotifycore-audio

解决方案


我不确定如何轻松手动完成此操作,但 Superpowered.com 等库有多种工具可以实时更改音频源。我在我的应用程序 (Piti Piti Pa) 中使用它来进行多达 20 种乐器的现场音频混音。

特别是,您会对使用 SuperpoweredTimeStretching 类感兴趣:https ://superpowered.com/docs/class_superpowered_time_stretching.html

希望有人可以提供需要较少集成工作的有用信息,但我希望以上信息可能对您或其他人有用。

祝你好运!


推荐阅读