【问题标题】:Android: How to scale the return value of getMaxAmplitude()?Android:如何缩放 getMaxAmplitude() 的返回值?
【发布时间】:2013-02-08 07:47:53
【问题描述】:

这个函数的返回值应该是一个从0到32767的整数,代表音频的幅度。

但是,经过测试,即使是很小的声音也很容易达到最大值(32767)。例如,婴儿哭声将输出 (32767) 幅度。但是一点点声音也会输出(32767)幅度。

请问如何管理这个函数的返回值?

感谢您的帮助。

【问题讨论】:

    标签: android audio signal-processing


    【解决方案1】:

    假设您的传感器/麦克风/解码器在 0 到 100 范围内响应,因此 0 映射到 0 和 100 将映射到 32767。

    ScaleConstant = 32767/100 
    

    对于 50 的输出:

    value = 50*ScaleConstant
    

    【讨论】:

    • 谢谢。但问题是很容易达到最大值。例如,婴儿啼哭将输出“32767”。但是鼠标右键也会输出“32767”。没有意义所以想问问有没有什么方法可以调整或者覆盖google的方法。
    【解决方案2】:

    您的设备似乎对声音非常敏感。我之前在android中实现过这段代码没有问题。我建议在另一台设备上测试它并检查问题是否仍然存在或代码是否存在问题。

    getMaxAmplitude() 函数返回一个介于 0 到 +32767 之间的值,它是作为声压测量的噪声响度的估计值。要近似获得以 dB 为单位的值,您可以在 android 中使用以下代码,这是对数学方程的直接解释。

    20 * Math.log10(mediaRecorderObject.getMaxAmplitude())
    

    这将返回一个近似的 dB 值。

    我建议的另一件事是,您可以使用手机校准应用程序。在应用程序启动之前,您可以在静音环境中进行录音。因此,如果在两部不同手机上运行的应用程序在静音环境中的录音显示值为 4000 和 6000,您可以添加适合您的应用程序的缩放因子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-27
      • 2011-09-29
      • 1970-01-01
      • 2011-05-08
      • 2023-04-04
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      相关资源
      最近更新 更多