コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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);
                    }
                }
            }
        }
コード例 #3
0
        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);
        }