音频如何在Java中从声卡捕获声音?
我正在制作一个程序,让你远程访问并控制电脑。到目前为止,从按键、鼠标点击、鼠标指针到远程显示,一切都非常完美。我的下一步是将音频从远程计算机发送到控制计算机。我搜索了又搜索,但只找到了有关录制麦克风输入的信息。我需要知道如何从计算机的声卡捕获声音并通过插座发送。麦克风捕获代码的示例如下所示:
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Line;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.Port;
import javax.sound.sampled.TargetDataLine;
public class Start {
public static TargetDataLine line;
public static void main(String[] args){
AudioFormat format = getAudioFormat();
Line.Info info = Port.Info.SPEAKER;
try {
line = (TargetDataLine) AudioSystem.getLine(info);
line.open(format);
line.start();
Thread stop = new Thread(){
@Override
public void run(){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
line.stop();
line.close();
}
};
stop.start();
AudioInputStream ais = new AudioInputStream(line);
File file = new File("C:/Users/Savannah/Desktop/sound.au");
file.createNewFile();
AudioSystem.write(ais, AudioFileFormat.Type.AU, file);
} catch (LineUnavailableException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static AudioFormat getAudioFormat(){
float sampleRate = 16000;
int sampleSizeInBits = 8;
int channels = 2;
boolean signed = true;
boolean bigEndian = true;
AudioFormat format = new AudioFormat(sampleRate, sampleSizeInBits,
channels, signed, bigEndian);
return format;
}
}
# 1 楼答案
要从计算机声卡捕获声音并通过插座发送,可以使用以下代码。首先运行服务器,然后运行客户端类
和客户端: