Unity3D动态加载音频文件
Unity3D支持的音频格式有WAV、OGG、MP3等格式。
动态加载音频分为加载内部音频和加载外部音频。
加载内部音频,使用 Resources.Load<AudioClip>("audio") 方法就可以轻松搞定,没什么好说的。
加载外部音频,我们需要使用 WWW 类或者是 UnityWebRequestMultimedia 类,代码分别如下:
1 private IEnumerator IELoadExternalAudioWebRequest(string _url, AudioType _audioType) 2 { 3 UnityWebRequest _unityWebRequest = UnityWebRequestMultimedia.GetAudioClip(_url, _audioType); 4 yield return _unityWebRequest.SendWebRequest(); 5 if (_unityWebRequest.isHttpError || _unityWebRequest.isNetworkError) 6 { 7 Debug.Log(_unityWebRequest.error.ToString()); 8 } 9 else 10 { 11 AudioClip _audioClip = DownloadHandlerAudioClip.GetContent(_unityWebRequest); 12 audioSource.clip = _audioClip; 13 audioSource.Play(); 14 } 15 } 16 private IEnumerator IELoadExternalAudioWWW(string _url, AudioType _audioType) 17 { 18 WWW _www = new WWW(_url); 19 yield return _www; 20 if (_www.error == null) 21 { 22 AudioClip _audioClip = _www.GetAudioClip(true, true, _audioType); 23 audioSource.clip = _audioClip; 24 audioSource.Play(); 25 } 26 else 27 { 28 Debug.Log(_www.error); 29 } 30 }
上面的方法可以正常加载WAV和OGG格式的音频,但是对于MP3格式的音频就有一些问题了,加载过程中会报错。
网上有的帖子说 UnityWebRequestMultimedia 已经支持MP3格式了,博主亲测后,发现的确是支持了,但并不是全平台支持,至少PC端不支持,安卓平台支持,被坑的不浅。
如果PC端我们想要解决这个问题,就需要使用 NAudio.dll 类库(下载地址:https://github.com/naudio/NAudio/releases),将MP3格式的音频转为WAV或者OGG格式后,再去加载。代码实现如下:
private IEnumerator IELoadExternalAudioWebRequest2(string _url, AudioType _audioType) { string _tempURL = _url.Replace(".mp3", ".wav"); Debug.Log(_tempURL); if (!File.Exists(_tempURL)) { FileStream _fileStream = File.Open(_url, FileMode.Open); Mp3FileReader _mp3FileReader = new Mp3FileReader(_fileStream); WaveFileWriter.CreateWaveFile(_tempURL, _mp3FileReader); } yield return null; UnityWebRequest _unityWebRequest = UnityWebRequestMultimedia.GetAudioClip(_tempURL, _audioType); yield return _unityWebRequest.SendWebRequest(); if (_unityWebRequest.isHttpError || _unityWebRequest.isNetworkError) { Debug.Log(_unityWebRequest.error.ToString()); } else { AudioClip _audioClip = DownloadHandlerAudioClip.GetContent(_unityWebRequest); audioSource.clip = _audioClip; audioSource.Play(); } }
代码实现需要导入 NAudio.dll 类库,同时引用 using NAudio.Wave 命名空间。
通过上面的代码可以看出,我们是先将音频格式进行转换,再进行加载,这样有点过于浪费性能。所以在PC端加载音频,除非有特殊要求,不然不要使用MP3格式的音频,因为PC平台并不支持MP3格式的音频。
除了转化格式以外,NAudio.dll 还支持直接调用电脑声卡进行播放音频,这里就不做过多描述了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?