【问题标题】:Hijack audio with Java?用 Java 劫持音频?
【发布时间】:2012-09-18 19:33:20
【问题描述】:

我一直在尝试修改找到at the bottom of this page 的一些代码,以便使用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

我已尝试更改我的格式以适应所需的格式,但异常没有发生并且没有记录任何内容。我做错了什么?

【问题讨论】:

  • 你不能在 java 中“劫持”系统音频,比如 Audio Hijack Pro。
  • 因为Java是在虚拟机中执行的?
  • 有点。说“Java 平台不支持该功能”之类的话会更正确。

标签: java audio audio-recording


【解决方案1】:

试试下面的

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-01-23
    • 2010-11-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 2011-10-03
    • 2019-05-17
    相关资源
    最近更新 更多