java字节数组播放声音

use*_*950 4 java audio

我有一个小程序,从数据线麦克风读取到字节数组我不是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");
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:
我最终想要做的是将字节数组发送到其他应用程序并立即播放,
如收音机的直播

kir*_*sos 7

基于此:

// 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);
Run Code Online (Sandbox Code Playgroud)

  • `AudioData` 和 `AudioDataStream` 需要 `sun.*` 包,这是 **WAY OUT OF DATE**(大约 20 年前)并且它们有很多错误。请尽量避免使用它[[参考](/sf/ask/1841381/#comment4884807_26311)]。(而 [this](https://docs.oracle.com/javase/tutorial/sound/playing.html) 可能是更好的方法。) (4认同)
  • 使用AudioPlayer我需要导入什么 (2认同)