2023-08-16 11:19:34 +02:00
2023-08-06 23:57:34 +02:00
2023-08-11 00:37:01 +03:00
2023-08-06 10:24:54 +02:00
2023-08-16 11:19:34 +02:00
2023-07-28 02:17:09 +02:00
2023-08-11 23:30:29 +02:00
2023-08-07 00:24:10 +02:00
2023-07-28 01:17:44 +02:00
2023-08-16 00:58:17 +03:00
2023-07-28 01:23:38 +02:00
2023-08-16 11:17:12 +02:00
2023-07-28 01:23:38 +02:00
2023-08-13 13:06:58 +03:00
2023-08-06 10:37:45 +02:00
2023-08-16 00:58:17 +03:00

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.

Screenshot

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

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

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

Roadmap to Topos v1.0 (first release)

Application User Interface

  • Visual feedback for script execution
    • [ ] add blinking dots in the upper-right corner of the editor
    • [ ] visual warning when an error is detected (blinking red?)
    • more variety in visual signals when evaluating code
  • Code animation for rhythmic functions on certain lines (show that a statement is true)
  • More/Better rhythmic generators
    • Ability to write simple musical sequences
    • [ ] Ability to create musical structures easily
  • Rendering static files (MIDI, MOD, etc...)
  • Add a way to save the current universe as a file.
  • Add a way to load a universe from a file.
  • [ ] Add a way to share the universe using a link.

Scheduler

  • [ ] Stable / robust clock and script/event scheduler.
    •  There is still a tiny bit of imprecision left.
    • Add a way to set the clock's swing.
    • [ ] MIDI Clock In/Out support.

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.
Languages
TypeScript 73.8%
CSS 15.9%
HTML 7.7%
JavaScript 2.4%