将单声道音频数据传递给 AVAudioEnvironmentNode

Passing mono audio data to AVAudioEnvironmentNode

我正在尝试使用 AVAudioEnvironmentNode 为我正在开发的游戏生成 3D 空间化声音。 AVAudioEnvironmentNode 文档指出,"It is important to note that only inputs with a mono channel connection format to the environment node are spatialized. If the input is stereo, the audio is passed through without being spatialized. Currently inputs with connection formats of more than 2 channels are not supported." 我确实发现了这种情况。当我将具有两个通道的音频缓冲区加载到 AudioPlayerNode 并将节点连接到 AVAudioEnvironmentNode 时,输出声音不是空间化的。我的问题是,如何将单声道数据发送到 AVAudioEnvironmentNode

我试过使用 Audacity 创建单声道 .wav 文件,并以编程方式加载 AVAudioPCMBuffer 正弦波数据。我发现无论哪种方式,当我创建一个单通道音频缓冲区并尝试将缓冲区加载到 AudioPlayerNode 时,我的程序崩溃并出现以下错误:

2016-02-17 06:36:07.695 Test Scene[1577:751557] 06:36:07.694 ERROR:
[0x1a1691000] AVAudioPlayerNode.mm:423: ScheduleBuffer: required condition is false: _outputFormat.channelCount == buffer.format.channelCount 2016-02-17 06:36:07.698 Test Scene[1577:751557] *** Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'required condition is false: _outputFormat.channelCount == buffer.format.channelCount'

检查 AVAudioPlayerNode 输出总线确实表明它需要 2 个通道。我不清楚如何更改,或者是否应该更改。

我声明我对 AVFoundation 或一般音频数据的处理经验很少。如果您能提供任何帮助,我们将不胜感激。

我希望你已经解决了这个问题,但对于其他人来说:

将 AVAudioPlayerNode 连接到 AVAudioMixerNode 或它可以连接到的任何其他节点时,您需要指定那里的通道数:

audioEngine.connect(playerNode, to: audioEngine.mainMixerNode, format: AVAudioFormat.init(standardFormatWithSampleRate: 96000, channels: 1))

您可以在 Audacity 或 Finder 中检查文件的采样率是否为 96000。