根据给定的Unity样式,您可以编写以下请求接口的代码:

using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;

public class OpenAISpeechToText : STT
{
    [SerializeField] private string api_key;

    private void Awake()
    {
        m_SpeechRecognizeURL = "https://api.openai.com/v1/audio/transcriptions";
    }

    public override void SpeechToText(AudioClip _clip, Action<string> _callback)
    {
        byte[] _audioData = WavUtility.FromAudioClip(_clip);
        StartCoroutine(SendAudioData(_audioData, _callback));
    }

    private IEnumerator SendAudioData(byte[] audioBytes, Action<string> _callback)
    {
        stopwatch.Restart();
        WWWForm form = new WWWForm();
        form.AddBinaryData("file", audioBytes, "sample.wav", "audio/wav");
        form.AddField("model", "whisper-1");
        form.AddField("speaker", "胡桃");
        form.AddField("text", "你好");
        form.AddField("format", "wav");
        form.AddField("length", "1");
        form.AddField("noise", "0.5");
        form.AddField("noisew", "0.9");
        form.AddField("sdp_ratio", "0.2");

        UnityWebRequest www = UnityWebRequest.Post(m_SpeechRecognizeURL, form);
        www.SetRequestHeader("Authorization", "Bearer " + api_key);

        yield return www.SendWebRequest();

        if (www.result != UnityWebRequest.Result.Success)
        {
            Debug.LogError("Error sending audio file: " + www.error);
        }
        else
        {
            Response _response = JsonUtility.FromJson<Response>(www.downloadHandler.text);
            _callback(_response.text);
        }

        stopwatch.Stop();
        Debug.Log("OpenAI语音识别耗时:" + stopwatch.Elapsed.TotalSeconds);
    }

    [Serializable]
    public class Response
    {
        [SerializeField] public string text = string.Empty;
    }
}

请注意,代码中使用了 WavUtility 类来将 AudioClip 转换为字节数组。您需要确保在代码中引入这个类或者将其替换为您自己的音频处理方案。另外,代码中的 STT 类是一个基类,您需要根据自己的需求进行调整。


原文地址: https://www.cveoy.top/t/topic/i8sx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录