如何将texttospeechapi中接收到的pcm/wav转换为android应用程序中的opus/ogg?

7gcisfzg  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(329)

我正在开发一个android应用程序,它使用texttospeechapi从特定文本合成并生成一个声音文件,并将其发送给客户端进行媒体播放。代码段包括:

tts = new TextToSpeech(getApplicationContext(), callback);

// In the callback, synthesize the text "Hello" and saves it to a file.
int result = tts.synthesizeToFile("Hello",
                    null, // No params
                    tempFile,
                    "dummyId");

// Set a listener to keep track of the synthesis progress.    
UtteranceProgressListener listener =
    new UtteranceProgressListener() {

  @Override
  public void onBeginSynthesis(String utteranceId, int sampleRateInHz,
      int audioFormat, int channelCount) {
    // Called right after start. In my case:
    // sampleRateInHz is 24000.
    // audioFormat is 2 (ENCODING_PCM_16BIT).
    // channelCount is 1.
  }

  @Override
  public void onAudioAvailable(String utteranceId, byte[] audio) {
    // The first option to get audio data: the data is 16 bit little endian 
    // PCM samples.
  }

  @Override
  public void onDone(String utteranceId) {
    // The second option to get audio data: read the wav from the file
    // after the synthesis is done. 
    try {
      int audioLength = (int) tempFile.length();
      byte[] fileData = new byte[audioLength];
      InputStream inputStream = new FileInputStream(tempFile.getPath());
      ByteStreams.readFully(inputStream, fileData);
      inputStream.close();

      // Send to client..

    } catch (IOException e) {
      Log.i(TAG, e.getMessage());
    };
  }
};

tts.setOnUtteranceProgressListener(listener);

如上所示,有两种方法可以检索数据:以流方式接收数据,或者最终从一个文件中一次读取所有数据。
问题是,客户端不支持解码wav,只支持opus/ogg。客户端将接收到的数据写入ogg\u sync\u缓冲区。
我的问题是:
理想情况下,是否可以转换接收到的pcm onAudioAvailable 去opus/ogg(e、 g.一接到 onAudioAvailable ,我们得到的是标题信息和 byte[] . 我们能不能把它们转换成可以马上发送给客户并反馈给客户的东西 ogg_sync_buffer ?)
如果1)不可能。在 OnDone ,在将整个wav文件发送到客户端之前,如何将其转换为ogg?
我研究过mediacodec和mediamuxer API,但似乎两者都不适合。
谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题