在iOS系统设置中,要调整音量平衡,请转到设置>一般>可访问性。在这里,您可以调节左/右音量平衡或将音频设置为单声道。
但我们可以在我们的应用程序中使用我们的代码吗? objective-c或swift。
我的应用程序需要通过'Audio Unit'播放音频,视频和虚拟midi音频,并且我尝试了以下内容:
当我通过音频单元播放midi虚拟音频时。我在How to set pan in IOS Audio Unit Framework
中找到了相关问题AudioUnitParameterValue panValue = -1; //几乎死了。可能的值介于-1和1之间 int result = AudioUnitSetParameter(mixerUnit,kMultiChannelMixerParam_Pan,kAudioUnitScope_Input,0,panValue,0); if(结果== 0) { 的NSLog( “成功”); }
我获得了成功结果,但右声道窃取有音频输出。
所以我陷入了视频和midi虚拟音频部分。如何设置音频输出平移?对我的任何建议我很欣赏。
答案 0 :(得分:0)
这个问题我也一样。 然后我使用了AudioToolbox库。 我找到了以下代码" AudioBalanceFade"但是我找不到如何将它描述为" UnsafePointer"参数在这里。 这段代码有效,但我找不到一个例子。也许你可以解决这个问题。 然后我很高兴你告诉我你是怎么做到的。 here Apple developer code Structure
抱歉我的英文!
答案 1 :(得分:0)
最后,我解决了这个问题。但这只是我的错。
首先,this answer是正确的。这对我来说不起作用,因为我错过了调音台音频单元。我只是将kMultiChannelMixerParam_Pan参数设置为kAudioUnitSubType_MIDISynth音乐设备。
因此,我需要创建一个混音器单元,并连接到我的Midi合成器单元。像这样的东西:
// create output unit
AudioComponentDescription cd;
cd.componentType = kAudioUnitType_Output;
cd.componentSubType = kAudioUnitSubType_RemoteIO;
cd.componentManufacturer = kAudioUnitManufacturer_Apple;
cd.componentFlags = cd.componentFlagsMask = 0;
err = AUGraphAddNode(_AUGraph, &cd, &_remoteIONode);
[self checkError:err];
// create midi synth music device unit
cd.componentType = kAudioUnitType_MusicDevice;
cd.componentSubType = kAudioUnitSubType_MIDISynth;//kAudioUnitSubType_Sampler;
err = AUGraphAddNode(_AUGraph, &cd, &_midisynthNode);
[self checkError:err];
// create multi channel mixer unit
cd.componentType = kAudioUnitType_Mixer;
cd.componentSubType = kAudioUnitSubType_MultiChannelMixer;
err = AUGraphAddNode(_AUGraph, &cd, &_stereoMixerNode);
[self checkError:err];
err = AUGraphOpen(_AUGraph);
[self checkError:err];
err = AUGraphNodeInfo(_AUGraph,
_midisynthNode,
NULL,
&_midiSynthUnit);
[self checkError:err];
err = AUGraphNodeInfo(_AUGraph, _stereoMixerNode, NULL, &_stereoMixerUnit);
[self checkError:err];
err = AUGraphNodeInfo(_AUGraph,
_remoteIONode,
NULL,
&_remoteIOUnit);
[self checkError:err];
// connect midi systh node to mixer node
err = AUGraphConnectNodeInput(_AUGraph, _midisynthNode, 0, _stereoMixerNode, 0);
[self checkError:err];
// connect mixer node to output node
err = AUGraphConnectNodeInput(_AUGraph, _stereoMixerNode, 0, _remoteIONode, 0);
[self checkError:err];
最后,我们可以像这样设置平移:
- (void)setPanvalue:(float)value {
AudioUnitParameterValue panValue = value;
OSStatus result = AudioUnitSetParameter(self.stereoMixerUnit, kMultiChannelMixerParam_Pan, kAudioUnitScope_Output, 0, panValue, 0);
[self checkError:result]; }