UnityWebRequest でMP3(AudioClip)を取得する方法
ポイント
- UnityWebRequest を作成する際、「downloadHandler」に「new DownloadHandlerAudioClip(string.Empty, AudioType.MPEG)」を設定する(URLから直接、音声ファイルを取得している訳ではないため、「DownloadHandlerAudioClip()」の第一引数の文字列は何でも良い)
- UnityWebRequest 送信後は「DownloadHandlerAudioClip.GetContent()」でMP3ファイルを AudioClip として取得する
- 返って来るコンテンツがMP3ファイルの場合は「DownloadHandler.GetData()」等でコンテンツをバイナリデータで取得した後に「AudioClip」に変換するといった事は恐らく出来ない
例(OpenAI の Text To Speech)
public static async UniTask<AudioClip> GetVoiceClipFromTextAsync(string text)
{
Dictionary<string, string> headers = new()
{
{"Authorization", "Bearer " + "API Key"},
{"Content-type", "application/json"},
{"X-Slack-No-Retry", "1"}
};
TtsRequest request = new()
{
model = "tts-1-hd",
input = text,
voice = "nova",
response_format = "mp3",
speed = 1f
};
string jsonRequest = JsonUtility.ToJson(request);
using UnityWebRequest uwr = new("https://api.openai.com/v1/audio/speech", "POST")
{
uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(jsonRequest)),
downloadHandler = new DownloadHandlerAudioClip(string.Empty, AudioType.MPEG)
};
foreach (KeyValuePair<string, string> header in headers)
{
uwr.SetRequestHeader(header.Key, header.Value);
}
try
{
await uwr.SendWebRequest();
}
catch (Exception e)
{
throw e;
}
if (uwr.result == UnityWebRequest.Result.ConnectionError || uwr.result == UnityWebRequest.Result.ProtocolError)
{
throw new Exception();
}
return DownloadHandlerAudioClip.GetContent(uwr);
}
お問い合わせ