예제 #1
0
        static public void UtLoad(string songname)
        {
            SaveLoad slSong;

            Debug.Log(">>> Load");
            lock (InfinityMusic.instance)
            {
                try
                {
                    slSong = SaveLoad.LoadXML(songname);
                    if (slSong != null)
                    {
                        // Cadence
                        //Debug.Log("Cadence Count:" + slSong.Cadences.Count);
                        foreach (ImCadence im in slSong.Cadences)
                        {
                            Debug.Log(" " + im.Name);
                            UtCadence ut = (UtCadence)InfinityMusic.Instantiate(InfinityMusic.instance.TemplateCadence, Vector3.zero, Quaternion.identity);
                            ut.transform.parent = InfinityMusic.instance.transform;
                            // Common
                            LoadCommon(im, ut);

                            // Specific
                            ut.MeasureCount = im.MeasureCount;
                            ut.PctSilence   = im.PctSilence;
                            ut.RatioWhole   = im.RatioWhole;
                            ut.RatioHalf    = im.RatioHalf;
                            ut.RatioQuarter = im.RatioQuarter;
                            ut.RatioEighth  = im.RatioEighth;
                            ut.RatioSixteen = im.RatioSixteen;
                            ut.Durations    = (im.Durations != null && im.Durations.Count > 0) ? new List <Cadence>(im.Durations) : null;
                        }


                        // Math Motif
                        Debug.Log("Math Motif Count:" + slSong.Motifs.Count);
                        foreach (ImMathMotif im in slSong.Motifs)
                        {
                            //Debug.Log(" " + im.Name);
                            UtMathMotif ut = (UtMathMotif)InfinityMusic.Instantiate(InfinityMusic.instance.TemplateMathMotif, Vector3.zero, Quaternion.identity);
                            ut.transform.parent = InfinityMusic.instance.transform;

                            // Common
                            LoadCommon(im, ut);

                            // Specific
                            ut.MeasureCount  = im.MeasureCount;
                            ut.OctaveMin     = im.OctaveMin;
                            ut.OctaveMax     = im.OctaveMax;
                            ut.ScaleIndex    = im.ScaleIndex;
                            ut.PatchIndex    = im.PatchIndex;
                            ut.DrumKit       = im.DrumKit;
                            ut.SelectedAlgo  = im.SelectedAlgo;
                            ut.StepInScale   = im.StepInScale;
                            ut.RotationSpeed = im.RotationSpeed;
                            ut.Accentuation  = im.Accentuation;
                            ut.Velocity      = im.Velocity;
                            ut.RepeatRate    = im.RepeatRate;
                            if (im.IdCadence >= 0)
                            {
                                UtCadence[] cadences = GameObject.FindObjectsOfType <UtCadence>();
                                foreach (UtCadence cadence in cadences)
                                {
                                    if (cadence.UtId == im.IdCadence)
                                    {
                                        ut.CurrentCadence = cadence;
                                        break;
                                    }
                                }
                            }
                            ut.Notes = (im.Notes != null && im.Notes.Count > 0) ? new List <MathMotifNote>(im.Notes) : null;
                        }

                        //Debug.Log("Chorder Count:" + slSong.Chorders.Count);
                        //foreach (ImChorder im in slSong.Chorders)
                        //{
                        //    Debug.Log(" " + im.ImName + " " + im.ImRadiusEffect);
                        //    UtChorder ut = (UtChorder)Instantiate(UtGlobal.instance.utChorder, im.Position, Quaternion.identity);

                        //    // Common
                        //    LoadCommon(im, ut);

                        //    // Specific
                        //    ut.Trigger = im.Trigger;
                        //    ut.StepCount = im.StepCount;
                        //    ut.ChordProgression = im.ChordProgression;
                        //}


                        //// Midi Motif
                        //Debug.Log("Midi Motif Count:" + slSong.Midis.Count);
                        //foreach (ImMidiMotif im in slSong.Midis)
                        //{
                        //    Debug.Log(" " + im.ImName + " " + im.ImRadiusEffect);
                        //    UtMidiMotif ut = (UtMidiMotif)Instantiate(UtGlobal.instance.utMidiMotif, im.Position, Quaternion.identity);

                        //    // Common
                        //    LoadCommon(im, ut);

                        //    // Specific
                        //    ut.MidiName = im.MidiName;
                        //    ut.Transpose = im.Transpose;
                        //    ut.StartPlay = im.StartPlay;
                        //    ut.EndPlay = im.EndPlay;
                        //    ut.DeltaTicksPerQuarterNote = im.DeltaTicksPerQuarterNote;
                        //    ut.NumberBeatsMeasure = im.NumberBeatsMeasure;
                        //    ut.NumberQuarterBeat = im.NumberQuarterBeat;
                        //    ut.SelectedMode = im.SelectedMode;
                        //    ut.StepPlay = im.StepPlay;
                        //    //ut.MidiMeasures = im.Measures;
                        //    ut.Tracks = im.Tracks;
                        //    ut.ImportTracksToMeasure();
                        //}

                        ////
                        //// Modifier
                        ////
                        //Debug.Log("Modifier Count:" + slSong.Modifiers.Count);
                        //foreach (ImModifier im in slSong.Modifiers)
                        //{
                        //    Debug.Log(">>> Create '" + im.ImName + "'");
                        //    UtModifier ut = (UtModifier)Instantiate(UtGlobal.instance.utModifier, im.Position, Quaternion.identity);
                        //    //Debug.Log("<<< Create '" + im.ImName + "'");

                        //    // Common
                        //    LoadCommon(im, ut);

                        //    // Specific
                        //    ut.MeasureCount = im.MeasureCount;
                        //    ut.SelectedMode = im.SelectedMode;

                        //    //if (im.IndexProperties < 5)
                        //    //{
                        //    //    ut.IndexApplyTo = 1;
                        //    //    ut.IndexProperties = im.IndexProperties;

                        //    //}
                        //    //else
                        //    //{
                        //    //    ut.IndexApplyTo = 0;
                        //    //    ut.IndexProperties = 0;
                        //    //}
                        //    ut.IndexApplyTo = im.IndexApplyTo;
                        //    ut.IndexProperties = im.IndexProperties;

                        //    //Debug.Log("   im.MinSelected " + im.MinSelected);
                        //    //Debug.Log("   im.MaxSelected " + im.MaxSelected);
                        //    ut.FromSelected = im.MinSelected;
                        //    ut.ToSelected = im.MaxSelected;
                        //    ut.Step = im.Step;
                        //}

                        ////
                        //// Drum
                        ////
                        //Debug.Log("Drum Count:" + slSong.Drums.Count);
                        //foreach (ImDrum im in slSong.Drums)
                        //{
                        //    Debug.Log(">>> Create '" + im.ImName + "'");
                        //    UtDrum ut = (UtDrum)Instantiate(UtGlobal.instance.utDrum, im.Position, Quaternion.identity);
                        //    //Debug.Log("<<< Create '" + im.ImName + "'");

                        //    // Common
                        //    LoadCommon(im, ut);

                        //    // Specific
                        //    ut.Tracks = im.Tracks;
                        //    ut.RandomLevel = im.RandomLevel;
                        //}

                        ////
                        //// Activator
                        ////
                        //Debug.Log("Activator Count:" + slSong.Activators.Count);
                        //foreach (ImActivator im in slSong.Activators)
                        //{
                        //    Debug.Log(">>> Create '" + im.ImName + "'");
                        //    UtActivator ut = (UtActivator)Instantiate(UtGlobal.instance.utActivator, im.Position, Quaternion.identity);
                        //    //Debug.Log("<<< Create '" + im.ImName + "'");

                        //    // Common
                        //    LoadCommon(im, ut);

                        //    // Specific
                        //    ut.MeasureCount = im.MeasureCount;
                        //    ut.MeasureStart = im.MeasureStart;
                        //    ut.ActivateBeforeStart = im.ActivateBeforeStart;
                        //    ut.ActivateAfterLoop = im.ActivateAfterLoop;
                        //    ut.LoopCount = im.LoopCount;
                        //    ut.Activates = im.Activates;
                        //}


                        InfinityMusic.instance.MeasureLength    = slSong.MeasureLength;
                        InfinityMusic.instance.QuarterPerMinute = slSong.QuarterPerMinute;
                        InfinityMusic.instance.MaxMeasure       = slSong.MaxMeasure;
                        if (InfinityMusic.instance.MaxMeasure <= 0)
                        {
                            InfinityMusic.instance.MaxMeasure = 1000;
                        }
                        InfinityMusic.instance.SongName    = slSong.SongName;
                        InfinityMusic.instance.Description = slSong.Description;
                    }
                }
                catch (System.Exception ex)
                {
                    MidiPlayerGlobal.ErrorDetail(ex);
                }
            }
            Debug.Log("<<< Load");
        }
