加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

iphone – 试图了解AVAudioPlayer和音频电平测量

发布时间:2020-12-14 19:07:35 所属栏目:百科 来源:网络整理
导读:我正在尝试了解AVAudioPlayer和音频电平计量.我下面的内容是一个播放短音频声音的“AudioPlayer”对象.现在我想输出这个声音的功率(分贝).不知怎的,我不认为我这样做是对的. audioPlayer.meteringEnabled = YES; [audioPlayer play]; int channels = audioPl
我正在尝试了解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的返回值表示最小功率”这是否意味着此声音处于最小功率?我不认为这是真的,因为音频片段是一个相当响亮的声音.我想我在这里遗漏了一些东西,任何澄清都会受到赞赏.

解决方法

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

你也从未真正获得频道的电表值> 0,因为无论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]);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读