Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.IO;
- using UnityEngine;
- namespace RuntimeAudioClipLoader
- {
- [RequireComponent(typeof(AudioSource))]
- public class DemoLoadAudioFromStreamingAssets : MonoBehaviour
- {
- public bool loadInBackground = true;
- public bool doStream = false;
- // soundcloud stream link generated with https://www.appendipity.com/get-mp3-links-soundcloud/
- public string urlToLoad = @"http://media.soundcloud.com/stream/dP7wRLjm32Eh.mp3";
- AudioSource audioSource;
- void Start()
- {
- audioSource = GetComponent<AudioSource>();
- }
- void OnGUI()
- {
- var sourceFolder = Path.Combine(Application.streamingAssetsPath, "RuntimeAudioClipLoader demo StreamingAssets");
- int num = 0;
- var files = Directory.GetFiles(sourceFolder, "*", SearchOption.AllDirectories);
- foreach(var file in files)
- {
- if (!file.EndsWith(".meta"))
- {
- if (num > 10) break;
- num++;
- if (GUILayout.Button("Load: " + file.Substring(sourceFolder.Length)))
- {
- audioSource.clip = RuntimeAudioClipLoader.Manager.Load(file, doStream, loadInBackground);
- }
- }
- }
- GUILayout.Space(10);
- GUILayout.Label("Url to load:");
- urlToLoad = GUILayout.TextArea(urlToLoad);
- if(GUILayout.Button("Load from url"))
- {
- StartCoroutine(DownloadClipFromUrl(urlToLoad));
- }
- GUILayout.Space(10);
- if (audioSource.clip)
- {
- GUILayout.Label("AudioClip.name: " + audioSource.clip.name);
- GUILayout.Label("AudioDataLoadState: " + RuntimeAudioClipLoader.Manager.GetAudioClipLoadState(audioSource.clip));
- GUILayout.Label("AudioClipLoadType: " + RuntimeAudioClipLoader.Manager.GetAudioClipLoadType(audioSource.clip));
- GUILayout.Label("time: " + audioSource.time + "/" + audioSource.clip.length);
- if (GUILayout.Button("Play")) audioSource.Play();
- }
- doStream = GUILayout.Toggle(doStream, "doStream (audioClip is loaded on the fly on demand, use for long one time use clips)");
- loadInBackground = GUILayout.Toggle(loadInBackground, "loadInBackground (if !doStream and loadInBackground then loading is done in own thread so it doesnt hang up caller's thread)");
- if (GUILayout.Button("Clear cache (so you can test loading times again)"))
- {
- RuntimeAudioClipLoader.Manager.ClearCache();
- audioSource.clip = null;
- }
- }
- IEnumerator DownloadClipFromUrl(string url)
- {
- // Debug.Log("loading " + url);
- WWW www = new WWW(url);
- yield return www;
- Debug.Log("loaded " + url + " got bytes:" + www.bytes.Length);
- var stream = new MemoryStream(www.bytes);
- var format = RuntimeAudioClipLoader.Manager.GetAudioFormat(url);
- if (format == AudioFormat.unknown) format = AudioFormat.mp3;
- audioSource.clip = RuntimeAudioClipLoader.Manager.Load(stream, format, url, doStream, loadInBackground);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment