Android 媒体播放器分贝读数

标签 android

我搜索过类似的主题,但找不到清晰简洁的答案。我一直在尝试找出一种方法,可以在播放 Android 媒体播放器时确定给定时间点的分贝级输出。我找不到一种方法来确定播放歌曲时给定时间点的手机音量。我一直在查看媒体播放器 API,但我无法弄清楚如何在播放歌曲期间的给定时间获取读数。

感谢任何想法或帮助。

最佳答案

我认为您必须使用 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 值:

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

通常选择最大信号幅度作为引用幅度。也就是说,我们将信号归一化,将最大幅度定义为 1,即 0 dB

关于Android 媒体播放器分贝读数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8252813/

相关文章:

android - 我怎样才能覆盖 onDraw 以便我将绘制的内容(作为位图)进行转换?

android - 您如何检测声音文件何时完成?

android - AppCompat 工具栏的 colorControlNormal 正在被缓存

java - 绘制箭头时的偏移路径

java - 如何更新 android textview 的文本

带有自定义 URI 的 Android 深度链接

android - FloatingActionButton 锚定在 View 顶部

java - Gradle buildConfigField 非法前向引用

安卓分析 : Disable Analytics Tracking

java - 应用程序返回内存时单例不可用