Захват звука с мишкера

471
04 сентября 2017, 05:12

Доброго времени суток , Нужна помощь как захватить звук с мишкера системы?

    AudioFormat audioFormat = new AudioFormat(48000, 16, 2, true, false);
    Mixer.Info[] mixersInfo = AudioSystem.getMixerInfo();
    Mixer.Info selectedMixerInfo = mixersInfo[0];
    TargetDataLine recordLine = AudioSystem.getTargetDataLine(audioFormat, selectedMixerInfo);
    recordLine.open(audioFormat);
    recordLine.start();

    // К примеру
    System.out.println(recordLine.getLevel());

Получаю
(java.lang.IllegalArgumentException: Line unsupported: interface TargetDataLine supporting format PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian) менял форматы всё аналогично(

Answer 1

Получаю (java.lang.IllegalArgumentException: Line unsupported: interface TargetDataLine supporting format PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian) менял форматы всё аналогично(

Микшер не поддерживает соотв. формат, для проверки можно использовать:

boolean supported = AudioSystem.getMixer(selectedMixerInfo).isLineSupported(recordLine.getLineInfo());

Вот тут предлагают варианты получения поддерживаемых форматов - Java - recording from mixer.
Вот рабочий пример захвата звука с микрофона и последующего вывода Java example for capturing and playing data from microphone:

AudioFormat format = new AudioFormat(44100, 16, 2, true, false);
DataLine.Info targetInfo = new DataLine.Info(TargetDataLine.class, format);
DataLine.Info sourceInfo = new DataLine.Info(SourceDataLine.class, format);
try {
    TargetDataLine targetLine = (TargetDataLine) AudioSystem.getLine(targetInfo);
    targetLine.open(format);
    targetLine.start();
    SourceDataLine sourceLine = (SourceDataLine) AudioSystem.getLine(sourceInfo);
    sourceLine.open(format);
    sourceLine.start();
    int numBytesRead;
    byte[] targetData = new byte[targetLine.getBufferSize() / 5];
    while (true) {
        numBytesRead = targetLine.read(targetData, 0, targetData.length);
        if (numBytesRead == -1) break;
        sourceLine.write(targetData, 0, numBytesRead);
    }
}
catch (Exception e) {
    System.err.println(e);
}
READ ALSO
Передача оъекта из фрагмента в активити

Передача оъекта из фрагмента в активити

Есть фрагмент, в котором находится ListViewПри клике на элемент списка идет вызов другого активити

447
Вывести не полный список товаров jsp

Вывести не полный список товаров jsp

Мне нужно вывести не полный список товаров на страницеТо есть их, например, в сумме 40, и я хочу, чтобы первоначально показывалось 10, и нажимая...

350
Как в for цикле подставлять входные данные? Java

Как в for цикле подставлять входные данные? Java

Всем приветЕсть вот такой код

355