如何在 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 中调整音频平衡的主要内容,如果未能解决你的问题,请参考以下文章

photoshop如何校正白平衡

如何调节白平衡

如何在javascript中调整音频文件的音量[重复]

什么是白平衡如何调节白平衡

如果构建平衡二叉树?

深度学习中如何平衡多个loss?多任务学习自动调整loss weight解决方案