Unity3D动态读取外部MP3文件给AudioSource

转载连接

在PC端VR游戏开发中,需要动态加载本地的MP3文件,但是Unity3D不知道出于什么原因,到5.4.0也不支持MP3文件的外部加载(目前只支持wav和ogg)。

因此要想通过www来加载mp3文件就只能采用曲线救国的方式,将MP3文件读取后转为wav或者ogg,然后再给AudioSource来播放

由于只是在PC端进行开发,故这里采用NAudio.dll这个类库。使用NAudio需要将项目Unity3D工程的API版本改成.net 2.0(默认是.net 2.0 sub,在PlayerSetting->OtherSettings的Api Compatibility Level)。将NAudio.dll放置在项目的Plugins文件夹下。

代码部分如下

using System.Collections;      
using System.IO;       
using NAudio.Wave;       
using UnityEngine;    public class MusicLoad : MonoBehaviour      
{       
    protected void OnGUI()       
    {       
        if (GUILayout.Button("www"))       
        {       
            StartCoroutine(LoadMusic(@"C:\Users\CGZ\Desktop\1.mp3", @"C:\Users\CGZ\Desktop\1.wav"));       
        }       
    }        public AudioSource Source;        private IEnumerator LoadMusic(string filepath, string savepath)      
    {       
        var stream = File.Open(filepath, FileMode.Open);       
        var reader = new Mp3FileReader(stream);       
        WaveFileWriter.CreateWaveFile(savepath, reader);       
        var www = new WWW("file://" + savepath);       
        yield return www;       
        var clip = www.audioClip;       
        Source.clip = clip;       
        Source.Play();       
    }       
}

NAduio下载

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要让unity3d读取文件夹下所有mp3文件,我们可以通过C#脚本来实现。首先,我们需要获取指定文件夹路径下的所有文件,然后筛选出mp3文件并进行读取。 首先,我们可以使用Directory类的GetFiles方法来获取指定文件夹下的所有文件路径,然后使用foreach循环逐个遍历这些文件路径。 在遍历过程中,可以利用Path类的GetExtension方法来判断文件的扩展名是否为".mp3",如果是的话,就可以使用UnityAudioSource来进行音频文件读取和播放。 具体的代码实现如下: ```csharp using System.IO; using UnityEngine; public class ReadMP3Files : MonoBehaviour { public string folderPath; void Start() { string[] files = Directory.GetFiles(folderPath); foreach (string file in files) { if (Path.GetExtension(file).Equals(".mp3", System.StringComparison.InvariantCultureIgnoreCase)) { StartCoroutine(LoadAndPlayMP3(file)); } } } IEnumerator LoadAndPlayMP3(string filePath) { WWW www = new WWW("file://" + filePath); yield return www; AudioSource audioSource = gameObject.AddComponent<AudioSource>(); audioSource.clip = www.GetAudioClip(false, true, AudioType.MPEG); audioSource.Play(); } } ``` 在这段代码中,我们首先通过Directory类的GetFiles方法获取了指定文件夹下的所有文件路径,然后利用Path类的GetExtension方法判断文件扩展名是否为".mp3",如果是的话就使用WWW类加载音频文件,并通过AudioSource组件进行播放。同时,我们也可以通过修改folderPath的值来指定不同的文件夹路径。 这样,就可以让unity3d读取文件夹下所有mp3文件并进行播放了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值