4.8 KiB
Topos
Topos is only a Proof of Concept. It is not ready for users. Please feel free to contribute but do not expect stable features and/or support! Having fun developing it, join the team if you want to have fun!
Topos is an algorithmic sequencer inspired by the Monome Teletype. It is meant to be ready to use, without installation, from a web browser. Topos is still a prototype and is not ready for production use. It is not meant to be a clone of the Teletype, but rather a new take on the same concept. The goal is to provide a tool that can be used to generate music, but also to learn about live coding and algorithmic music.
Topos can generate sound through WebAudio and/or MIDI. The sequencer works by letting the user enter short JS code snippets that are evaluated in a sandboxed environment. An API is providing tools to manipulate time, transport, instruments, data, etc...
How does it work?
Just like the Teletype, Topos is following a scripting paradigm. The user is writing short snippets of code that are evaluated in a sandboxed environment. The code is evaluated in a loop, at a given tempo. There are four types of files that can be edited:
- the global buffer: used to sequence scripts and control major global events. This script is evaluated at every clock tick. This is, by default, super fast.
- the local buffers are describing some musical logic/processes taking place. They are activated on demand, once by any other script using the
script(n)command. - the init buffer is used to initialise the state of the universe when you first load the app. Think of it as a space to set the tempo, to set default variables, etc...
- the note buffer: used to document your projects and to take notes about your composition.
A universe is a set of files (global, init, locals and note) representing a musical composition, a song, a piece, an improvisation. You can create as many universes as you want and switch between them at any time. The application is saving the state of the universe in the browser's local storage.
To switch between universes, use the Ctrl+B keybinding that will open a modal. The clear button will reset the current universe to a blank slate.
Keybindings
Ctrl+P: start the audio playback/clock.Ctrl+S: stop the audio playback/clock.Ctrl+G: global buffer.Ctrl+I: initialisation buffer.Ctrl+L: local buffers.F1...F9: switch to one of the 9 local buffers.Ctrl+F1...F9: manual trigger of a local buffer.Ctrl+B: switch between universes.Ctrl+Shift+V: toggle Vim editor mode.
To evaluate code, press Ctrl+Enter (no visible animation). This is true for every buffer. To stop a buffer from playing, comment your code or delete it.
How to install locally?
To run the application in dev mode, you will need to have Node.js and Yarn installed on your computer. Then:
- Clone the repository:
- run
yarn install - run
yarn run dev
- run
To build the application for production, you will need to have Node.js and Yarn installed on your computer. Then:
- Clone the repository:
- run
yarn run build - run
yarn run start
- run
To build a standalone browser application using Tauri, you will need to have Node.js, Yarn and Rust installed on your computer. Then:
- Clone the repository:
- run
yarn tauri build - run
yarn tauri dev
- run
Roadmap to Topos v1.0
Application User Interface
- Give more information the local context of execution of every script
- print/display the internal iterator used in each script
- animate code to show which line is currently being executed - [ ] More rhythmic generators - [ ] Rendering static files (MIDI, MOD, etc...)
Scheduler
- [ ] Stable / robust clock and script/event scheduler.
- Add a way to set the clock's tempo.
- Add a way to set the clock's time signature.
- Add a way to set the clock's swing.
- [ ] MIDI Clock In/Out support.
- Performance optimisations and metrics.
- Add a way to save the current universe as a file.
- Add a way to load a universe from a file.
User Interface
- Settings menu with all options.
- Color themes (dark/light), other colors.
- Font size.
- Font Family
- Vim mode.
- [ ] Optimizations for smaller screens and mobile devices.
- [ ] Read console log without opening the browser console.
- Fix the bug that adds a new line everytime the app is opened
Web Audio
- [ ] Support Faut DSP integration.
- WebAudio based engine.
