9

我正在开发一个允许用户创建一种配音的应用程序。有一个音频文件正在播放,用户可以在某些时刻点击以插入声音(有点像审查按钮。)我想​​知道如何去捕捉最终产品。

直接从 iPhone 捕获音频似乎是最简单的方法,因为用户在制作成品时已经听到了声音。但是,我找不到有关如何执行此操作的任何信息。如果不可能,有什么建议吗?

4

2 回答 2

1

最好的方法可能是使用AV Foundation 框架进行混合,然后缓冲音频以及播放它。这将允许高抽象级别,同时保证播放和保存的音频是相等的。

除此之外:从我如何以最少的代码角度来实现这一点,没有有关您的设置的更多信息,这个问题太宽泛和/或基于意见。

于 2016-01-13T15:01:43.687 回答
1

您将不得不使用缓冲区。现在不知道它是如何在 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 中。

其他选择是离线进行:

  1. 播放您的音乐(或音频)并保持计时器与您的“待审查音频”的经过时间同步。
  2. 保存开始和结束点击审查按钮的时间戳(例如)。
  3. 将缓冲区 A 与您在那些记录的 ( start-end ) 时间戳中的效果重叠。

  4. 将缓冲区保存为文件(或做任何你需要做的事情

更新:

你应该看看 Apple 的实现是这样的: https ://developer.apple.com/library/ios/samplecode/AVAEMixerSample/Introduction/Intro.html

于 2016-01-14T17:42:59.220 回答