Как бы я go о чтении звука с моей гарнитуры? Это явно не сработало - PullRequest
0 голосов
/ 01 апреля 2020

Все мои аудио на p c отправляются в игру, кроме discord / et c, идущих в чат.

Так что в основном мне просто интересно, почему, когда я передаю правильный формат аудио в мой TargetDataLine It не работает ???

Я новичок в аудио в целом вместе с TargetDataLine .. Полностью незнаком с этим классом.

Не лучше ли использовать BufferedIN / OUTReader с обработкой это?

Еще не пытались.

import java.io.*;
import javax.sound.sampled.*;

public class CaptureFromSoundCard
{

    boolean stopCapture = false;
    AudioFormat audioFormat;
    TargetDataLine targetDataLine;
    BufferedOutputStream out = null;
    BufferedInputStream in = null;

    public static void main(String[] args)
    {
        CaptureFromSoundCard tx = new CaptureFromSoundCard();
        tx.captureAudio();
    }

    private void captureAudio()
    {
        try
        {

            Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo();
            audioFormat = getAudioFormat();
            DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class, audioFormat);
            Mixer mixer = AudioSystem.getMixer(mixerInfo[1]);
            System.out.println(mixer.getMixerInfo()); //1 is target 48,000hz, 16bit, stereo(2ch), signed, nobigEndian
            targetDataLine = (TargetDataLine) mixer.getLine(dataLineInfo);
            targetDataLine.open(audioFormat);
            targetDataLine.start();
            Thread captureThread = new CaptureThread();
            captureThread.start();
        }
        catch (Exception e)
        {
            System.out.println(e);
            System.exit(0);
        }
    }

    private AudioFormat getAudioFormat()
    {
        float sampleRate = 48000.0F;
        int sampleSizeInBits = 16;
        int channels = 2;
        boolean signed = true;
        boolean bigEndian = false;

        return new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian);
    }

    class CaptureThread extends Thread
    {
        byte tempBuffer[] = new byte[10000];

        public void run()
        {
            stopCapture = false;
            try
            {
                while (!stopCapture)
                {
                    int cnt = targetDataLine.read(tempBuffer, 0, tempBuffer.length);
                    out.write(tempBuffer);
                }
            }
            catch (Exception e)
            {
                System.out.println(e);
                System.exit(0);
            }
        }
    }
}

Не знаком с обработкой звука.

run:
Headphones (5- Arctis Pro Wireless Game), version Unknown Version
java.lang.IllegalArgumentException: Line unsupported: interface TargetDataLine supporting format PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian
BUILD SUCCESSFUL (total time: 0 seconds)

Выход выше Device Properties Имейте в виду, что это среда IDE NetBeans 8.2, в которой я работаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...