Beispiel #1
0
    IEnumerator LoadAudioClipCoroutine(string fullPath, bool doPlayImmediately)
    {
        fullPath = "file:///" + fullPath; // HACK for Mac? We can't find the audio file without this prefix, but *only* for loading, not saving.
        using (var uwr = UnityWebRequestMultimedia.GetAudioClip(fullPath, AudioType.WAV)) {
            ((DownloadHandlerAudioClip)uwr.downloadHandler).streamAudio = true;

            audioSource.clip = null; // default this to null, in case we fail.

            yield return(uwr.SendWebRequest());

            if (uwr.isNetworkError || uwr.isHttpError)
            {
                AppDebugLog.LogError(uwr.error);
                yield break;
            }

            DownloadHandlerAudioClip dlHandler = (DownloadHandlerAudioClip)uwr.downloadHandler;
            yield return(dlHandler);

            if (dlHandler.isDone)
            {
                audioSource.clip = dlHandler.audioClip;

                if (audioSource.clip != null)
                {
                    WWW download = new WWW(fullPath); // HACKED, using WWW! I think DownloadHandlerAudioClip doesn't support getting the file samples. Not sure tho.
                    yield return(download);

                    bool      threeD = false;
                    bool      stream = false;
                    AudioClip clip   = download.GetAudioClip(threeD, stream, AudioType.WAV);
                    //float[] samples = new float[clip.samples * clip.channels];
                    //clip.GetData(samples, 0);
                    //for (int s = 0; s < 100; s++) Debug.Log(samples[s]);


                    //AudioClip clip = DownloadHandlerAudioClip.GetContent(uwr);
                    if (SettingsManager.Instance.DoTrimAudioClips)
                    {
                        clip = AudioEditor.GetQuietTrimmed(clip);
                    }
                    if (SettingsManager.Instance.DoNormalizeAudioClips)
                    {
                        clip = AudioEditor.GetNormalized(clip);
                    }
                    audioSource.clip = clip;
                    GameManagers.Instance.EventManager.OnClipLoadSuccess(clip);
                    if (doPlayImmediately)
                    {
                        Play();
                    }
                }
                else
                {
                    GameManagers.Instance.EventManager.OnClipLoadFail();
                    Debug.Log("Couldn't load a valid AudioClip.");
                }
            }
            else
            {
                Debug.Log("The download process is not completely finished.");
            }
        }
    }