Java采集声⾳_通过java采集PC麦克风⾳频及播放wav⾳频⽂
件
AudioFormat对象
sampleSizeInBits 采样位数 每个采样的位数
channels 声道 1: Mono 单声道,2:Stereo ⽴体
signed 有符号⽆符号
bigEndian ⼤端模式存储 还是⼩端模式存储
采集麦克风⾳频
AudioFormat audioFormat = new AudioFormat(16000.0F, 16, 1, true, false);
ccr5
DataLine.Info info = new DataLine.Info(TargetDataLine.class, audioFormat);
TargetDataLine targetDataLine = (Line(info);
targetDataLine.open(audioFormat);
擦鞋巾配方targetDataLine.start();
System.out.println("You can speak now!");
int nByte = 0;
final int bufSize = 3200;
byte[] buffer = new byte[bufSize];
while ((nByte = ad(buffer, 0, bufSize)) > 0) {
System.out.println( new String(buffer) );
}
播放wav⾳频⽂件
AudioInputStream audioInputStream;// ⽂件流
AudioFormat audioFormat;// ⽂件格式
SourceDataLine sourceDataLine;// 输出设备
File file = new File("D:\\a.wav");
/
永久模板>太阳能沼气池
/ 取得⽂件输⼊流
audioInputStream = AudioInputStream(file);
audioFormat = Format();
// 转换⽂件编码
if (Encoding() != AudioFormat.Encoding.PCM_SIGNED) {
audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, SampleRate(), 16,
audioInputStream = AudioInputStream(audioFormat, audioInputStream);
}
// 打开输出设备
DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, audioFormat, AudioSystem.NOT_SPECIFIED); sourceDataLine = (SourceDataLine) Line(dataLineInfo);
sourceDataLine.open(audioFormat); // 打开具有指定格式的⾏,这样可以使⾏获得所有所需的系统资源并变得可操作sourceDataLine.start(); // 允许某⼀数据⾏执⾏数据I/O byte tempBuffer[] = new byte[320];
try {
rat组合
int cnt;
// 读取数据到缓存区
// 从⾳频流读取指定的最⼤数量的数据字节,并将其放⼊给定的字节数组中。
// return: 读⼊缓冲区的总字节数;如果因为已经到达流末尾⽽不再有更多数据,则返回-1 while ((cnt = ad(tempBuffer, 0, tempBuffer.length)) != -1) {
ttbn
if (cnt > 0) {
// 写⼊缓存数据
sourceDataLine.write(tempBuffer, 0, cnt); // 通过此源数据⾏将⾳频数据写⼊混频器
}
}
// Block等待临时数据被输出为空
// 通过在清空数据⾏的内部缓冲区之前继续数据I/O,排空数据⾏中的列队数据
sourceDataLine.drain();
// 关闭⾏,指⽰可以释放的该⾏使⽤的所有系统资源。如果此操作成功,则将⾏标记为 closed,并给⾏的侦听器指派⼀个 CLOSE 事件。
sourceDataLine.close(); } catch (Exception e) { e.printStackTrace(); it(0);
}