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;
    }
Exemplo n.º 2
0
	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;
	}
Exemplo n.º 3
0
    public int MoveChord(int index, int amount)
    {
        if (index < 0 || index >= chords.Count)
        {
            return(index);
        }

        ChordData chord = chords[index];

        return(MoveChord(chord, amount));
    }
Exemplo n.º 4
0
    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);
    }
Exemplo n.º 5
0
    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);
    }
Exemplo n.º 6
0
	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;
	}
Exemplo n.º 7
0
        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;
        }
Exemplo n.º 8
0
        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;
        }
Exemplo n.º 9
0
        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;
        }
Exemplo n.º 10
0
    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;
    }
Exemplo n.º 11
0
        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;
            }
        }
Exemplo n.º 12
0
 public void Setup()
 {
     this.chordData  = new ChordData();
     this.loggerMock = new Mock <ILogger <ChordDataController> >();
 }
Exemplo n.º 13
0
 public void RemoveChord(ChordData chord)
 {
     chords.Remove(chord);
 }
Exemplo n.º 14
0
	public void RemoveChord(ChordData chord)
	{
		chords.Remove(chord);
	}
Exemplo n.º 15
0
 public void Setup()
 {
     this.chordData = new ChordData();
 }
Exemplo n.º 16
0
    /// <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();
    }
Exemplo n.º 17
0
 public void AddChord(ChordData chord)
 {
     chords.Add(chord);
 }
Exemplo n.º 18
0
	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;
	}
Exemplo n.º 19
0
	public void AddChord(ChordData chord)
	{
		chords.Add(chord);
	}