AVAudioEngine 独立通道

Posted

技术标签:

【中文标题】AVAudioEngine 独立通道【英文标题】:AVAudioEngine separate channels 【发布时间】:2016-10-10 13:45:18 【问题描述】:

我有一个立体声音频文件,我尝试为其分离音频通道。产生一个带有左音频信号的总线和一个带有右音频信号的总线。在这些通道上,我想做一些操作,然后将它们再次合并为一个立体声信号。

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

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

我的一个想法是使用AVAudioPlayerNodepanproperty 使信号仅在左/右,但似乎(如文档中所述)此属性尚未在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 独立通道的主要内容,如果未能解决你的问题,请参考以下文章

1 个文件中的 5 个独立音频通道

★tensorflow中“卷积”的深度解析

stm32 嵌入式开发 中ADC独立多通道DMA传输数据实验总结

使用 AVAudioEngine 进行电平测量

AVAudioEngine 播放多声道音频

STM32-ADC(独立模式双重模式)+DMA读取数据+部分基础知识