Post hero image

Project Introduction


What the project is

Midingo is a piano game that takes inspiration from rhythm games and falling note piano visualizers.

All charts will be user-created, and a few possibly bundled with the game. Each chart will consist of little more than an audio file, MIDI file, and JSON for general chart metadata. The hope is to make it easy for people to make charts using the tools they’re already comfortable working with.

Why?

More than anything else, I thought it was fun to play along to songs with the original audio as “backing”. I figured it’d be pretty neat to merge that idea with the commonplace falling note piano tutorial for the visuals.

I also wanted to create something like the various existing piano visualizers in a game engine for potentially adding hit effects, note particles, among other things. This is primarily in hopes to create something more game like and have an “addictive” feeling to play.

Minimum Viable Product Requirements

At the very least, the game must have these. At the time of writing, which is release 0.1.0, core features have been implemented.

Gameplay

  • Falling notes on a note highway
  • Highlighting played notes
  • MIDI keyboard inputs
  • Computer → Piano keyboard input

Scoring features

  • Basic accuracy-based scoring system
  • Store and display scoring data

UI Features

  • Chart selector
  • Read charts from the disk
  • Settings GUI

Full release feature requirements

Before a full release, the game must have:

  • Color coded notes and piano keys
  • Search charts by title and additional filters
  • Pause game
  • Metronome
  • Sustained (held down) notes
  • Seek chart
  • Loop section(s)
  • Practice mode: Wait for the player to play notes

Bonus Features

These are features that would be nice to have, but I won’t consider necesarry for a 1.0.0 release.

  • BPM adjustment (preferably without changing pitch)
  • Built-in instrument sounds
  • Score visualizations (preferably interactive)

Prior Implementations

I have attempted to create a game like Midingo twice before the current implementation.

Dingo Hero: Early 2025

The first attempt to create a game like this. It was purely written in GDScript using Godot’s 2D engine.

In its abandoned state, these features have been implemented

  • Parse MIDI files into falling notes
  • Sync falling notes to audio playback
  • Highlight pressed keys from MIDI inputs
  • Visual metronome count
  • Audible metronome click

Why it was abandoned

My main motive for moving away from this implementation was that I wanted to create a 3D version and that I didn’t particularly like using GDScript. I found that I also had a hard time understanding the MIDI library used in this implementation.

The real challenge with this version was registering player inputs. This codebase was set aside for a different implementation.

Midingo (Unity): Late 2025

This is the second attempt at creating a falling note piano game. This was implemented in Unity using DryWetMIDI and C#.

In its abandoned state, these features have been implemented

  • Parse MIDI into falling notes
  • Color coded falling notes
  • Synced notes to playback

Why it was abandoned

I have a preference towards Godot, and I learned that Godot has a version with C# support. I have grown quite accustomed to C# at the time.

Additionally, I hit some challenges with the implementation.

Firstly, notes gradually decelerating in speed, a bug I wasn’t able to locate and fix by the time I made the decision to rewrite the code.

Secondly, Unity doesn’t natively support MIDI inputs in the engine, whilst Godot does.

Finally, from some experience in my CS class, I decided that I wasn’t particularly fond of the architecture and organization of this implementation. This became more apparent as I wanted to scale the project further.

So it was decided to rewrite from scratch in Godot, which gave me a chance to apply everything I’ve learned from these two failed prototypes.

The name

Midingo’s name comes from merging two words, “MIDI” and “Dingo”. MIDI is the technology that drives the game, used as the file format for charts and inputs from hardware keyboards. Dingo refers to a canine native to Australia.

The intended mascot for Midingo is supposed to be a dingo, however, at the time of writing it’s just the character that represents me (snoutibur).