Unity3D 学习笔记之十:如何读取并播放 Android 本地的 wav 音频

847 阅读1分钟

1. 问题描述

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

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

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

2. 解决方法

  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();
}

启动协程,filePathwav 音频文件的存储路径。

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));
}
  1. Android 平台如果要读取本地的文件,需要为应用开启相应的权限。

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

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

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