保存并加载音频

时间:2017-11-24 10:44:35

标签: c# android unity3d

统一
当我点击“记录”按钮时:
- Microphone.Start(“内置麦克风”,真实,10,44100); 当我点击“暂停”按钮时:
- SavWav.Save(Application.persistentDataPath +“/ Resources / storyrecord”,audio.clip);

文件以路径保存: /storage/emulated/0/Android/data/com.owos.woftbattle/files/Resources/storyrecord

com.owos.woftbattle 是我的包裹。 storyrecord 是我的文件名。

那么,我可以用代码打开它吗? 这是我的代码: Resources.Load(“file:/// Resources / storyrecord”);

它不起作用。

有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

首先要了解的是,您无法编写或保存到构建(Android)中的Resources文件夹。只能从编辑器创建Resources文件夹。无论你放在Resources文件夹中,它都是唯一存在的东西。您无法删除或添加更多文件到Resources文件夹。一旦您构建应用程序,它就是只读的。

其次,将文件保存为Application.persistentDataPath + "/Resources/storyrecord"将无效。即使保存文件,该保存的文件也不在Resources文件夹中。因为它不是,Resources.Load无法读取它。 Resources.Load函数只能读取编辑器在Resources文件夹中添加到它的文件。

了解以上所有内容以供将来参考并避免类似错误非常重要。如果要在运行时保存文件,请始终将数据保存在:Application.persistentDataPath/YourFolderName,然后使用WWW类或System.IO命名空间中的一个文件API加载它。您使用的library将其保存为“。wav”扩展程序,因此您必须使用WWW API加载它。

保存音频的路径(音频路径):

string tempPath = Path.Combine(Application.persistentDataPath, "Audio");
tempPath = Path.Combine(tempPath, "storyrecord.wav");

保存音频:

SavWav.Save (tempPath ,aud.clip);

将音频加载为AudioClip:

IEnumerator loadAudio(string path)
{
    //Load Audio
    WWW audioLoader = new WWW(path);
    yield return audioLoader;

    //Convert it to AudioClip
    AudioClip aClip = audioLoader.GetAudioClip(false, false, AudioType.WAV);
}

加载它需要协同程序功能,因此您必须使用StartCoroutine函数:StartCoroutine(loadAudio(tempPath));

注意

在某些Android设备上,您必须先添加"file://",然后才能使用WWW类加载音频。 如果是这种情况,只需将path = "file://" + path;添加到上面loadAudio函数的第一行代码中即可修复路径。