4

Java でシステム オーディオをハイジャックするために、このページの下部にあるいくつかのコードを変更しようとしています。captureAudio() で変更した部分は次のとおりです。

Mixer mixer = AudioSystem.getMixer(mixerInfo[0]); // "Java Sound Audio Engine"
final TargetDataLine line = (TargetDataLine) mixer.getLine(info);

このコードを実行すると、次のようにスローされます。

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Line unsupported: interface TargetDataLine supporting format PCM_SIGNED 44100.0 Hz, 16 bit, mono, 2 bytes/frame, big-endian

フォーマットを必要なフォーマットに合わせて変更しようとしましたが、例外が発生せず、何も記録されません。私は何を間違っていますか?

4

1 に答える 1

2

以下を試してください

TargetDataLine line;
DataLine.Info info = new DataLine.Info(TargetDataLine.class, 
    format); // format is an AudioFormat object
if (!AudioSystem.isLineSupported(info)) {
    // Handle the error.
    }
    // Obtain and open the line.
try {
    line = (TargetDataLine) AudioSystem.getLine(info);
    line.open(format);
} catch (LineUnavailableException ex) {
        // Handle the error.
    //... 
}

http://docs.oracle.com/javase/tutorial/sound/accessing.htmlから取得

AudioFormat を作成するには、使用します

new AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian); サンプルレート = 44100f; sampleSizeInBits = 16; チャネル = 2; 署名済み = 真; bigEndian = true/false どちらが機能するか

ほとんどの場合、上記の構成は Linux や Windows を含むほとんどのプラットフォームで動作しますが、今のところ Mac は試していません

于 2012-09-18T20:37:59.137 に答える