【Unity3D】如何读取并播放 Android 本地的 wav 音频


由于目前做的项目是发布在 Android 平台的,所以遇到了还蛮多的关于 Android 方面的问题的。

 

最近遇到一个问题,就是需要在程序中读取并播放外部(本地存储)的 wav 音频。

 

此问题已解决,现将解决方法整理分享如下。

 

解决方法:

 

1. 用 WWW 来加载本地的 wav 文件, 然后将 wav 文件加载为 AudioClip。

    private AudioSource aud;    
    public IEnumerator LoadAudio(string recordPath)  
   {        
    // www 加载音频        
    WWW www = new WWW(recordPath);        
    yield return www;        
    var clipTemp = www.GetAudioClip();        
    aud.clip = clipTemp;         
    //yield return new WaitForSeconds(5);        
    //aud.loop = true;        
    //播放音频        
    aud.Play();    }
  

  

启动协程,filePath 为 wav 音频文件的存储路径。

Android 的路径中 file:///sdcard/ 表示内部存储空间的根目录,如果想要读取外部 SD 卡存储空间的根目录,请参考《用 Unity3D / C# 如何获取 Android 外置 SD 卡的路径》。

 

 private void Start()    
{     
#if UNITY_ANDROID && !UNITY_EDITOR        
    // Android 测试路径        
    string filePath = "file:///sdcard/msc/test_13.wav";                        Debug.LogError(filePath);    
#endif     
#if UNITY_EDITOR       
     // Unity Editor 测试路径        
    string filePath = "D:/AudioTest/test_2.wav";  
 #endif         
    StartCoroutine(LoadAudio(filePath));    
}

  2. 在 Android 平台如果要读取本地的文件,需要为应用开启相应的权限。

打开 Plugins / Android 文件夹下的  AndroidManifest.xml 文件,添加两行代码,申请读写存储权限。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

   打包安装应用之后,确保应用的“存储空间”权限是开启的。

————————————————

版权声明:本文为CSDN博主「机灵鹤」的原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/wenxuhonghe/java/article/details/102651822

自己demo:

 IEnumerator LoadAudio(string RecordPath,GameObject audioItemObj)
    {
        WWW www = new WWW("file://" + RecordPath);
        yield return www;
        clipTemp = www.GetAudioClip();

        if (www.error != null)
        {
            Debug.LogError("www " + www.error);
        }
        else
        {
            //Debug.LogError("www " + www.text);
           // CurrentAudioSource.clip = clipTemp;
            TKGlobalData.LocalAudio = clipTemp;
            audioItemObj.GetComponent<TKSoundItem>().GetAudioClipNew(clipTemp);

        }
        //Debug.LogError(RecordPath+"_*"+ clipTemp.name);
        www.Dispose();
    }

  

由于目前做的项目是发布在 Android 平台的,所以遇到了还蛮多的关于 Android 方面的问题的。
最近遇到一个问题,就是需要在程序中读取并播放外部(本地存储)的 wav 音频。
此问题已解决,现将解决方法整理分享如下。
 
解决方法:
1. 用 WWW 来加载本地的 wav 文件, 然后将 wav 文件加载为 AudioClip。
    private AudioSource aud;        public IEnumerator LoadAudio(string recordPath)    {        // www 加载音频        WWW www = new WWW(recordPath);        yield return www;        var clipTemp = www.GetAudioClip();        aud.clip = clipTemp;         //yield return new WaitForSeconds(5);        //aud.loop = true;         //播放音频        aud.Play();    }
启动协程,filePath 为 wav 音频文件的存储路径。
Android 的路径中 file:///sdcard/ 表示内部存储空间的根目录,如果想要读取外部 SD 卡存储空间的根目录,请参考《用 Unity3D / C# 如何获取 Android 外置 SD 卡的路径》。
    private void Start()    {     #if UNITY_ANDROID && !UNITY_EDITOR        // Android 测试路径        string filePath = "file:///sdcard/msc/test_13.wav";        Debug.LogError(filePath);    #endif     #if UNITY_EDITOR        // Unity Editor 测试路径        string filePath = "D:/AudioTest/test_2.wav";    #endif         StartCoroutine(LoadAudio(filePath));    }
2. 在 Android 平台如果要读取本地的文件,需要为应用开启相应的权限。
打开 Plugins / Android 文件夹下的  AndroidManifest.xml 文件,添加两行代码,申请读写存储权限。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 打包安装应用之后,确保应用的“存储空间”权限是开启的。————————————————版权声明:本文为CSDN博主「机灵鹤」的原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/wenxuhonghe/java/article/details/102651822


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM