Пример #1
0
        /// <summary>
        /// Loading of a SoundFontt when playing using a thread
        /// </summary>
        /// <param name="restartPlayer"></param>
        /// <returns></returns>
        private static IEnumerator <float> LoadSoundFontThread(bool restartPlayer = true)
        {
            //if (MidiPlayerGlobal.ImSFCurrent != null)
            {
                //Debug.Log("Load MidiPlayerGlobal.ImSFCurrent: " + MidiPlayerGlobal.ImSFCurrent.SoundFontName);
                //Debug.Log("Load CurrentMidiSet.ActiveSounFontInfo: " + CurrentMidiSet.ActiveSounFontInfo.Name);

                MidiSynth[]           synths          = FindObjectsOfType <MidiSynth>();
                List <MidiFilePlayer> playerToRestart = new List <MidiFilePlayer>();
                MPTK_SoundFontLoaded = false;
                if (Application.isPlaying)
                {
                    if (synths != null)
                    {
                        foreach (MidiSynth synth in synths)
                        {
                            if (synth is MidiFilePlayer)
                            {
                                MidiFilePlayer player = (MidiFilePlayer)synth;
                                if (player.MPTK_IsPlaying)
                                {
                                    playerToRestart.Add(player);
                                    player.MPTK_Stop(); // stop and clear all sound
                                }
                            }
                            //synth.MPTK_ClearAllSound();
                            yield return(Routine.WaitUntilDone(Routine.RunCoroutine(synth.ThreadWaitAllStop(), Segment.RealtimeUpdate), false));

                            synth.MPTK_StopSynth();
                        }
                    }
                    DicAudioClip.Init();
                    DicAudioWave.Init();
                }
                LoadCurrentSF();

                //Debug.Log("   Time To Load SoundFont: " + Math.Round(MidiPlayerGlobal.MPTK_TimeToLoadSoundFont.TotalSeconds, 3).ToString() + " second");
                //Debug.Log("   Time To Load Waves: " + Math.Round(MidiPlayerGlobal.MPTK_TimeToLoadWave.TotalSeconds, 3).ToString() + " second");

                if (synths != null)
                {
                    foreach (MidiSynth synth in synths)
                    {
                        synth.MPTK_InitSynth();
                        if (synth is MidiFilePlayer)
                        {
                            synth.MPTK_StartSequencerMidi();
                        }
                    }
                    if (restartPlayer)
                    {
                        foreach (MidiFilePlayer player in playerToRestart)
                        {
                            player.MPTK_RePlay();
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Loading of a SoundFonttwhen playing using a thread
        /// </summary>
        /// <returns></returns>
        private static IEnumerator <float> LoadSoundFontThread()
        {
            if (MidiPlayerGlobal.ImSFCurrent != null)
            {
                //Debug.Log("Load MidiPlayerGlobal.ImSFCurrent: " + MidiPlayerGlobal.ImSFCurrent.SoundFontName);
                //Debug.Log("Load CurrentMidiSet.ActiveSounFontInfo: " + CurrentMidiSet.ActiveSounFontInfo.Name);

                MidiSynth[] midiplayers = FindObjectsOfType <MidiSynth>();
                MPTK_SoundFontLoaded = false;
                if (Application.isPlaying)
                {
                    if (midiplayers != null)
                    {
                        foreach (MidiSynth mp in midiplayers)
                        {
                            if (mp is MidiFilePlayer)
                            {
                                MidiFilePlayer mfp = (MidiFilePlayer)mp;
                                if (!mfp.MPTK_IsPaused)
                                {
                                    mfp.MPTK_Pause();
                                }
                                yield return(Timing.WaitUntilDone(Timing.RunCoroutine(mp.ThreadClearAllSound(true))));
                            }
                        }
                    }
                    DicAudioClip.Init();
                    DicAudioWave.Init();
                }
                LoadCurrentSF();

                //Debug.Log("   Time To Load SoundFont: " + Math.Round(MidiPlayerGlobal.MPTK_TimeToLoadSoundFont.TotalSeconds, 3).ToString() + " second");
                //Debug.Log("   Time To Load Waves: " + Math.Round(MidiPlayerGlobal.MPTK_TimeToLoadWave.TotalSeconds, 3).ToString() + " second");

                if (midiplayers != null)
                {
                    foreach (MidiSynth mp in midiplayers)
                    {
                        if (mp is MidiFilePlayer)
                        {
                            MidiFilePlayer mfp = (MidiFilePlayer)mp;
                            if (mfp.MPTK_IsPaused)
                            {
                                mfp.MPTK_InitSynth();
                                mfp.MPTK_RePlay();
                            }
                        }
                    }
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Call by the first MidiPlayer awake
        /// </summary>
        private IEnumerator <float> InitThread()
        {
            if (!Initialized)
            {
                //Debug.Log("MidiPlayerGlobal InitThread");
                Initialized = true;
                ImSFCurrent = null;

                try
                {
                    AudioListener = Component.FindObjectOfType <AudioListener>();
                    if (AudioListener == null)
                    {
                        Debug.LogWarning("No audio listener found. Add one and only one AudioListener component to your hierarchy.");
                        //return;
                    }
                }
                catch (System.Exception ex)
                {
                    MidiPlayerGlobal.ErrorDetail(ex);
                }

                try
                {
                    AudioListener[] listeners = Component.FindObjectsOfType <AudioListener>();
                    if (listeners != null && listeners.Length > 1)
                    {
                        Debug.LogWarning("More than one audio listener found. Some unexpected behaviors could happen.");
                    }
                }
                catch (System.Exception ex)
                {
                    MidiPlayerGlobal.ErrorDetail(ex);
                }

                try
                {
                    LoadMidiSetFromRsc();
                    DicAudioClip.Init();
                    DicAudioWave.Init();
                }
                catch (System.Exception ex)
                {
                    MidiPlayerGlobal.ErrorDetail(ex);
                }

                if (CurrentMidiSet == null)
                {
                    Debug.LogWarning(MidiPlayerGlobal.ErrorNoMidiFile);
                    yield return(Routine.WaitForOneFrame);
                }
                else if (CurrentMidiSet.ActiveSounFontInfo == null)
                {
                    Debug.Log(MidiPlayerGlobal.ErrorNoSoundFont);
                    yield return(Routine.WaitForOneFrame);
                }

                BuildMidiList();

                if (MPTK_LoadSoundFontAtStartup)
                {
                    LoadCurrentSF();
                }
            }
        }