如何在 iOS 中调整音频平衡
Posted
技术标签:
【中文标题】如何在 iOS 中调整音频平衡【英文标题】:How to adjust audio balance in iOS 【发布时间】:2017-11-06 02:14:22 【问题描述】:在 ios 系统设置中,要调整音量平衡,请前往“设置”>“通用”>“辅助功能”。在这里,您可以调整左右音量平衡或将音频设置为单声道。
但是我们可以在我们的应用程序中使用我们的代码来实现吗?客观-c或迅速。
我的应用需要通过“音频单元”播放音频、视频和虚拟 MIDI 音频,我尝试了以下操作:
-
当我播放音频时,我可以使用 AVAudioPlayer 的 pan 属性。这是工作。
当我用 AVPlayer 播放视频时,抱歉。这里还没有使用 AVPlayer 平移属性。我被拒绝如何实施。
当我通过 Audio Unit 播放 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); 如果(结果 == 0) NSLog("成功");
我得到了成功的结果,但是右声道窃取有音频输出。
所以我被困在视频和 MIDI 虚拟音频部分。如何使用音频输出设置平移?对我的任何建议我都非常感谢。
【问题讨论】:
【参考方案1】:我在使用 AudioToolbox 库时遇到了同样的问题。 但是,我找到了下面的代码“AudioBalanceFade”,但我不知道“UnsafePointer”参数是什么。 此代码有效,但我找不到示例。也许你可以解决这部分,我很高兴你告诉我你是怎么做到的。 here Apple developer code Structure
对不起我的英语!
【讨论】:
首先,非常感谢您的回复。我会检查一下,我会在这里更新进度。 BTW:我用的是Chinglish,我的英语真的不太好:)【参考方案2】:最后,我解决了这个问题。但这只是我的错。
首先,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];
【讨论】:
以上是关于如何在 iOS 中调整音频平衡的主要内容,如果未能解决你的问题,请参考以下文章