/// <summary>
        /// Convert the fmod chord marker string into a list of FmodNotes, then store the active notes in fmodChord.
        /// </summary>
        public void ParseChordFromMarker(string marker)
        {
            //Debug.Log("ParseChordFromMarker: " + marker);
            try
            {
                ResetFmodChord();

                myStringBuilder.Clear();
                myStringBuilder.Append(marker);
                myStringBuilder.Replace(" ", "");
                //Remove fmodFlagChar from the front of our marker
                myStringBuilder.Remove(0, 1);

                string[] delimitedNotesInfo = myStringBuilder.ToString().Split(fmodNoteDelimitterChar);

                for (int i = 0; i < delimitedNotesInfo.Length; i++)
                {
                    myStringBuilder.Clear();
                    myStringBuilder.Append(delimitedNotesInfo[i]);

                    noteStruct = new FmodNote();

                    if (myStringBuilder[0] == fmodRootNoteChar)
                    {
                        noteStruct.isRootNote = true;
                        //Remove fmodRootNoteChar from the start of the note when we no longer need it.
                        myStringBuilder.Remove(0, 1);
                    }
                    else
                    {
                        noteStruct.isRootNote = false;
                    }

                    //Grab the int of the end of our note name for our octave value (i.e. "C3" grabs a 3)
                    noteStruct.octave = int.Parse("" + myStringBuilder[myStringBuilder.Length - 1]);

                    //Trim octave from end of note name when we no longer need it
                    myStringBuilder.Remove(myStringBuilder.Length - 1, 1);

                    //At this point, the leftover bits of noteInfo should just be the note name.
                    noteStruct.note = myStringBuilder.ToString();

                    //Calculate our note's midi value based on the note name and the octave.
                    int midiValue = 0;
                    noteToMidiConversionMap.TryGetValue(noteStruct.note, out midiValue);
                    midiValue           += (noteStruct.octave + octaveOffset) * octaveMidiValue;
                    noteStruct.midiValue = midiValue;

                    fmodChord.Add(noteStruct);
                }
            }
            catch (Exception e)
            {
                Debug.LogError("FmodChordInterpreter error! Invalid string passed into ParseChordFromMarker: " + marker + ". Error message: " + e.Message + ", " + e.StackTrace);
            }
        }
Ejemplo n.º 2
0
        private void PlayRootNote(FmodParamData[] extraParams = null)
        {
            FmodNote rootNote = FmodChordInterpreter.instance.GetFmodRootNote();

            if (rootNote != null)
            {
                float noteValue  = ConvertMidiValueToFmodParamValue(rootNote.midiValue);
                float noteOctave = rootNote.octave;

                FmodParamData[] paramData = GenerateParamData(musicalSfxParamName, noteValue, octaveParamName, noteOctave, extraParams);
                PlayPooledFmodEvent(sfxEventName, sfxEventVolume, paramData);
            }
            else
            {
                Debug.LogWarning("No root note found in current chord. Playing nothing.");
            }
        }