컴퓨터에 적절한 마이크가 연결되어 있지 않은지 감지하고 사용자에게 경고하는 간단한 캡처/재생 스윙 앱이 있습니다. 이 같은 백그라운드 스레드에서 호출자바 사운드 새로 고침 마이크를 연결 한 후 줄 목록
com.sun.media.sound.JDK13Services.setCachingPeriod(0);
private static boolean isMicrophoneAvailable() {
try {
if (!AudioSystem.isLineSupported(Port.Info.MICROPHONE)) {
log.debug("NO MICROPHONE FOUND");
return false;
} else {
log.debug("MICROPHONE FOUND");
return true;
}
} catch (IllegalArgumentException e) {
log.debug("INCONSISTENT");
}
return false;
}
:
new Thread() {
public void run() {
while(!thisFrame.isClosed()){
if(isMicrophoneAvailable() == true){
//OK
}else{
//WARN
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
문제가 있다는 것입니다 손보는 주위의 많은 후 나는 나를 새로 연결하거나 제거 마이크를 감지 할 수있는 유일한 솔루션을 발견했다 설명 된 방법을 사용하여 장치가 올바르게 감지 되더라도 기본 행 목록은 새로 고쳐지지 않습니다.
java.lang.IllegalArgumentException: No line matching interface TargetDataLine supporting format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, big-endian is supported.
상쾌의 AudioSystem의 라인 목록을 얻을 수있는 방법이 있나요 : 사운드를 녹음 할 때 그 프로그램이 시작될 때, 장치가 나중에, 다음과 같은 예외가 발생 부착? 캐싱을 피하기 위해 초기에 JDK13Services
해결 방법과 비슷한 것을 사용할 수 있습니까?
UPDATE : 예외가 발생 코드 :
AudioFormat format = formatControls.getDefaultFormat();
DataLine.Info info = new DataLine.Info(TargetDataLine.class,format);
try {
line = (TargetDataLine) AudioSystem.getLine(info);
line.open(format, line.getBufferSize());
} catch (LineUnavailableException ex) {
shutDown("No audio input device available. Please make sure that a microphone is attached to your computer");
return;
} catch (Exception ex) {
log.error(ex.toString());
shutDown(ex.toString());
return;
}
및 예외 자체 :
java.lang.IllegalArgumentException: No line matching interface TargetDataLine supporting format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, big-endian is supported.
흥미로운 질문 +1. 확인하기 만하면, 당신은'com.sun' 패키지에서 클래스 사용의 취약 함을 깨닫게 될 것입니다, 그렇죠? 존재하는 JRE에서도 다음 버전에서 제거/이동/이름 변경이 가능합니다. –
실제로, 이것이 적어도 나쁜 습관이라는 것을 알고 있지만, 실제로는 내 마지막 수단이었습니다. Java Sound 구현 결함으로 간주 될 수 있습니다. –
많은 중 하나. JavaSound는 제한된 범위의 것들을 지원하는 데 유용하지만, Sun은 실제로 그것을 더 발전시키지 못했습니다. –