【问题标题】:Calculating sound level of audio file results in low dB value计算音频文件的声级会导致低 dB 值
【发布时间】:2018-07-12 01:23:52
【问题描述】:

所以我使用智能手机麦克风以 PCM 16 位格式、1 个通道、采样频率 44100 Hz 录制了音频文件。

我将此文件读取为字节数组:

fun readFileAsByteArray(file: File = audioFile): ByteArray{
            val inputStream = FileInputStream(file)
            val dataStream = DataInputStream(inputStream)
            val byteArray = ByteArray(file.length().toInt())
            dataStream.read(x)
            dataStream.close()
            inputStream.close()
            return byteArray
        }

然后我想以 dB 为单位计算此文件的声级。 我使用readFileAsByteArray()data 作为字节数组获取

然后我将 byte[] 转换为 short[] 到 double[]

var sbuf = ByteBuffer.wrap(data).asShortBuffer()
        var audioShorts = ShortArray(sbuf.capacity())
        sbuf.get(audioShorts)

        var audioDoubles = DoubleArray(audioShorts.size)

        for (i in audioShorts.indices) {
            audioDoubles[i] = java.lang.Short.reverseBytes(audioShorts[i]).toDouble() / 0x8000
        }

然后我计算分块样本数组的 RMS 值:

 val batchArray = audioDoubles.asSequence().chunked(size = 1792)
 val rmsScore = arrayListOf<Double>()
        for (batch in batchArray){
            val sum: Double =  batch.sumByDouble { it * it }
            val rms = Math.sqrt(sum/batch.size)
            rmsScore.add(rms)
        }

然后我计算 dB。

 val minrms = 2.2414737665141438E-4

 val dbArray = arrayListOf<Double>()

 rmsScore.forEach { sample -> dbArray.add(20*Math.log10(sample/minrms)) }

我使用 minrms 作为参考值(我记录了一些静音并且 minrms 是注册的最低值)。

问题是我得到的最大 dB 水平约为 70。 我知道智能手机中的麦克风有 ~ 100 dB 的限制。 在 Google Play 商店中可以找到能够注册更高值的应用程序。

我只是在我的代码中看不到限制这个 dB 值的问题。

【问题讨论】:

    标签: android audio kotlin signal-processing


    【解决方案1】:

    问题必须与您的参考电压有关。 我对您使用的是实际电压还是带符号的 2 字节 ADC 值感到困惑。如果您使用的是 ADC 值,您可以按照here 列出的技术吗?

    您可以使用 1 作为参考,而不是 0 dB 作为峰值。 32767 将是从 0 到 90.3 的 dB 标度的峰值 pcm 值(接近智能手机麦克风的引用值)。

    【讨论】:

      猜你喜欢
      • 2011-01-27
      • 1970-01-01
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      相关资源
      最近更新 更多