我正在开发一个允许用户创建一种配音的应用程序。有一个音频文件正在播放,用户可以在某些时刻点击以插入声音(有点像审查按钮。)我想知道如何去捕捉最终产品。
直接从 iPhone 捕获音频似乎是最简单的方法,因为用户在制作成品时已经听到了声音。但是,我找不到有关如何执行此操作的任何信息。如果不可能,有什么建议吗?
我正在开发一个允许用户创建一种配音的应用程序。有一个音频文件正在播放,用户可以在某些时刻点击以插入声音(有点像审查按钮。)我想知道如何去捕捉最终产品。
直接从 iPhone 捕获音频似乎是最简单的方法,因为用户在制作成品时已经听到了声音。但是,我找不到有关如何执行此操作的任何信息。如果不可能,有什么建议吗?
最好的方法可能是使用AV Foundation 框架进行混合,然后缓冲音频以及播放它。这将允许高抽象级别,同时保证播放和保存的音频是相等的。
除此之外:从我如何以最少的代码角度来实现这一点,没有有关您的设置的更多信息,这个问题太宽泛和/或基于意见。
您将不得不使用缓冲区。现在不知道它是如何在 Swift 中完成的,但是您可以在 Obj-C 中实现它,然后将其桥接出来。
您可以在 StackOverflow 中参考此答案(它们有点旧)
https://stackoverflow.com/a/11218339/2683201
https://stackoverflow.com/a/10101877/2683201
并且一个项目也存在(但在 Obj-C 中) https://github.com/alexbw/novocaine
主要针对您的情况的想法是拥有 2 个单独的缓冲区和您的音效。然后,您将从缓冲区 A(您的音乐)播放并将播放的数据复制到缓冲区 B(最终输出),除非您正在播放效果。在这种情况下,您会将效果数据复制到缓冲区 B 中。
其他选择是离线进行:
将缓冲区 A 与您在那些记录的 ( start-end ) 时间戳中的效果重叠。
将缓冲区保存为文件(或做任何你需要做的事情)
更新:
你应该看看 Apple 的实现是这样的: https ://developer.apple.com/library/ios/samplecode/AVAEMixerSample/Introduction/Intro.html