【发布时间】:2012-09-25 18:41:47
【问题描述】:
我有一个从数据线麦克风读取到字节数组的小程序 我不是 100% 确定它可以工作,但只是通过打印阵列的一部分,当我在麦克风旁边发出声音时,它似乎会改变:)
我喜欢播放声音我如何播放缓冲区中的数据(字节数组到声音)??
package mic;
import javax.sound.sampled.*;
public class Mic extends Thread{
boolean flag;
TargetDataLine mic;
byte[] buffer;
AudioFormat format;
public static void main(String[] args) {
Mic a=new Mic();
a.start();
}
@Override
public void run()
{
flag=true;
startMic();
while(flag)
{
send();
}
}
public void send()
{
try{
mic.read(buffer,0,512);
System.out.println("1. "+buffer[0]);
}catch(Exception ex)
{
}
}
public void startMic()
{
try{
format=new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,8000.0F,16,2,4,8000.0F,true);
DataLine.Info info=new DataLine.Info(TargetDataLine.class,format);
mic=(TargetDataLine)AudioSystem.getLine(info);
mic.open();
mic.start();
buffer=new byte[512];
}catch(Exception exx)
{
System.out.println("exx");
}
}
}
编辑:
我最终想要做的是将字节数组发送到其他应用程序并立即播放
就像收音机的直播一样
【问题讨论】:
-
创建/选择具有相同
AudioFormat的SourceDataLine并在其中写入您的字节。或者将您的数据包装在AudioInputStream中并使用WaveFileWriter将其作为 .WAV 文件存储到磁盘。 -
这里有很多例子:jsresources.org