由于目前做的项目是发布在 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
