安卓媒体播放器分贝读数

4
我搜索了类似的话题,但没有找到清晰简明的答案。我一直在尝试找到一种方法,可以在 Android 媒体播放器正在播放时确定给定时间点的分贝级别输出。我无法找到一种方法来确定手机在播放歌曲时某个时间点的音量大小。我一直在查阅媒体播放器 API,但我无法弄清楚如何在播放歌曲期间在给定时间获得读数。任何想法或帮助都将不胜感激。
2个回答

5

我认为你需要使用MediaRecorder来录制音频:

mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile("/dev/null"); 
mRecorder.prepare();
mRecorder.start();

   public double getAmplitude() {
            if (mRecorder != null)
                    return  (mRecorder.getMaxAmplitude());
            else
                    return 0;

    }

计算 Db 值:

要计算 Db 值:

  powerDb = 20 * log10(getAmplitude() / referenceAmp);

通常选择信号最大幅度作为参考振幅。也就是说,我们对信号进行归一化处理,使得最大幅度被定义为1,或者0dB。


我认为这不是你需要的,因为我认为你想要的是分贝(SPL)测量,而不是分贝功率比--请参见https://dev59.com/gmHVa4cB1Zd3GeqPlEEE#9598848。 - the_mandrill
你好,最大信号幅值是什么意思?最大振幅吗?如果是的话,它还是相对的吗?如果不是,我该如何获取最大信号幅值?最好的问候。 - smoothumut
1
我来这里是为了找一个播放器,而不是录音机。 - Jiang YD

2
作者已经不在这里了,但我仍然想为后人提供帮助。我认为理解您想要做什么的关键是弄清楚您所说的分贝是什么意思,以及您对Android系统输出的理解。在这种情况下,似乎您正在尝试测量耳机的输出,这是不可能的,除非使用外部耳机校准系统,以便您知道dB输出相当于耳机的dB SPL输出。
如果这是目标并且您理解了这一点,那么Android提供的可视化程序类visualizer可能会很有用。它还提供8位FFT频率数据以及幅度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接