我将录制我的节目中的声音。我使用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);
希望任何人都有解决方案。
问候 丹尼尔
答案 0 :(得分:0)
仅从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
命令。