/// <summary> /// Plays the next step in the measure. /// </summary> /// <param name="set"></param> /// <param name="timeStepIN"></param> /// <param name="stepsTaken"></param> public override void TakeStep(InstrumentSet set, eTimestep timeStepIN, int stepsTaken = 0) { for (int instIndex = 0; instIndex < set.mInstruments.Count; instIndex++) { if (set.mInstruments[instIndex].mData.Group >= set.mMusicGenerator.mGeneratorData.mGroupOdds.Count || set.mData.mProgressionRate < 0) { return; } Instrument instrument = set.mInstruments[instIndex]; bool groupIsPlaying = set.mMusicGenerator.mGroupIsPlaying[(int)instrument.mData.Group]; if (instrument.mData.mTimeStep == timeStepIN && groupIsPlaying && instrument.mData.mIsMuted == false) { PlayNotes(set, instrument, stepsTaken, instIndex); } } }
/// Takes a measure step. public override void TakeStep(InstrumentSet set, eTimestep timeStepIN, int value = 0) { for (int i = 0; i < set.mInstruments.Count; i++) { if (set.mInstruments[i].mData.mIsMuted == false) { for (int j = 0; j < set.mInstruments[i].mData.ChordSize; j++) { int note = set.mInstruments[i].mClipNotes[set.mRepeatCount][value][j]; if (note != InstrumentSet.mUnplayed) { /// set percussion to 0 if (set.mInstruments[i].mData.InstrumentType.Contains("p_")) { note = 0; } set.mMusicGenerator.PlayAudioClip(set, (int)set.mInstruments[i].InstrumentTypeIndex, note, set.mInstruments[i].mData.Volume, i); } } } } }
/// <summary> /// Takes a single step through the measure: /// </summary> /// <param name="set"></param> /// <param name="timeStepIN"></param> /// <param name="stepsTaken"></param> public override void TakeStep(InstrumentSet set, eTimestep timeStepIN, int stepsTaken = 0) { bool usingTheme = set.mMusicGenerator.mGeneratorData.mThemeRepeatOptions == eThemeRepeatOptions.eUseTheme; bool repeatingMeasure = set.mMusicGenerator.mGeneratorData.mThemeRepeatOptions == eThemeRepeatOptions.eRepeat; for (int instIndex = 0; instIndex < set.mInstruments.Count; instIndex++) { Instrument instrument = set.mInstruments[instIndex]; int instType = (int)instrument.InstrumentTypeIndex; if ((instrument.mData.mTimeStep == timeStepIN || set.mMusicGenerator.OnUIPlayerIsEditing()) && instrument.mData.mIsMuted == false) { if (instType >= set.mMusicGenerator.AllClips.Count) { throw new ArgumentOutOfRangeException("Single clip instrument has not been loaded into the generator"); } int instrumentSubIndex = UnityEngine.Random.Range(0, set.mMusicGenerator.AllClips[instType].Count); if (set.mMusicGenerator.OnUIPlayerIsEditing()) { for (int chordNote = 0; chordNote < instrument.mData.ChordSize; chordNote++) { set.mMusicGenerator.RepeatNotePlayed.Invoke(new RepeatNoteArgs(instIndex, chordNote, set.SixteenthRepeatCount, instrumentSubIndex, set)); } } else if (usingTheme) { PlayThemeNotes(set, instrument, instType, instrumentSubIndex, instIndex); } else if (repeatingMeasure) { PlayRepeatNotes(set, instrument, instIndex, instrumentSubIndex); } } } }
///<summary> Takes a single measure step.</summary> public abstract void TakeStep(InstrumentSet set, eTimestep timeStepIN, int stepsTaken = 0);