AVAudioEngine 独立通道
Posted
技术标签:
【中文标题】AVAudioEngine 独立通道【英文标题】:AVAudioEngine separate channels 【发布时间】:2016-10-10 13:45:18 【问题描述】:我有一个立体声音频文件,我尝试为其分离音频通道。产生一个带有左音频信号的总线和一个带有右音频信号的总线。在这些通道上,我想做一些操作,然后将它们再次合并为一个立体声信号。
读取音频文件,在总线上进行操作并将其合并为单个信号是没有问题的(虽然我没有测试这个信号是否是立体声,因为它取决于我猜的先前通道)。
我的问题是分离左右声道,所以我可以独立修改它们。
我的一个想法是使用AVAudioPlayerNode
的pan
property 使信号仅在左/右,但似乎(如文档中所述)此属性尚未在AVAudioPlayerNode
中实现(尽管在 WWDC 视频的所有示例中都使用了它)。
我找到的另一个解决方案是this。使用memcpy
创建新缓冲区。我还没有尝试过,因为我猜这需要相当长的时间并且不适合普通玩家。
第三个框架叫audiokit。这提供了将流转换为单声道左/右声道的选项,然后通过创建AKStereoOperation
再次合并信号。我对这个解决方案的问题是,它是一个非常简单的用例。分离音频通道。为此,我发现很难证明包含如此庞大的框架是合理的,即使它可能会起作用(未经测试)。
有没有简单的方法来分离通道?
谢谢!
【问题讨论】:
您是否曾经将 2 个单声道流合并为一个立体声流? 很遗憾没有使用 avaudioengine。使用 audiokit 是可能的 不幸的是,我在我的项目中使用了 Objective C,我认为 AudioKit 仅适用于 Swift。 【参考方案1】:您可以获取原始样本并使用AudioConverterNew
创建一个AudioConverter
,并将输出AudiostreamBasicDescription
配置为去交错立体声通道。这将导致一个缓冲区的第一个通道连续,第二个通道位于缓冲区的后半部分。
【讨论】:
如果我们不尝试更改文件格式,我们还能使用 AudioConverter 吗?就我而言,我正在尝试将 2 个具有相同采样率和长度的单声道 CAF 文件合并到一个立体声文件中。是否有 AudioConverterNew 的示例代码向您展示如何设置格式? 是的。AudioConverter
文档列出了它支持的转换。我相信有一个 Apple 示例展示了如何使用它,但我手边没有链接。
我正在查看 AudioConverterNew 的文档developer.apple.com/reference/audiotoolbox/…。此函数有 3 个参数,但 inSourceFormat 似乎表明它只接收单个源文件。但是,就我而言,我有 2 个具有独特单声道流的单独音频文件。我显然在这里遗漏了一些东西,不幸的是,Apple 网站上的文档并不多。
AudioConverter
不适用于文件。它适用于数据缓冲区。这些缓冲区可能来自文件,由您提供。
听起来不错,我想现在的方法是弄清楚如何获取我的输入文件并提取缓冲区,然后将它们非交错到单个输出缓冲区中。当我使用这些输入缓冲区时,我需要关注标头吗?以上是关于AVAudioEngine 独立通道的主要内容,如果未能解决你的问题,请参考以下文章