本帖最后由 未晴雾香 于 2024-10-12 19:18 编辑
最近在使用Java的okhttp调用OpenAi的speech生成语音接口,生成的语音音频一直报错,经过反复调试代码,一直显示语音文件损坏等等错误。
而使用API Post进行调用接口,返回音频可以正常播放。
下面是一段curl:
curl --request POST \
--url https://api.openai.com/v1/audio/speech \
--header 'Accept: */*' \
--header 'Accept-Encoding: gzip, deflate, br' \
--header 'Authorization: Bearer ********************' \
--header 'Connection: keep-alive' \
--header 'Content-Type: application/json' \
--header 'User-Agent: PostmanRuntime-ApipostRuntime/1.1.0' \
--data '{
"model": "tts-1",
"input": "你好,有什么可以帮助你的",
"voice": "alloy"
}'
下面是我的Java代码:
// textToSpeech是上面datad的实体类
String requestString = JSON.toJSONString(textToSpeech);
Request request = new Request.Builder()
.header("Authorization", "Bearer " + apiKey)
.url(ValidateUtil.concatUrl(baseUrl, openAiConfig.getSpeechUrl()))
.post(RequestBody.create(MediaType.parse("application/json"), requestString))
.build();
// 发送请求并获取响应
try (Response response = okHttpClient.newCall(request).execute()) {
// 检查响应是否成功
if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
}
// 获取响应体
ResponseBody responseBody = response.body();
if (responseBody != null) {
InputStream inputStream = responseBody.byteStream();
return inputStream;
}
} catch (IOException e) {
e.printStackTrace();
}
问题排查:
通过Java调用,返回的InputStream如下图:
而api post调用的结果如下:
因为mp3音频的前几个字节FF F3 E4 C4 ,所以可以知道okhttp这里获取的是错误的字节流。
经过多方面的查找和问AI,一直没有找到造成的原因和解决方案。因此求助站内各位大佬,请求各位大佬帮助
|