【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" />

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

 

已标记关键词 清除标记
实现点击按钮播放本地WAV音乐,我现在是这样写的 先获取本地WAV音乐的路径到List里,(直接显示文件路径)然后设置一个SimpleAdapter显示 现在我不知道怎么点击播放按钮能放相应的WAV![图片说明](https://img-ask.csdn.net/upload/201805/01/1525158541_430090.jpg) List<Map<String, String>> listitem = new ArrayList<Map<String, String>>(); File file = new File(Environment.getExternalStorageDirectory().getPath() + "/Music"); File[] files = file.listFiles(); if (files != null) { for (File file2 : files) { String s = file2.getPath(); if (s.endsWith("wav")) { Map<String, String> showitem = new HashMap<String, String>(); showitem.put("url", s); listitem.add(showitem); } else { continue; } } } SimpleAdapter myAdapter = new SimpleAdapter(getApplicationContext(), listitem, R.layout.music_choice2 , new String[]{"url"}, new int[]{R.id.wavurl}); MyListView.setAdapter(myAdapter); MyListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { HashMap<String, String> map = (HashMap<String, String>) adapterView.getItemAtPosition(i); //String content= (String) adapterView.getItemAtPosition(i); String content = map.get("url"); Toast.makeText(MusicChoiceActivity.this, "点击内容" + i + " " + content, Toast.LENGTH_SHORT).show(); System.out.println("点击内容" + i + " " + content); Intent intent = new Intent(MusicChoiceActivity.this, localtestActivity.class); intent.setData(Uri.parse(content)); setResult(Activity.RESULT_OK, intent); System.out.println("开始跳转"); finish(); } });
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页