You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UnityWebRequest.GetAudioClip加载本地音频返回空AudioClip问题排查

Unity本地音频文件通过UnityWebRequest加载后无声音问题排查与修复

问题描述

尝试通过本地磁盘文件替换AudioSource的AudioClip内容,该文件可正常导入Unity并播放,但使用UnityWebRequest.GetAudioClip加载后,AudioSource的音频波形完全平坦,无声音输出,点击波形仍可触发播放。

所用代码

IEnumerator GetAudioClip()
{
    string path = "C:/path_to_audio_file/audio.wav";
    using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip($"file://{path}", AudioType.WAV))
    {
        yield return www.SendWebRequest();

        tmpAudio = DownloadHandlerAudioClip.GetContent(www);
        audioSource.clip = tmpAudio;
        audioSource.Play();
    }
}
// Start is called before the first frame update
void Start()
{
    StartCoroutine(GetAudioClip());
}

已尝试的解决措施

  • 将音频文件转换为.ogg格式
  • 将audioSource.clip = tmpAudio代码移出协程

问题原因及修复方案

1. 本地URL格式错误

Windows系统下,UnityWebRequest识别本地文件的正确URL格式需要三个斜杠(file:///),原代码中仅使用两个斜杠会导致路径解析失败,无法正确加载音频内容。

2. 未处理请求错误

原代码未检查UnityWebRequest的执行结果,即使请求失败也会继续赋值AudioClip,导致得到无效的空音频对象。

修复后的代码

IEnumerator GetAudioClip()
{
    string path = "C:/path_to_audio_file/audio.wav";
    // 修正本地文件URL格式,同时统一路径分隔符
    string url = $"file:///{path.Replace('\\', '/')}";
    
    using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(url, AudioType.WAV))
    {
        yield return www.SendWebRequest();

        // 检查请求是否成功
        if (www.result != UnityWebRequest.Result.Success)
        {
            Debug.LogError($"音频加载失败: {www.error}");
            yield break;
        }

        tmpAudio = DownloadHandlerAudioClip.GetContent(www);
        // 校验AudioClip是否有效
        if (tmpAudio == null)
        {
            Debug.LogError("获取到的AudioClip为空");
            yield break;
        }

        audioSource.clip = tmpAudio;
        audioSource.Play();
    }
}

void Start()
{
    StartCoroutine(GetAudioClip());
}

额外建议

  • 若为本地测试场景,也可直接读取文件字节流并转换为AudioClip(需自行处理解码),示例如下:
    byte[] audioBytes = File.ReadAllBytes(path);
    AudioClip clip = WavUtility.ToAudioClip(audioBytes); // 需引入Wav解码工具类
    audioSource.clip = clip;
    audioSource.Play();
    
  • 确保音频文件的采样率、声道数等参数符合Unity支持范围,部分特殊编码的音频可能无法被UnityWebRequest正确解析。

内容的提问来源于stack exchange,提问作者Duc Thanh Doan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 17:36:13