/// <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); } }
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."); } }