我正在开发一个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,但似乎两者都不适合。
谢谢!
暂无答案!
目前还没有任何答案,快来回答吧!