iOS音频单元,将每个立体声通道从立体声源输出到3D混音器

时间:2016-06-01 23:12:58

标签: ios objective-c audio

Apple的3D混音器音频单元指南指出:

  

要使用立体声源,您可以将其左右声道视为两个独立的单声道声源,然后将立体声流的每一侧馈送到自己的输入总线。

https://developer.apple.com/library/ios/qa/qa1695/_index.html

但是,我无法弄清楚如何将立体声音频单元的每个声道发送到3D混音器。如何做到这一点?

1 个答案:

答案 0 :(得分:0)

基本上,你需要做一些像

这样的事情
@interface AudioEngine () {
    AVAudioEngine                       *_engine;
    AVAudioEnvironmentNode              *_environment;
    AVAudioPCMBuffer                    *_ouputBuffer;
    NSMutableArray <AVAudioPlayerNode*> *_PlayerArray;
    AVAudioPlayerNode                   *_soundPlayer;
    AVAudioPCMBuffer                    *_soundBuffer;
    bool                                _multichannelOutputEnabled

加载文件并从缓冲区中获取。 要将立体声分成多声道,你需要像

这样的东西
outputLayoutTag = kAudioChannelLayoutTag_AudioUnit_2;
_multichannelOutputEnabled = true;

这&#39; _multichannelOutputEnabled = true;&#39;通常设置为false

然后设置算法以对您的频道执行某些操作

AVAudio3DMixingRenderingAlgorithm renderingTHIS = _multichannelOutputEnabled ? 
AVAudio3DMixingRenderingAlgorithmSoundField : AVAudio3DMixingRenderingAlgorithmEqualPowerPanning;
        newPlayer.renderingAlgorithm = renderingTHIS;

在视图控制器的某个地方,您可能会将此类内容与游戏中的对象绑定

[self.epicAudioEngine.updateListenerOrientation:AVAudioMake3DAngularOrientation([ang.x,ang.y,ang.z])

[self updateEulerAnglesAndListenerFromDeltaX:dX DeltaY:dY]

查看libavformat的ffmpeg源代码,了解如何处理音频的libavutil