由於目前做的項目是發布在 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