Newer
Older
music / app / src / main / java / com / lukas / music / song / Song.kt
package com.lukas.music.song

import android.os.Handler
import android.os.Looper
import android.widget.RadioButton
import com.lukas.music.instruments.Instrument
import com.lukas.music.song.chords.Chord
import com.lukas.music.song.chords.ChordProgression
import com.lukas.music.song.note.Note

class Song(
    var root: Note,
    val chordProgression: ChordProgression,
    val beats: Int
) {
    private var beat = 0
    private var chord: Chord = chordProgression.step()
    val stepButtons = mutableListOf<RadioButton>()

    fun step() {
        Handler(Looper.getMainLooper()).post {
            stepButtons[beat].isChecked = false
            beat++
            if (beat >= beats) {
                beat = 0
                chord = chordProgression.step()
            }
            stepButtons[beat].isChecked = true
            // this should not be executed here, but otherwise timing problems show up...
            val chordNotes = chord.getNotes(root)
            for (voice in Instrument.voice) {
                voice.step(root, chordNotes)
            }
        }
    }

    companion object {
        var currentSong = Song(
            Note.NOTES[69],
            ChordProgression(),
            4
        )
    }
}