taktıktan sonra ben bilgisayara bağlı herhangi bir uygun mikrofon varsa algılamak ve kullanıcıyı uyarmak zorunda basit bir yakalama/oynatma Salıncak uygulaması vardır. Böyle arka plan iş parçacığı denilenJava Ses yenileme Hatları liste bir mikrofon
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();
sorun olduğunu uğraşırsanız, bir sürü sonra beni yeni eklenen veya kaldırılan mikrofonu algılamak için izin verilen tek çözüm buldum Cihaz açıklanan metodu kullanarak doğru bir şekilde tespit edilmesine rağmen, temel hatların listesi yenilenmez.
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.
tazelenmiş AudioSystem satırları listesini almak için herhangi bir yolu var mı: ses kaydı için çalışırken O program başlatıldığında, ve cihaz daha sonra, aşağıdaki istisnası atılır takılır? Belki de önbelleklemeyi önlemek için JDK13Services
geçici çözümüne benzer bir şey var mı?
GÜNCELLEME: bir istisna atar Kodu:
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;
}
ve İstisna kendisi:
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.
İlginç bir soru, 1. Sadece kontrol etmek için, 'com.sun' paketlerinde bir sınıf kullanmanın kırılganlığını fark ediyorsunuz, değil mi? Var olduğu JRE'lerde bile, sonraki sürümde kaldırılmış/taşınmış/yeniden adlandırılmış olabilir. –
Nitekim, bu en azından kötü bir uygulamadır biliyorsunuzdur, ama gerçekten benim son çare oldu. Bir Java Ses uygulama kusuru olarak düşünülebilir. –
Birçoğu. JavaSound, desteklemeyi amaçladığı sınırlı sayıda ürün için iyidir, ancak Sun hiçbir zaman daha fazla geliştirmedi. –