swift - 如何实时向音频流添加帧以对音频进行时间拉伸
问题描述
我需要访问指向音频缓冲区的 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)
}
}
解决方案
我不确定如何轻松手动完成此操作,但 Superpowered.com 等库有多种工具可以实时更改音频源。我在我的应用程序 (Piti Piti Pa) 中使用它来进行多达 20 种乐器的现场音频混音。
特别是,您会对使用 SuperpoweredTimeStretching 类感兴趣:https ://superpowered.com/docs/class_superpowered_time_stretching.html
希望有人可以提供需要较少集成工作的有用信息,但我希望以上信息可能对您或其他人有用。
祝你好运!
推荐阅读
- r - 使用 smacof 函数处理绘图
- r - 使用 mongolite R 将数据框附加到现有集合
- php - PHP - 从 Google 表格读取 CSV,但表格重定向到登录
- react-native - stripe + react native 账户间转账
- ruby-on-rails - 在 MacOS Big Sur 之后,Rails bootsnap `cannot load such file` 错误
- shared-libraries - 无法加载外国库
- javascript - Javascript - 创建一个通用函数,可以将解构的对象属性作为参数,但某些属性可能会丢失
- javascript - React/Redux reducer typescript 错误(类型“未定义”不可分配给类型 ISupplierState)
- python - Tkinter 在主屏幕上显示从按钮返回
- docker - 如何在没有 usePluginRegistry 的情况下全局设置 Maven 插件版本?