java字节数组播放声音

java字节数组播放声音,java,audio,Java,Audio,我有一个小程序,可以从数据线麦克风读取到字节数组 我不是100%确定它能工作,只是通过打印阵列的一部分,当我在麦克风旁边发出声音时,它似乎会改变:) 我喜欢播放声音我如何播放缓冲区中的数据(字节数组到声音) 编辑: 最后我想做的是将字节数组发送到其他应用程序并立即播放 与收音机的实时流一样测试捕获数据的简单方法是将它们保存到文件中,然后使用原始文件导入audacity加载。 只需将原始文件格式指定为: 采样率8KHz 格式化PCM大端 立体声16位基于: 创建/选择具有相同音频格式的Source

我有一个小程序,可以从数据线麦克风读取到字节数组 我不是100%确定它能工作,只是通过打印阵列的一部分,当我在麦克风旁边发出声音时,它似乎会改变:)

我喜欢播放声音我如何播放缓冲区中的数据(字节数组到声音)

编辑:
最后我想做的是将字节数组发送到其他应用程序并立即播放

与收音机的实时流一样

测试捕获数据的简单方法是将它们保存到文件中,然后使用原始文件导入audacity加载。 只需将原始文件格式指定为: 采样率8KHz 格式化PCM大端 立体声16位基于:


创建/选择具有相同音频格式的
SourceDataLine
,并在其中写入字节。或者将数据包装在
AudioInputStream
中,并使用
WaveFileWriter
将其作为.WAV文件存储到磁盘。这里有很多示例:必须有一种方法可以直接从字节数组播放数据或将其转换为某种东西els(留在mem中),然后播放它,我想避免hdyes,但是您需要调试您的记录和回放代码,这种方式更容易测试我需要导入的内容以供使用AudioPlayer@Sachin-Setiya:
import java.io.InputStream
AudioData
AudioDataStream
需要
sun.
软件包,这已经过时了(大约20年前)并且他们有很多bug。请尽量避免使用它。)(这可能是一个更好的方法。)
 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");
        }

    }
}
// Create the AudioData object from the byte array
AudioData audiodata = new AudioData(byteArray);
// Create an AudioDataStream to play back
AudioDataStream audioStream = new AudioDataStream(audioData);
// Play the sound
AudioPlayer.player.start(audioStream);