Skip to content

MIDI player with click, tempo adjustment and mixer

License

Notifications You must be signed in to change notification settings

suniala/midi-tuutti

Repository files navigation

midi-tuutti

A midi player for playing backing tracks while practicing.

How To Get It?

See Releases for experimental builds. Download one for your operating system, unzip it and:

  • On macOS: Run image/bin/midi-tuutti
  • On Linux: Run image/bin/midi-tuutti
  • On Windows: Run image/bin/midi-tuutti.bat

For developers: see build and run instructions below.

Current features

Midi-Tuutti Player

Midi-Tuutti Mixer

  • Mixer (controls note velocities instead of channel volume)
  • For each mixer track, show instruments in a tooltip
  • Click track that can be muted in the mixer
  • Tempo multiplier (adjust song tempo by a multiplier)
  • Constant tempo (override song's tempo)
  • Jump to next/prev measure
  • Remember latest program (instrument) changes, pan, pitch and other channel specific adjustments at the beginning of each measure. Meaning: even if you skip measures, these adjustments are not skipped.
  • Repeat infinitely
  • Keyboard shortcuts
  • A bit unreliable playback

Keyboard Shortcuts

  • Play/stop - space
  • Prev/next measure - left/right
  • First measure - home
  • Tempo adjustment or fixed tempo up/down - up/down
  • Switch tempo mode - ctrl + space
  • Switch between player and mixer: tab
  • Mixer controls:
    • Tracks 1-10 - 1/Q to 0/P
    • Tracks 11-16 + click - A/Z to J/M
    • Example for track 1:
      • volume up - 1
      • volume down - Q
      • toggle solo - shift + 1
      • toggle mute - shift + Q
  • Full screen - f11
  • Open file - ctrl + o

Midi Devices

Currently only the default Java Runtime midi device is supported. You can get better sounds by copying a sound bank to $JAVA_HOME/jre/lib/audio. See Java Sound API: Soundbanks for details.

Ideas

  • Remember last n files
  • Select click sounds
  • Play click for one/two measures before playback
  • Skip empty measures (ones without any notes) at the beginning of a song

Development

Requires Java 11 (OpenJDK works), uses Kotlin, TornadoFX and java-midi-decoder.

Start with: ./gradlew run.

Enable engine trace logging with: -Dmidituutti.engine.trace=true

TornadoFX layout debugger: ctrl+shift+d

Build a jar with: ./gradlew build

Running the JAR

You need to have JDK 11 and OpenJFX installed. Run with:

# Example for Ubuntu 18.04
java \
  --module-path /usr/share/openjfx/lib \
  --add-modules=javafx.base,javafx.controls,javafx.graphics \
  -jar ./build/libs/midi-tuutti.jar