Java中的麦克风级别

Tim*_*len 4 java audio microphone

我正试图通过Java访问麦克风的级别.我不需要录制任何东西,我只想知道声级的相对比例.

这可能是实时的吗?

如果这是不可能的,也许这可行:当电平超过某个值时开始录制,当电平下降到一定水平一段时间后停止录制四分之一秒的位并读取它的音量,如果它低于阈值停止录音.

提前致谢

Asc*_*rer 6

http://www.technogumbo.com/tutorials/Java-Microphone-Selection-And-Level-Monitoring/Java-Microphone-Selection-And-Level-Monitoring.php

关于此的相当不错的文章.帮了我很多忙.

据我所知,这使用@ Nick的回答中谈到的均方根

基本上:

public int calculateRMSLevel(byte[] audioData)
{ 
    long lSum = 0;
    for(int i=0; i < audioData.length; i++)
        lSum = lSum + audioData[i];

    double dAvg = lSum / audioData.length;
    double sumMeanSquare = 0d;

    for(int j=0; j < audioData.length; j++)
        sumMeanSquare += Math.pow(audioData[j] - dAvg, 2d);

    double averageMeanSquare = sumMeanSquare / audioData.length;

    return (int)(Math.pow(averageMeanSquare,0.5d) + 0.5);
}
Run Code Online (Sandbox Code Playgroud)

和用法:

int level = 0;
byte tempBuffer[] = new byte[6000];
stopCapture = false;
try {
    while (!stopCapture) {
        if (targetRecordLine.read(tempBuffer, 0, tempBuffer.length) > 0) {
            level = calculateRMSLevel(tempBuffer);
        }
    }
    targetRecordLine.close();
} catch (Exception e) {
    System.out.println(e);
    System.exit(0);
}
Run Code Online (Sandbox Code Playgroud)