Proteus (.prot) file authoring application built with Vue 3, TypeScript, and Tauri. This project is a continuation of the Multiplay Mixer Flutter application.
This project is currently in the early stages of development. Despite being in development for several years at this point as I have not had vast amounts of time to dedicate to it.
- Proteus Player - Desktop application similar to QuickTime Player for playing single
.protfiles - Proteus CLI - Rust-based CLI for reading and parsing
.protfiles - Multiplay Mixer - Outdated Flutter version of this application
- Multiplay Player - Outdated Flutter version of Proteus Player
“It’s possible that our grandchildren will look at us and say ‘You mean people used to listen to the same thing over and over again?’” - Brian Eno
I attended a lecture in 2014 by Dr. Andy Farnell on procedural audio. He spoke, in part, about the distinction between fixed and performance mediums (i.e., film vs. stage, album vs. concert), noting that while a theatre performance has a fixed structure and the story evokes a mood, it also adapts itself to the space and time of the specific performance.
Though, undoubtedly, much of the draw of performance art is owed to community and social connection, I think there’s a case to be made that some of the power of performance is in its subtle unpredictability.
While the world of popular cinematic storytelling is, at least in part, beginning to push itself out of a fixed format (Black Mirror: Bandersnatch / Netflix’s growing library of interactive content) and the world of video gaming, which has long touted interactive storytelling, is approaching cinematic realism, popular recorded music is still very much fixed.
Procedural music itself is not a new thing; the video game and contemporary composition communities have been exploring it for a long while (Steve Reich’s It’s Gonna Rain was recorded in 1965). But, as of yet, examples of procedural music in the realm of song are sparse.
The possibly obvious solution that I would like to explore would be to record a song in such a way that you have some number (say 10) of each individual part (i.e., 10 takes of the vocal, 10 of the drums, 10 of the guitar, etc.). Then on playback, you choose a random selection of each part. On a simple song with 5 parts (guitar, vocals, drums, bass, synth), this would yield 100,000 unique combinations.
Widespread internet accessibility and the popularity of streaming music could make this potentially very achievable.
My first proof of concept of this variable playback format (hosted here) used SoX to simply combine the parts of a short piece into a new random composite file. In early 2021, I started to work on expanding the idea with two Flutter-based desktop applications (here & here) that read and write Matroska audio files. Using a streamable container file format like Matroska, it is possible to hold all the parts in one distinct package and stream different sets together, as well as include additional data that can serve as a guide for how to process each part of the recording.
In mid-2022, I decided to replace the Flutter applications with an ElectronJS application in order to make use of the flexibility of CSS styling and, at the same time, decided to name the project after the Greek sea-god Proteus, who represents mutability and is the root of the adjective "protean."
Shortly after beginning to write the Electron application, I realised that the resulting file size and build performance were far from ideal for a relatively simple application. I did some additional research and found Tauri, which offers nearly everything that I was looking for with Electron but with significantly improved performance. Tauri's performant Rust-based architecture encouraged me to build out a Rust-based core library for parsing and playing .prot files, which is integrated into this project as well as the Proteus Player application.
There's still much to do with the project, so if you would like to follow along, you can keep tabs on this repo via its issues page. If you’d like to talk about the idea, feel free to give me a shout at adam.thomas.howard@gmail.com!
This project is licensed under the PolyForm Small Business License 1.0.0.
- ✅ Free for individuals and businesses making less than $1M USD annual revenue.
- 💰 Commercial license required for larger organizations.
- Contact Adam Howard to obtain a commercial license.
