我正在尝试了解AVAudioPlayer和音频电平表。我下面是正在播放简短音频的对象“AudioPlayer”。现在,我想输出这种声音的力量(分贝)。不知何故我认为我做的不对。

        audioPlayer.meteringEnabled = YES;
        [audioPlayer play];
        int channels = audioPlayer.numberOfChannels;
        [audioPlayer updateMeters];
        for (int i=0; i<channels; i++) {
            //Log the peak and average power
            NSLog(@"%d %0.2f %0.2f", i, [audioPlayer peakPowerForChannel:0],[audioPlayer averagePowerForChannel:0]);

NSLog输出是
0 -160.00 -160.00
1 -160.00 -160.00

现在根据Apple的说法:“0 dB的返回值表示满刻度或最大功率; -160 dB的返回值表示最小功率”那么这是否意味着声音处于最小功率?我认为这是不对的,因为音频片段的声音很大。我想我在这里遗漏了一些内容,请您澄清一下。

最佳答案

您正在更新,然后几乎在声音开始后立即询问仪表的值-发送updateMetersplay可能正在运行几十毫秒。因此,如果剪辑开头没有任何提示,则很可能会获得正确的读数。您应该尝试延迟检查,并且可能还需要在检查值之前立即在循环内发送updateMeters

您也永远不会真正获得大于0的 channel 的仪表值,因为无论循环中i的值是多少,都传递0。我认为您打算这样做:

for (int currChan = 0; currChan < channels; currChan++) {
    //Log the peak and average power
    NSLog(@"%d %0.2f %0.2f", currChan, [audioPlayer peakPowerForChannel:currChan], [audioPlayer averagePowerForChannel:currChan]);
}

关于iphone - 试图了解AVAudioPlayer和音频电平表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10504428/

10-12 01:29