UnityWebRequest 发送 POST 请求并处理音频响应
上面的代码是使用 UnityWebRequest 发送一个 POST 请求,将 'textToSpeechRequestBody' 作为请求体发送给指定的 URL。
其中,'speechRequest.uploadHandler' 用于设置请求体的内容,将 'textToSpeechRequestBody' 转换成字节数组,并设置为请求体的内容。
'speechRequest.downloadHandler' 用于设置响应体的处理方式,这里使用 'DownloadHandlerAudioClip' 将响应体解析为音频剪辑。
'speechRequest.SetRequestHeader' 用于设置请求头的内容,包括订阅密钥、输出格式和内容类型。
代码解析
using (UnityWebRequest speechRequest = new UnityWebRequest(m_PostURL, "POST"))
{
byte[] data = System.Text.Encoding.UTF8.GetBytes(textToSpeechRequestBody);
speechRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(data);
speechRequest.downloadHandler = (DownloadHandler)new DownloadHandlerAudioClip(speechRequest.uri, AudioType.WAV);
Debug.Log("传参的值是:" + textToSpeechRequestBody);
yield return speechRequest.SendWebRequest();
if (speechRequest.responseCode == 200)
{
AudioClip audioClip = DownloadHandlerAudioClip.GetContent(speechRequest);
_callback(audioClip, _msg);
}
else
{
Debug.LogError("语音合成失败: " + speechRequest.error);
}
}
请求头解析
// 设置请求头
speechRequest.SetRequestHeader("Ocp-Apim-Subscription-Key", m_AzureSettings.subscriptionKey);
speechRequest.SetRequestHeader("X-Microsoft-OutputFormat", "audio-16khz-32kbitrate-mono-mp3");
speechRequest.SetRequestHeader("Content-Type", "application/ssml+xml");
对应的请求头是:
Ocp-Apim-Subscription-Key: m_AzureSettings.subscriptionKey
X-Microsoft-OutputFormat: audio-16khz-32kbitrate-mono-mp3
Content-Type: application/ssml+xml
- Ocp-Apim-Subscription-Key: 订阅密钥,用于验证请求的合法性。
- X-Microsoft-OutputFormat: 输出格式,指定语音合成的音频格式。这里设置为 16kHz、32kbit/s、单声道 MP3。
- Content-Type: 内容类型,指定请求体的内容格式为 SSML (Speech Synthesis Markup Language),用于描述要合成的语音文本。
总结
这段代码演示了使用 UnityWebRequest 发送 POST 请求,将文本转换为语音并播放的过程。通过设置请求体和请求头,可以控制语音合成的参数,例如音频格式、内容类型等。开发者可以根据实际情况修改代码,实现不同的语音合成需求。
原文地址: https://www.cveoy.top/t/topic/jC8j 著作权归作者所有。请勿转载和采集!