3

我正在尝试使用AVAudioEnvironmentNode为我正在开发的游戏制作 3D 空间化声音。文档指出,“重要的AVAudioEnvironmentNode是要注意,只有与环境节点具有单声道连接格式的输入才会被空间化。如果输入是立体声,则音频会通过而不被空间化。目前连接格式超过 2 的输入不支持频道。” 我确实发现情况确实如此。当我将具有两个通道的音频缓冲区加载到 anAudioPlayerNode并将节点连接到 anAVAudioEnvironmentNode时,输出声音不是空间化的。我的问题是,如何将单声道数据发送到AVAudioEnvironmentNode

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

2016-02-17 06:36:07.695 测试场景 [1577:751557] 06:36:07.694 错误:
[0x1a1691000] AVAudioPlayerNode.mm:423:ScheduleBuffer:所需条件为 false:_outputFormat.channelCount == buffer.format.channelCount 2016-02-17 06:36:07.698 测试场景 [1577:751557] *** 由于未捕获的异常“com.apple.coreaudio.avfaudio”而终止应用程序,原因:“所需条件为假:_outputFormat.channelCount == 缓冲区.format.channelCount'

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

我规定我通常很少有处理AVFoundation音频数据的经验。您能提供的任何帮助将不胜感激。

4

1 回答 1

4

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

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

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

您可以在 Audacity 中检查您的文件的采样率是否为 96000,或在 Finder 中检查“获取信息”。

于 2016-11-02T18:49:12.363 回答