java获取声音与播放声音

    技术2024-11-10  21

    package org.bling.sound; import java.io.BufferedInputStream; import java.io.IOException; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.DataLine; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.SourceDataLine; import javax.sound.sampled.TargetDataLine; public class MySound5_1 { private AudioFormat audioFormat = null; private TargetDataLine targetDataLine = null; private SourceDataLine sourceDataLine = null; private DataLine.Info dataLine_info = null; private DataLine.Info out_dataLine_info = null; public MySound5_1() throws LineUnavailableException, IOException{ audioFormat = new AudioFormat(8000.0f,8,1,true,false);//定义声音的格式 8000.0f 每秒的样本数 8每个样本中的位数 1声道数 // 指示数据是有符号的 以 little-endian 字节顺序存储单个样本中的数据 dataLine_info = new DataLine.Info(TargetDataLine.class,audioFormat);//lineClass - 该信息对象所描述的数据行的类 format - 所需的格式 targetDataLine = (TargetDataLine)AudioSystem.getLine(dataLine_info);//从麦克风中读取声音 获得与指定 dataLine_info 对象中的描述匹配的行 out_dataLine_info = new DataLine.Info(SourceDataLine.class,audioFormat); sourceDataLine = (SourceDataLine)AudioSystem.getLine(out_dataLine_info);//将声音数据传递到音响 获得与指定out_dataLine_info对象中的描述匹配的行 byte[] b = new byte[100000];//定义数组b targetDataLine.open(audioFormat);//打开指定格式的行 targetDataLine.start();//允许某数据执行i/o流 sourceDataLine.open(); sourceDataLine.start(); int len = 0; while((len = targetDataLine.read(b, 0, b.length)) > 0){ //在数组b中读取从0到b。length的字节 sourceDataLine.write(b, 0, len); //从0到len的数组字节写入到数组b中 } targetDataLine.close(); sourceDataLine.close(); System.exit(0); } public static void main(String[] args) { try { new MySound5_1(); } catch (LineUnavailableException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

    最新回复(0)