转换G.711-ALAW编码-Java

转换G.711-ALAW编码-Java,java,audio,encoding,g.711,Java,Audio,Encoding,G.711,我正在尝试转换通过UDP编码的G.711 ALAW格式接收的音频流,以便在计算机的扬声器上播放。我正在从服务器接收音频流 服务器编码规范如下所示: “采样率应始终为8 kHz,每个RTP数据包中应有一个30 ms的8位G.711 A-Law PCM编码音频通道。” G.711 A-法律 每包样本:240 有效负载大小:240字节 音频毫秒数:30毫秒 数据包间隔:30毫秒 我能够接收音频流并在我的扬声器上播放,但我唯一能听到的是由于编码产生的白噪声。 任何帮助都将不胜感激 public st

我正在尝试转换通过UDP编码的G.711 ALAW格式接收的音频流,以便在计算机的扬声器上播放。我正在从服务器接收音频流

服务器编码规范如下所示:

  • “采样率应始终为8 kHz,每个RTP数据包中应有一个30 ms的8位G.711 A-Law PCM编码音频通道。”
  • G.711 A-法律
  • 每包样本:240
  • 有效负载大小:240字节
  • 音频毫秒数:30毫秒
  • 数据包间隔:30毫秒
我能够接收音频流并在我的扬声器上播放,但我唯一能听到的是由于编码产生的白噪声。 任何帮助都将不胜感激

public static void main(String[] args) throws LineUnavailableException {
        AudioFormat speakersFormat = new AudioFormat(44100, 16, 1, true, false);

        SourceDataLine speakers;

        DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, speakersFormat);
        speakers = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
        speakers.open(speakersFormat);
        speakers.start();

        int port = 58301;
        
        try {
            
            DatagramSocket serverSocket = new DatagramSocket(port);
            
            while (true) {
                
                byte[] buffer = new byte[240];
                DatagramPacket response = new DatagramPacket(buffer, buffer.length);
                serverSocket.receive(response);

                speakers.write(response.getData(), 0, response.getData().length);
            }
            
        } catch (SocketTimeoutException ex) {
            System.out.println("Timeout error: " + ex.getMessage());
            ex.printStackTrace();
        } catch (IOException ex) {
            System.out.println("Client error: " + ex.getMessage());
            ex.printStackTrace();
        }
    }