예제 #2
0
        static public void UtSave(string filepath)
        {
            // Use this for saving or loadibg
            SaveLoad slSong;

            slSong = new SaveLoad
            {
                MeasureLength    = InfinityMusic.instance.MeasureLength,
                MaxMeasure       = InfinityMusic.instance.MaxMeasure,
                QuarterPerMinute = InfinityMusic.instance.QuarterPerMinute,
                SongName         = InfinityMusic.instance.SongName,
                Description      = InfinityMusic.instance.Description
            };

            // Math Motif
            UtMathMotif[] motifs = GameObject.FindObjectsOfType <UtMathMotif>();
            if (motifs.Length > 0)
            {
                slSong.Motifs = new List <ImMathMotif>();
                foreach (UtMathMotif ut in motifs)
                {
                    ImMathMotif im = new ImMathMotif();
                    // Common
                    SaveCommon(ut, im);

                    // Specific
                    im.MeasureCount  = ut.MeasureCount;
                    im.OctaveMin     = ut.OctaveMin;
                    im.OctaveMax     = ut.OctaveMax;
                    im.ScaleIndex    = ut.ScaleIndex;
                    im.PatchIndex    = ut.PatchIndex;
                    im.DrumKit       = ut.DrumKit;
                    im.SelectedAlgo  = ut.SelectedAlgo;
                    im.StepInScale   = ut.StepInScale;
                    im.RotationSpeed = ut.RotationSpeed;
                    im.Accentuation  = ut.Accentuation;
                    im.Velocity      = ut.Velocity;
                    im.RepeatRate    = ut.RepeatRate;
                    im.IdCadence     = ut.CurrentCadence != null ? ut.CurrentCadence.UtId : -1;
                    im.Notes         = (ut.Notes != null && ut.Notes.Count > 0) ? new List <MathMotifNote>(ut.Notes) : null;

                    slSong.Motifs.Add(im);
                }
            }

            //// Math Motif
            //UtChorder[] chorders = GameObject.FindObjectsOfType<UtChorder>();
            //if (chorders.Length > 0)
            //{
            //    slSong.Chorders = new List<ImChorder>();
            //    foreach (UtChorder ut in chorders)
            //    {
            //        ImChorder im = new ImChorder();
            //        // Common
            //        SaveCommon(ut, im);

            //        // Specific
            //        im.Trigger = ut.Trigger;
            //        im.StepCount = ut.StepCount;
            //        im.ChordProgression = ut.ChordProgression;

            //        slSong.Chorders.Add(im);
            //    }
            //}

            //// Midi Motif
            //UtMidiMotif[] midis = GameObject.FindObjectsOfType<UtMidiMotif>();
            //if (midis.Length > 0)
            //{
            //    slSong.Midis = new List<ImMidiMotif>();
            //    foreach (UtMidiMotif ut in midis)
            //    {
            //        ImMidiMotif im = new ImMidiMotif();
            //        // Common
            //        SaveCommon(ut, im);

            //        // Specific
            //        im.MidiName = ut.MidiName;
            //        im.Transpose = ut.Transpose;
            //        im.StartPlay = ut.StartPlay;
            //        im.EndPlay = ut.EndPlay;
            //        im.DeltaTicksPerQuarterNote = ut.DeltaTicksPerQuarterNote;
            //        im.NumberBeatsMeasure = ut.NumberBeatsMeasure;
            //        im.NumberQuarterBeat = ut.NumberQuarterBeat;
            //        im.SelectedMode = ut.SelectedMode;
            //        im.StepPlay = ut.StepPlay;
            //        //im.Measures = ut.MidiMeasures;
            //        im.Tracks = ut.Tracks;

            //        slSong.Midis.Add(im);
            //    }
            //}

            // Cadence
            UtCadence[] cadences = GameObject.FindObjectsOfType <UtCadence>();
            if (cadences.Length > 0)
            {
                slSong.Cadences = new List <ImCadence>();
                foreach (UtCadence ut in cadences)
                {
                    ImCadence im = new ImCadence();
                    // Common
                    SaveCommon(ut, im);
                    // Specific
                    im.MeasureCount = ut.MeasureCount;
                    im.PctSilence   = ut.PctSilence;
                    im.RatioWhole   = ut.RatioWhole;
                    im.RatioHalf    = ut.RatioHalf;
                    im.RatioQuarter = ut.RatioQuarter;
                    im.RatioEighth  = ut.RatioEighth;
                    im.RatioSixteen = ut.RatioSixteen;
                    im.Durations    = (ut.Durations != null && ut.Durations.Count > 0) ? new List <Cadence>(ut.Durations) : null;

                    slSong.Cadences.Add(im);
                }
            }

            // Modifier
            //UtModifier[] modifiers = GameObject.FindObjectsOfType<UtModifier>();
            //if (modifiers.Length > 0)
            //{
            //    slSong.Modifiers = new List<ImModifier>();
            //    foreach (UtModifier ut in modifiers)
            //    {
            //        ImModifier im = new ImModifier();
            //        // Common
            //        SaveCommon(ut, im);
            //        // Specific
            //        im.MeasureCount = ut.MeasureCount;
            //        im.SelectedMode = ut.SelectedMode;
            //        im.IndexApplyTo = ut.IndexApplyTo;
            //        im.IndexProperties = ut.IndexProperties;
            //        im.MinSelected = ut.FromSelected;
            //        im.MaxSelected = ut.ToSelected;
            //        im.Step = ut.Step;
            //        slSong.Modifiers.Add(im);
            //    }
            //}

            ////
            //// Drum
            ////
            //UtDrum[] drums = GameObject.FindObjectsOfType<UtDrum>();
            //if (drums.Length > 0)
            //{
            //    slSong.Drums = new List<ImDrum>();
            //    foreach (UtDrum ut in drums)
            //    {
            //        ImDrum im = new ImDrum();
            //        // Common
            //        SaveCommon(ut, im);
            //        // Specific
            //        im.Tracks = ut.Tracks;
            //        im.RandomLevel = ut.RandomLevel;
            //        slSong.Drums.Add(im);
            //    }
            //}

            ////
            //// Activator
            ////
            //UtActivator[] activators = GameObject.FindObjectsOfType<UtActivator>();
            //if (activators.Length > 0)
            //{
            //    slSong.Activators = new List<ImActivator>();
            //    foreach (UtActivator ut in activators)
            //    {
            //        ImActivator im = new ImActivator();
            //        // Common
            //        SaveCommon(ut, im);
            //        // Specific
            //        im.MeasureCount = ut.MeasureCount;
            //        im.MeasureStart = ut.MeasureStart;
            //        im.ActivateBeforeStart = ut.ActivateBeforeStart;
            //        im.ActivateAfterLoop = ut.ActivateAfterLoop;
            //        im.LoopCount = ut.LoopCount;
            //        im.Activates = ut.Activates;
            //        slSong.Activators.Add(im);
            //    }
            //}

            slSong.SaveXML(filepath);
#if UNITY_EDITOR
            AssetDatabase.Refresh();
#endif
        }
