安卓:从麦克风读取音频振幅

11

我正在尝试录制来自MIC的声音并绘制实时图表。我能够录制并绘制图表。问题在于使用下面的代码记录的值不准确,例如...当没有任何声音时我得到下面的图片。我看到一些示例使用fft,但我不确定在我的情况下是否有任何帮助,因为我正在尝试绘制时间域图形,目前看不出将其转换为频率域的用途。其他人正在使用平均功率,这可能有帮助,但我不确定。

感谢任何帮助。

输入图像描述

bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE,RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING);

    recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
            RECORDER_SAMPLERATE, RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING, bufferSize);

    short data [] = new short[bufferSize];

    while (!Thread.interrupted()) {

        recorder.startRecording();

        recorder.read(data, 0, bufferSize);

        recorder.stop();

        for (short s : data)
        {
            try {
                Thread.sleep((long) 300.00);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            postUI (Math.abs(s));
        }
    }

    recorder.release();

你好,请问你是如何在AudioRecorder中获取声音振幅的?请帮忙。 - Aashish Bhatnagar
2
录音机 = new AudioRecord(MediaRecorder.AudioSource.MIC, RECORDER_SAMPLERATE, RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING, bufferSize);recorder.startRecording();recorder.read(data, 0, bufferSize);recorder.stop();for (short s : data) { average += Math.abs(s); } - user591124
1个回答

1

尝试使用更高的采样率。最大值为48000,但44100是标准。

此外,麦克风可能只是录制了背景噪音。


我取了短数组中所有值的平均值,而不是 abs(s)。这样做很好。 - user591124

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