private void Update() { Manager.AudioInstance audioInstance = null; bool flag = true; while (flag) { object obj = Manager.deferredSetDataQueue; lock (obj) { flag = (Manager.deferredSetDataQueue.Count > 0); if (!flag) { break; } audioInstance = Manager.deferredSetDataQueue.Dequeue(); } audioInstance.audioClip.SetData(audioInstance.dataToSet, 0); Manager.SetAudioClipLoadState(audioInstance, AudioDataLoadState.Loaded); audioInstance.audioClip = null; audioInstance.dataToSet = null; } object obj2 = Manager.deferredSetFail; lock (obj2) { while (Manager.deferredSetFail.Count > 0) { audioInstance = Manager.deferredSetFail.Dequeue(); Manager.SetAudioClipLoadState(audioInstance, AudioDataLoadState.Failed); } } }
private static void DeferredLoaderMain() { Manager.AudioInstance audioInstance = null; bool flag = true; long num = 100000L; while (flag || num > 0L) { num -= 1L; object obj = Manager.deferredLoadQueue; lock (obj) { flag = (Manager.deferredLoadQueue.Count > 0); if (!flag) { continue; } audioInstance = Manager.deferredLoadQueue.Dequeue(); } num = 100000L; try { audioInstance.dataToSet = new float[audioInstance.samplesCount]; audioInstance.reader.Read(audioInstance.dataToSet, 0, audioInstance.dataToSet.Length); audioInstance.reader.Close(); audioInstance.reader.Dispose(); if (audioInstance.streamToDisposeOnceDone != null) { audioInstance.streamToDisposeOnceDone.Close(); audioInstance.streamToDisposeOnceDone.Dispose(); audioInstance.streamToDisposeOnceDone = null; } object obj2 = Manager.deferredSetDataQueue; lock (obj2) { Manager.deferredSetDataQueue.Enqueue(audioInstance); } } catch (Exception exception) { Debug.LogException(exception); object obj3 = Manager.deferredSetFail; lock (obj3) { Manager.deferredSetFail.Enqueue(audioInstance); } } } }
public static AudioClip Load(Stream dataStream, AudioFormat audioFormat, string unityAudioClipName, bool doStream = false, bool loadInBackground = true, bool diposeDataStreamIfNotNeeded = true) { AudioClip audioClip = null; CustomAudioFileReader reader = null; try { reader = new CustomAudioFileReader(dataStream, audioFormat); Manager.AudioInstance audioInstance = new Manager.AudioInstance { reader = reader, samplesCount = (int)(reader.Length / (long)(reader.WaveFormat.BitsPerSample / 8)) }; if (doStream) { audioClip = AudioClip.Create(unityAudioClipName, audioInstance.samplesCount / audioInstance.channels, audioInstance.channels, audioInstance.sampleRate, doStream, delegate(float[] target) { reader.Read(target, 0, target.Length); }, delegate(int target) { reader.Seek((long)target, SeekOrigin.Begin); }); audioInstance.audioClip = audioClip; Manager.SetAudioClipLoadType(audioInstance, AudioClipLoadType.Streaming); Manager.SetAudioClipLoadState(audioInstance, AudioDataLoadState.Loaded); } else { audioClip = AudioClip.Create(unityAudioClipName, audioInstance.samplesCount / audioInstance.channels, audioInstance.channels, audioInstance.sampleRate, doStream); audioInstance.audioClip = audioClip; if (diposeDataStreamIfNotNeeded) { audioInstance.streamToDisposeOnceDone = dataStream; } Manager.SetAudioClipLoadType(audioInstance, AudioClipLoadType.DecompressOnLoad); Manager.SetAudioClipLoadState(audioInstance, AudioDataLoadState.Loading); if (loadInBackground) { object obj = Manager.deferredLoadQueue; lock (obj) { Manager.deferredLoadQueue.Enqueue(audioInstance); } Manager.RunDeferredLoaderThread(); Manager.EnsureInstanceExists(); } else { audioInstance.dataToSet = new float[audioInstance.samplesCount]; audioInstance.reader.Read(audioInstance.dataToSet, 0, audioInstance.dataToSet.Length); audioInstance.audioClip.SetData(audioInstance.dataToSet, 0); Manager.SetAudioClipLoadState(audioInstance, AudioDataLoadState.Loaded); } } } catch (Exception ex) { Manager.SetAudioClipLoadState(audioClip, AudioDataLoadState.Failed); Debug.LogError(string.Concat(new object[] { "Could not load AudioClip named '", unityAudioClipName, "', exception:", ex })); } return(audioClip); }