- Home /
How do I load an audio file from persistantdatapath?
Hello.
This question seems to have been asked tons of times with many different iterations of answers (some using old API and others using the newer one).
However, none seems to successfully work for me. The problem lies with after downloading the file, the audioclip that the downloadhandler is returning seems to be having an issue. The first thing that is a red flag for me is that the audioclip returned has a blank name ("") in it. Calling Play() on the audio source does absolutely nothing.
Of course, the first troubleshooting thing anyone would do is check if the source file works in the first place. I've verified that my downloader (FileUtils.DownloadToFile()) is working fine and I was able to play the .mp3 file on an external media player.
The next thing I tried was attempt to download a sample ogg file I found online (I changed AudioType to test this). This produced the same result and my audiosource had a clip with "" as its name and calling Play() did nothing.
Things I've tried:
1)
IEnumerator LoadAudio(string URL)
{
//download the file
yield return FileUtils.DownloadToFile(URL, result => { audioLocalPath= result; });
UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(audioLocalPath, AudioType.MPEG);
yield return www.SendWebRequest();
audioSource.clip = DownloadHandlerAudioClip.GetContent(www);
audioSource.Play();
}
2)
IEnumerator LoadAudio(string URL)
{
//download the file
yield return FileUtils.DownloadToFile(URL, result => { audioLocalPath= result; });
URL = "file://" + audioLocalPath;
Debug.Log("Loading audio from : " + URL);
using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(URL, AudioType.MPEG))
{
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
AudioClip tClip = DownloadHandlerAudioClip.GetContent(www);
audioSource.clip = tClip;
audioSource.Play();
}
}
}
3)
IEnumerator LoadAudio(string URL)
{
yield return new WaitForEndOfFrame();
UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(URL, AudioType.MPEG);
DownloadHandlerAudioClip handler= www.downloadHandler as DownloadHandlerAudioClip;
handler.streamAudio = true;
yield return www.SendWebRequest();
if (www.isHttpError || www.isNetworkError)
{
yield break;
}
audioSource.clip = handler.audioClip;
}
Unity has not thrown any errors or warnings at all, so it makes it incredibly difficult and frustrating to debug this.
Btw I am running 2019.4.9f1 LTS and deploying to Android.