void OnGUI_Chord(SequenceData parent, ChordData chord) { int index = parent.chords.IndexOf(chord); EditorGUILayout.BeginHorizontal(); { string clipName = (chord.clip != null ? chord.clip.name : "Chord"); chord.debug_isFoldedOut = EditorGUILayout.Foldout(chord.debug_isFoldedOut, clipName); if (GUILayout.Button(" + " , EditorStyles.miniButtonLeft , GUILayout.MaxWidth(32.0f))) { int position = parent.MoveChord(index, -1); SwitchValue(ref parent.chords[index].debug_isFoldedOut, ref parent.chords[position].debug_isFoldedOut); } if (GUILayout.Button(" - " , EditorStyles.miniButtonRight , GUILayout.MaxWidth(32.0f))) { int position = parent.MoveChord(index, 1); SwitchValue(ref parent.chords[index].debug_isFoldedOut, ref parent.chords[position].debug_isFoldedOut); } if (GUILayout.Button("Remove" , EditorStyles.miniButtonRight , GUILayout.MaxWidth(128.0f))) { parent.RemoveChord(index); } } EditorGUILayout.EndHorizontal(); if (chord.debug_isFoldedOut == false) { return; } ++EditorGUI.indentLevel; chord.type = (ChordData.Type)EditorGUILayout.EnumPopup("Type: ", chord.type); switch (chord.type) { case ChordData.Type.PRESS: chord.timingStart = chord.timingStop = EditorGUILayout.FloatField("Timing: ", chord.timingStop); break; case ChordData.Type.HOLD: chord.timingStart = EditorGUILayout.FloatField("Timing Start: ", chord.timingStart); chord.timingStop = EditorGUILayout.FloatField("Timing Stop: ", chord.timingStop); break; } chord.clip = (AudioClip)EditorGUILayout.ObjectField("Clip: ", chord.clip, typeof(AudioClip), false); --EditorGUI.indentLevel; }
public int MoveChord(ChordData chord, int amount) { int position = chords.IndexOf(chord) + amount; position = Mathf.Min(position, chords.Count - 1); position = Mathf.Max(0, position); chords.Remove(chord); chords.Insert(position, chord); return position; }
public int MoveChord(int index, int amount) { if (index < 0 || index >= chords.Count) { return(index); } ChordData chord = chords[index]; return(MoveChord(chord, amount)); }
public int MoveChord(ChordData chord, int amount) { int position = chords.IndexOf(chord) + amount; position = Mathf.Min(position, chords.Count - 1); position = Mathf.Max(0, position); chords.Remove(chord); chords.Insert(position, chord); return(position); }
public bool GetChord(int index, out ChordData chord) { if (index < 0 || index >= chords.Count) { Debug.LogError("Index out of range, Chord #" + index.ToString() + " doesn't exist!"); chord = null; return(false); } chord = chords[index]; return(true); }
public bool GetChord(int index, out ChordData chord) { if (index < 0 || index >= chords.Count) { Debug.LogError("Index out of range, Chord #" + index.ToString() + " doesn't exist!"); chord = null; return false; } chord = chords[index]; return true; }
private void GetChordClosest() { BallardData ballard; if (BallardDatabase.Instance.GetBallard(ballardCurrent.Value, out ballard) == false) { return; } SequenceData sequence; if (ballard.GetSequence(sequenceCurrent.Value, out sequence) == false) { return; } int closestIndex = -1; float closestTime = float.PositiveInfinity; for (int i = 0; i < sequence.chords.Count; ++i) { ChordData chord = sequence.chords[i]; float lower = chord.timingStart; float upper = chord.timingStop; if (lower - tolerance.Value < timeCurrent.Value && timeCurrent.Value < upper + tolerance.Value) { outChordIndex.Value = i; return; } // we want to the value that is closest to the current time // for a PRESS chord, timingStart and timingStop are identical lower = Mathf.Abs(timeCurrent.Value - lower); upper = Mathf.Abs(timeCurrent.Value - upper); float smallest = Mathf.Min(lower, upper); // if we're smaller than what we've already found // we become the new smallest if (smallest < closestTime) { closestIndex = i; closestTime = smallest; } } outChordIndex.Value = closestIndex; }
private void GetTimeRemaining() { BallardData ballard; if (BallardDatabase.Instance.GetBallard(ballardCurrent.Value, out ballard) == false) { return; } SequenceData sequence; if (ballard.GetSequence(sequenceCurrent.Value, out sequence) == false) { return; } for (int i = 0; i < sequence.chords.Count; ++i) { ChordData chord = sequence.chords[i]; float timeRemaining = chord.timingStart - timeCurrent.Value; if (timeRemaining >= 0.0f) { outTimeRemaining.Value = timeRemaining; return; } } if (isLoopEnabled == true && sequence.chords.Count > 0) { // if we got this far then we've passed the last chord, so let us return the first chord! float nextTime = timeCurrent.Value - ballard.duration; outTimeRemaining.Value = sequence.chords[0].timingStart - nextTime; return; } outTimeRemaining.Value = 0.0f; }
private void AssignChord() { if (ballardCurrent.Value == -1 || sequenceCurrent.Value == -1 || chordCurrent.Value == -1) { return; } BallardData ballard = null; if (BallardDatabase.Instance.GetBallard(ballardCurrent.Value, out ballard) == false) { return; } SequenceData sequence = null; if (ballard.GetSequence(sequenceCurrent.Value, out sequence) == false) { return; } ChordData chord = null; if (sequence.GetChord(chordCurrent.Value, out chord) == false) { return; } if (chord.clip == null) { Debug.LogError("Chord Clip is null!"); return; } clip.Value = chord.clip; }
private IEnumerator PlayNoteRoutine() { ChordData chord = StringsManager.Singleton.SelectedChord; if (chord.IsMuted(StringInd)) { _image.color = _mutedColor; _midiPlayer.EndNote(_lastPlayedNote); yield return(new WaitForSeconds(_noteLength)); } else { _image.color = _playedColor; _lastPlayedNote = chord.GetNoteForString(StringInd); _midiPlayer.StartNote(_lastPlayedNote, _volume); yield return(new WaitForSeconds(_noteLength)); _midiPlayer.EndNote(_lastPlayedNote); } _image.color = _defaultColor; _playNoteRoutine = null; }
private void GetChordExact() { BallardData ballard; if (BallardDatabase.Instance.GetBallard(ballardCurrent.Value, out ballard) == false) { return; } SequenceData sequence; if (ballard.GetSequence(sequenceCurrent.Value, out sequence) == false) { return; } for (int i = 0; i < sequence.chords.Count; ++i) { ChordData chord = sequence.chords[i]; // is it too early? if (timeCurrent.Value < chord.timingStart - tolerance.Value) { continue; } // is it too late? if (timeCurrent.Value > chord.timingStop + tolerance.Value) { continue; } // juuuuuust right outChordIndex = i; return; } }
public void Setup() { this.chordData = new ChordData(); this.loggerMock = new Mock <ILogger <ChordDataController> >(); }
public void RemoveChord(ChordData chord) { chords.Remove(chord); }
public void Setup() { this.chordData = new ChordData(); }
/// <summary> /// Generate all musical data and store it in TunnelData.fields. /// </summary> public static void Init() { // 0. Weights //weights = InitWeights(); bool has1stRecord = Recorder.inst.Has1stRecord; // 1. key if (!has1stRecord) { curKey = MusicGenerationLogic.RandomKey(); } // 2. tone range toneRangeMin = curKey.KeyNote + MusicManager.inst.toneRange_startNote; // oct. 3 if (has1stRecord) { var randAdd = Random.Range(-MusicManager.inst.toneRange_maxStartNoteShift, MusicManager.inst.toneRange_maxStartNoteShift); toneRangeMin += randAdd; toneRangeMin = Mathf.Clamp(toneRangeMin, MusicManager.inst.toneRange_startNote, MusicManager.inst.toneRange_startNote + MusicManager.inst.toneRange); } toneRangeMax = toneRangeMin + MusicManager.inst.toneRange; // oct. 5 // 3. velocity minVelocity = 0.08f; maxVelocity = 0.2f; // 3. chord structure // count chordTypeCount = MusicManager.inst.chordDegrees; // degrees int[] degrees = MusicGenerationLogic.RandomChordDegrees(curKey, chordTypeCount); // intervals int[] intervals; var chanceNoRec = ExtensionMethods.Probability(MusicManager.inst.unusualIntervalsChance_NoRec); var chanceHasRec = ExtensionMethods.Probability(MusicManager.inst.unusualIntervalsChance_HasRec); var randIndex = Random.Range(0, MusicManager.inst.unusualIntervals.Length); if (Time.time > 5f && ((has1stRecord && chanceHasRec) || (!has1stRecord && chanceNoRec))) { intervals = MusicManager.inst.unusualIntervals[randIndex].array; Debug.Log("unusual intervals: " + intervals[0] + ", " + intervals[1] + ", " + intervals[2]); } else { intervals = MusicManager.inst.standartIntervals; } // individual count int[] individualCounts = MusicGenerationLogic.RandomChordTypeCounts(chordTypeCount); // store! chordTypes = new ChordData[chordTypeCount]; for (int i = 0; i < chordTypeCount; i++) { chordTypes[i] = new ChordData(degrees[i], intervals, individualCounts[i]); } int[] testArray = new int[] { curKey.KeyNote }; Debug.Log("curKey: " + testArray.NoteNames() + "-" + curKey.Scale + ", baseNote: " + (curKey.KeyNote + 4 * MusicUtil.notesPerOctave)); // 4. chords Chord[][] chords = MusicGenerationLogic.RandomChordsFromData(curKey, chordTypes, toneRangeMin, toneRangeMax); // 5. assign to fields var fieldTypes = new MusicField.Type[FieldsCount]; var selectables = new bool[FieldsCount]; var spawnings = new bool[FieldsCount]; for (int i = 0; i < FieldsCount; i++) { fieldTypes[i] = MusicField.Type.Chord; selectables[i] = true; spawnings[i] = false; } TunnelData.fields = MusicFieldSet.SetDataToFields(TunnelData.fields, fieldTypes, chords, selectables, spawnings); // 6. field heights MeshUpdate.AdjustFieldHeights(TunnelData.fields); // 7. colors var colors = MeshUpdate.ColorsInRange(); MusicFieldSet.SetColors(TunnelData.fields, colors); Player.inst.curFieldSet = TunnelData.fields; // 8. Beat data GetBeatData(); }
public void AddChord(ChordData chord) { chords.Add(chord); }
void OnGUI_Chord(SequenceData parent, ChordData chord) { int index = parent.chords.IndexOf(chord); EditorGUILayout.BeginHorizontal(); { string clipName = (chord.clip != null ? chord.clip.name : "Chord"); chord.debug_isFoldedOut = EditorGUILayout.Foldout(chord.debug_isFoldedOut, clipName); if (GUILayout.Button(" + " , EditorStyles.miniButtonLeft , GUILayout.MaxWidth(32.0f))) { int position = parent.MoveChord(index, -1); SwitchValue(ref parent.chords[index].debug_isFoldedOut, ref parent.chords[position].debug_isFoldedOut); } if (GUILayout.Button(" - " , EditorStyles.miniButtonRight , GUILayout.MaxWidth(32.0f))) { int position = parent.MoveChord(index, 1); SwitchValue(ref parent.chords[index].debug_isFoldedOut, ref parent.chords[position].debug_isFoldedOut); } if (GUILayout.Button("Remove" , EditorStyles.miniButtonRight , GUILayout.MaxWidth(128.0f))) { parent.RemoveChord(index); } } EditorGUILayout.EndHorizontal(); if (chord.debug_isFoldedOut == false) return; ++EditorGUI.indentLevel; chord.type = (ChordData.Type)EditorGUILayout.EnumPopup("Type: ", chord.type); switch (chord.type) { case ChordData.Type.PRESS: chord.timingStart = chord.timingStop = EditorGUILayout.FloatField("Timing: ", chord.timingStop); break; case ChordData.Type.HOLD: chord.timingStart = EditorGUILayout.FloatField("Timing Start: ", chord.timingStart); chord.timingStop = EditorGUILayout.FloatField("Timing Stop: ", chord.timingStop); break; } chord.clip = (AudioClip)EditorGUILayout.ObjectField("Clip: ", chord.clip, typeof(AudioClip), false); --EditorGUI.indentLevel; }