Я пытаюсь воспроизвести звук, который идет из моего микрофона.Код успешно работал с динамиками, но не с моим микрофоном.
Я использую SourceDataLine и пишу в него из файла (.wav).Код работает только тогда, когда я выбираю колонки для микшера.Как я могу воспроизводить звук в том виде, в котором он звучит из моего микрофона?
public void playSound(String fileName, String micName) {
Mixer mixer = getMixer(micName);
if (mixer == null) {
return;
}
File file = new File(fileName);
DataLine.Info info = null;
SourceDataLine source = null;
AudioInputStream stream = null;
byte[] buffer = null;
try {
stream = AudioSystem.getAudioInputStream(file);
System.out.println(stream.getFormat().toString());
info = new DataLine.Info(SourceDataLine.class, stream.getFormat());
source = (SourceDataLine) mixer.getLine(info);
source.open(stream.getFormat());
buffer = stream.readAllBytes();
} catch (Exception e) {
e.printStackTrace();
return;
}
source.start();
source.write(buffer, 0, buffer.length);
source.drain();
source.close();
}
private Mixer getMixer(String micName) {
for (Mixer.Info info: AudioSystem.getMixerInfo()) {
if (info.getName().equals(micName)) {
return AudioSystem.getMixer(info);
}
}
return null;
}
Когда я пытаюсь записать этот SourceDataLine в микрофонный микшер, я получаю
java.lang.IllegalArgumentException(Строка не поддерживается: интерфейс SourceDataLine поддерживает формат PCM_SIGNED 44100,0 Гц, 16 бит, моно, 2 байта / кадр, little-endian)
, но использование динамиков не вызывает проблем.