gpt4 book ai didi

java - 捕获内部音频Java

转载 作者:行者123 更新时间:2023-12-03 02:06:32 24 4
gpt4 key购买 nike

我将从程序中录制声音。我使用Ubuntu 14.04和PulseAudio。
现在,我尝试从Pulseaudio进行录音,但目前我仅从麦克风进行录音。
如何从Pulseaudio而不是麦克风记录声音?

public static void captureAudio() {
try {
final AudioFormat format = getFormat();
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
final TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info);
line.open(format);
line.start();
Runnable runnable = new Runnable() {
int bufferSize = (int)format.getSampleRate() * format.getFrameSize();
byte buffer[] = new byte[bufferSize];

public void run() {
out = new ByteArrayOutputStream();
running = true;
try {
while (running) {
int count = line.read(buffer, 0, buffer.length);
if (count > 0) {
out.write(buffer, 0, count);
}
}
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
};
Thread captureThread = new Thread(runnable);
captureThread.start();
} catch (LineUnavailableException ex) {
ex.printStackTrace();
}
}

我尝试了一些方法来更改我的代码:
Mixer mixer = AudioSystem.getMixer(null);

然后:
final TargetDataLine line = (TargetDataLine) mixer.getLine(info);

希望任何人都有解决方案。

问候
丹尼尔

最佳答案

仅靠Java无法解决此问题。 Java仅看到已经存在的设备,如以下Java程序所示:

import javax.sound.sampled.*;

public class ListDevices {
public static void main(final String... args) throws Exception {
for (final Mixer.Info info : AudioSystem.getMixerInfo())
System.out.format("%s: %s %s %s %s%n", info, info.getName(), info.getVendor(), info.getVersion(), info.getDescription());
}
}

您需要做的是为音频系统创建回送设备。以下帖子显示了如何执行此操作: https://askubuntu.com/questions/257992/how-can-i-use-pulseaudio-virtual-audio-streams-to-play-music-over-skype目的有所不同,但它应该适合您的情况,因为对我而言,您的情况似乎比该文章中描述的情况简单。

应该可以使用 pactl从Java运行那些 Process命令。

关于java - 捕获内部音频Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27473522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com