我正在运行这个简单的代码来监听我的麦克风并打印出字节。
问题:它在 java 版本“1.6.0_43”上正确监听麦克风的任何更改
但它不会在 java 版本“1.7.0_25”上正确听取麦克风的任何更改
代码在两个版本上都能正常编译和运行。
使用 Java 1.6 的示例输出
- 5172 1
- 5196 2
- 5103 3
- 2859 4
- 2549 5
- 2742 6
- 3112 7
- 5028 8
- 4515 9
- 3856 10
- 5189 11
- 5080 12
- 5165 13
- 4925 14
当它下降到大约 2500 时,就是有声音进入麦克风的时候。
使用 Java 1.7 的示例输出
- 5652 1
- 5655 2
- 5699 3
- 6081 4
- 6213 5
- 5972 6
- 5907 7
- 5828 8
- 5931 9
- 6187 10
- 6015 11
- 5949 12
- 6196 13
它不再检测到来自麦克风的任何噪音。
import java.io.*;
import javax.sound.sampled.*;
public class SpeechDetectionTest {
public static void main(String[] args) {
ByteArrayOutputStream byteArrayOutputStream;
TargetDataLine targetDataLine;
int cnt;
boolean stopCapture = false;
byte tempBuffer[] = new byte[8000];
int countzero, countdownTimer;
short convert[] = new short[tempBuffer.length];
try {
byteArrayOutputStream = new ByteArrayOutputStream();
stopCapture = false;
countdownTimer = 0;
while (!stopCapture) {
AudioFormat audioFormat = new AudioFormat(8000.0F, 16, 1, true, false);
DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class, audioFormat);
targetDataLine = (TargetDataLine) AudioSystem.getLine(dataLineInfo);
targetDataLine.open(audioFormat);
targetDataLine.start();
cnt = targetDataLine.read(tempBuffer, 0, tempBuffer.length);
byteArrayOutputStream.write(tempBuffer, 0, cnt);
try {
countzero = 0;
for (int i = 0; i < tempBuffer.length; i++) {
convert[i] = tempBuffer[i];
if (convert[i] == 0) {
countzero++;
}
}
countdownTimer++;
System.out.println(countzero + " " + countdownTimer);
} catch (StringIndexOutOfBoundsException e) {
System.out.println(e.getMessage());
}
Thread.sleep(0);
targetDataLine.close();
}
} catch (Exception e) {
System.out.println(e);
}
}
}
有任何想法吗?
也发布在这些论坛上,但没有运气=(
http://www.coderanch.com/t/615528//java/Detecting-sound-microphone-Java-Java#2811088