ios - AVAudioEngine 分离 channel

标签 ios objective-c swift core-audio avaudioengine

我有一个立体声音频文件,我尝试为其分离音频 channel 。导致总线具有左音频信号,总线具有右音频信号。我想在这些 channel 上做一些操作,然后将它们再次合并为一个立体声信号。

读取音频文件,在总线上进行操作并将其合并为一个信号是没有问题的(虽然我没有测试这个信号是否是立体声,因为我猜这取决于之前的 channel )。

我的问题是分离左右声道,所以我可以独立修改它们。

我的一个想法是使用 AVAudioPlayerNodepan 属性让信号只向左/向右,但看起来(如文档中所述)这属性尚未在 AVAudioPlayerNode 中实现(尽管在 WWDC 视频的所有示例中都使用了它)。

我找到的另一个解决方案是 this .使用 memcpy 创建新缓冲区。我还没有尝试过这个,因为我猜这需要相当长的时间并且不适合普通玩家。

第三个是一个叫做audiokit的框架。 .这提供了将流转换为单声道左/右声道然后通过创建 AKStereoOperation 再次合并信号的选项。我对这个解决方案的问题是,它是一个非常简单的用例。分离音频 channel 。为此,我发现很难证明包含如此庞大的框架是合理的,即使它可能会工作(未经测试)。

有没有简单的方法来分离 channel ?

谢谢!

最佳答案

您可以获取原始样本并使用 AudioConverterNew 创建一个 AudioConverter 并输出 AudioStreamBasicDescription 配置为解交错立体声 channel 。这将导致一个缓冲区的第一个 channel 连续,第二个 channel 位于缓冲区的后半部分。

关于ios - AVAudioEngine 分离 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39959787/

相关文章:

ios - 将字典数组从 Plist 显示到 Tableview,Swift (Array<Dictionary<String, AnyObject>>)

android - Flutter,如何刷新 Navigator.pop 上的最后一个页面状态

ios - Card.IO自定义手动画面

ios - 从 Cllocation 获取 CLLocationCorrdinate2D 时出错

iphone - 在后台线程中运行方法后应用程序崩溃

ios - 如何为单元测试创​​建虚假的 Realm 结果

ios - 如何减慢 CCMoveTo?

ios - 核心数据,enitityForName nil 错误

ios - 如何使数组包含一个PDF文件

swift - 遍历 NSDictionary 中的字符串数组