Teoria has several object types: notes, chords, intervals, and scales. Each one of these objects can be created in various ways through a simple chained interface, and then operated on to get information about them, and transform them in various ways. For example, you can create a note from a string representing the note name (such as A), or from a frequency, piano key, or MIDI note number and then convert that note to a different one of those representations. Similar things are possible with scales, chords and intervals. There is a whole host of methods and operations available, so check out the Github page for a full list.
There is a fun demo of the library as well, which shows an interesting application where the user can enter a chord, and see a visualization of the sound waves it will produce. You can drag the waveform to move it around and hover over the individual lines to see what the individual notes and frequencies are. The visualization itself is all SVG based. It’s an interesting showcase for what information Teoria can extract and produce and it’s pretty fun to play with, so definitely go check it out!
After seeing the MIDI.js sequencer, the VexFlow music notation language, and now the Teoria music theory library, many of the pieces for building a high quality music composition application like Finale or Sibelius in the browser are here, so I wouldn’t be surprised to see one in the coming months. Other interesting applications that could be built using these tools and others such as the Web Audio API and the Web MIDI API include smart visualizations that know more about the music being played, music production applications like Logic or Pro Tools, and many more. We’re only just getting started in the audio space on the web, and it’s great to see more building blocks like Teoria appear on the scene!
You can check out the source code for Teoria on Github and find the demo on their website.