Попытка эмулировать микрофон (javax.sound.sampled) - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь воспроизвести звук, который идет из моего микрофона.Код успешно работал с динамиками, но не с моим микрофоном.

Я использую 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)

, но использование динамиков не вызывает проблем.

...