예제 #3
0
        public void OnGUI()
        {
            try
            {
                if (customSkin != null)
                {
                    GUI.skin = customSkin;
                }
                if (myStyle == null)
                {
                    myStyle = new CustomStyle();
                }


                GUI.changed = false;
                GUI.color   = Color.white;
                //GUIStyle styleBold;
                //styleBold = new GUIStyle("Label")
                //{
                //    fontSize = 12,
                //    fontStyle = FontStyle.Bold
                //};

                float widthSelectSong = 200;
                float buttonHeight    = 30;
                float buttonWidth     = 200;
                float listHeight      = 150;
                float maxwidth        = Screen.width / 2;
                if (maxwidth < 300)
                {
                    maxwidth = 300;
                }


                if (MidiPlayerGlobal.CurrentMidiSet != null && MidiPlayerGlobal.CurrentMidiSet.ActiveSounFontInfo != null)
                {
                    GUILayout.BeginArea(new Rect(25, 30, maxwidth, 600));

                    GUILayout.Label("InfinityMusic - Music generated by an algo", myStyle.TitleLabel1);
                    if (GUILayout.Button(new GUIContent("Return to menu", "")))
                    {
                        GoMainMenu.Go();
                    }
                    GUILayout.Space(20);

                    GUISelectSoundFont.Display(myStyle);

                    GUILayout.Space(20);
                    GUILayout.Label(
                        string.Format("Measure {0,3:000}.{1,2:00}.{2,2:00}", InfinityMusic.instance.IndexMeasure + 1, InfinityMusic.instance.IndexQuarterMeasure + 1, InfinityMusic.instance.IndexSixteenthMeasure + 1),
                        myStyle.TitleLabel2);
                    GUILayout.Space(20);
                    GUILayout.BeginHorizontal();

                    SelectSong(widthSelectSong, listHeight);

                    GUILayout.BeginVertical();

                    if (GUILayout.Button("New", GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight)))
                    {
                        GuiMessage = null;
                        InfinityMusic.UtNewSong();
                        instance.SongName = "";
                    }

                    if (GUILayout.Button("Open", GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight)))
                    {
                        if (string.IsNullOrEmpty(SelectedSongName))
                        {
                            GuiMessage = "Select a song name";
                        }
                        else
                        {
                            GuiMessage = null;
                            string path     = Path.Combine(Application.dataPath, MidiPlayerGlobal.PathToSong);
                            string filepath = Path.Combine(path, SelectedSongName + "." + MidiPlayerGlobal.ExtensionSong);
                            if (!string.IsNullOrEmpty(filepath))
                            {
                                instance.SongName = SelectedSongName;
                                InfinityMusic.UtNewSong();
                                SaveLoad.UtLoad(filepath);
                            }
                        }
                    }

                    instance.SongName = GUILayout.TextField(instance.SongName, GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight));

                    if (GUILayout.Button("Save", GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight)))
                    {
                        if (string.IsNullOrEmpty(instance.SongName))
                        {
                            GuiMessage = "Set a name for this song";
                        }
                        else
                        {
                            GuiMessage = null;

                            string path = Path.Combine(Application.dataPath, MidiPlayerGlobal.PathToSong);
                            if (!Directory.Exists(path))
                            {
                                Directory.CreateDirectory(path);
                            }

                            string filepath = Path.Combine(path, instance.SongName + "." + MidiPlayerGlobal.ExtensionSong);
                            if (!string.IsNullOrEmpty(filepath))
                            {
                                SaveLoad.UtSave(filepath);
                            }
                        }
                    }
                    GUILayout.EndVertical();

                    GUILayout.EndHorizontal();

                    GUILayout.BeginVertical();
                    if (!string.IsNullOrEmpty(GuiMessage))
                    {
                        GUI.color = Color.red;
                        GUILayout.Label(GuiMessage, myStyle.TitleLabel2);
                        GUI.color = Color.white;
                    }
                    GUILayout.Label("Go to your Hierarchy and select InfinityMusic:", myStyle.TitleLabel2);
                    GUILayout.Label("   - Add MathMotif or Cadence components by clicking on button.", myStyle.TitleLabel2);
                    GUILayout.Label("   - Select created components MathMotif or Cadence under InfinityMusic.", myStyle.TitleLabel2);
                    GUILayout.Label("   - Change parameters in inspector to change melody.", myStyle.TitleLabel2);
                    GUILayout.EndVertical();
                }
                else
                {
                    GUILayout.Label(new GUIContent("SoundFont: no soundfont selected", "Define SoundFont from the menu 'Tools/MPTK - SoundFont Setup' or alt-f"));
                }
                GUILayout.EndArea();
            }
            catch (System.Exception ex)
            {
                MidiPlayerGlobal.ErrorDetail(ex);
            }
        }