我使用 Yandex SpeechKit API。通过 API 请求数据时,返回音频文件的二进制内容。我试图以.ogg格式保存这个“内容” ,然后用 Java 回放。尝试了常规的 Java 方法和许多库都没有成功。然后我尝试将文件保存为.opus格式并进行转换。
对于转换,我使用了 Jorbis、EasyOgg、Vorbisspi、LibJitsi、Jogg 库。 对于播放,我使用了TinySound库以及“自写”选项。结果,没有任何效果。
要了解我正在使用什么,这里是Yandex 文档的链接。
带有文件保存的代码片段。
private void getSynthesizeVoiceInFile(String filePath, HttpURLConnection http){
File file = null;
try {
int count = 1, c;
file = new File(filePath + ".opus");
while (file.exists()){
file = new File(filePath + "_" + count + ".opus");
count++;
}
InputStream is = http.getInputStream();
FileOutputStream fos = new FileOutputStream(file);
while ((c = is.read()) != -1) fos.write(c);
fos.close();
is.close();
log.DEBUG("GetSynthesizeVoice.getSynthesizeVoiceInFile: Create file. Filepath: " + file.getPath());
}catch (IOException | NullPointerException e){
log.ERROR("GetSynthesizeVoice.getSynthesizeVoiceInFile: Failed to write or create file. Filepath: " + file.getPath());
e.printStackTrace();
}
}
希望懂行的人多多指教。就是不知道怎么挖。。。
我找到了解决问题的方法,我认为它对某些人有用。解决方案很简单。在生成http请求的阶段,一个额外的参数传递了一个带有编码的字符串
&format=lpcm&sampleRateHertz=48000
之后,我将文件的保存更改为.raw格式
相应地,save 函数得到如下形式:
由于输出是 LPCM 编码的音频文件,它可以在没有特殊舞蹈的情况下使用手鼓和其他库“播放”。
代码中调用的类
new testPlay().play(new FileInputStream(file));
如下所示: