【问题标题】:Convert an audio stream to PCM将音频流转换为 PCM
【发布时间】:2017-02-28 01:28:05
【问题描述】:

我正在尝试从文本转语音接口 (MaryTTS) 获取音频流并将其流式传输到 SIP RTP 会话中(使用 Peers)。

Peers 想要一个SoundSource 来流式传输音频,这是一个定义为的接口

public interface SoundSource {

    byte[] readData();

}

MaryTTS 将String 合成为AudioInputStream。我试图简单地读取流并将其缓冲到实现SoundSource 的 Peers 行中

MaryInterface tts = new LocalMaryInterface();
AudioInputStream audio = tts.generateAudio("This is a test.");
SoundSource soundSource = new SoundSource() {

    @Override
    public byte[] readData() {
        try {
            byte[] buffer = new byte[1024];
            audio.read(buffer);
            return buffer;
        } catch (IOException e) {
            return null;
        }
    }
};
// issue call with soundSource using Peers

电话响了,我听到的是缓慢、低沉、嘈杂的声音,而不是合成语音。我想这可能与 SIP RTP 会话所期望的音频格式有关,因为 Peers 文档指出

声源必须是具有以下格式的原始音频:线性 PCM 8kHz、16 位有符号、单声道、小端序。

如何转换/读取AudioInputStream 以满足这些要求?

【问题讨论】:

    标签: java audio sip rtp


    【解决方案1】:

    我知道的一种方法是 - 鉴于您正在使用的系统,我不知道它是否会通过:

    ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
      try {
        byte[] data=new byte[1024];
        while(true) {
          k=audioInputStream.read(data, 0, data.length);
          if(k<0) break;
          outputStream.write(data, 0, k);
        }
        AudioFormat af=new AudioFormat(8000f, 16, 1, true, false);
        byte[] audioData=outputStream.toByteArray();
        InputStream byteArrayInputStream=new ByteArrayInputStream(audioData);
        AudioInputStream audioInputStream2=new AudioInputStream(byteArrayInputStream, af, audioData.length/af.getFrameSize());
        outputStream.close();
      }
      catch(Exception ex) { ex.printStackTrace(); }
    }
    

    还有这个

    AudioSysytem.getAudioInputStream(AudioFormat targetFormat, AudioInputStream sourceStream)
    

    您可以与上述参数一起使用。

    【讨论】:

      猜你喜欢
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 2023-03-08
      • 2017-07-04
      • 2021-06-27
      • 2023-03-18
      相关资源
      最近更新 更多