/chiptheory

Piano roll with 12 colors to visualize music theory: works for any MIDI and some 8/16-bit game soundtracks

Primary LanguageCGNU General Public License v3.0GPL-3.0

Chiptheory

This is a fork of Chip Player JS that focuses on music theory analysis of NES tracks. All credits for tremendous original work go to Matt Montag and all contributors to libraries that he managed to wire together. I'm just writing a tiny layer on top. The licensing is the same.

My stuff lives primarily in src/components/chiptheory, I also removed some features from the UI to maximize useful display area for analysis. Annotations live in src/corpus/analyses.json

Your own annotations currently won't be saved, but I can fix that - please, contact me.

Hypotheses

Languages on NES are clusters that are far away from each other. Some games that are unbound by external influences try to make tracks for levels so that all levels are as far from each other as possible. To achieve that, they employ the following languages:

Two things are interesting:

  • these languages most likely don't blend within a single track, but may well go together in different levels of the same game
  • other world language are absent: hemitonic pentatonics, gamelan, maqamat. all tunings are 12-edo

Another hypothesis is that Chinese developers largely used Chinese traditional pentatonic-based tonic-ambiguos language with guzheng imitations, disregarding the game content. (Or did they describe it in their own language, which I as a Westerner don't understand?)

What if every bootleg country has some unique musical language?

Also, it feels like there was a gradual development of cool timbral hacks and compositional form. Games from 1986 are simpler than games from 1993.

Composers

Certain composers for NES can have very recognizable style and musical toolchain. List of sound drivers may also help. This is also a good way to listen to "something similar to that cool track that I've found".

Setup instructions

Try yarn install and yarn start. If it doesn't work, try reading https://github.com/mmontag/chip-player-js/. Don't compile wasm, I pre-compiled it and added it to the repo.