Skip to content

JBetz/ensemble

Repository files navigation

ensemble

Je ne me souviens que d'un mur immense
Mais nous étions ensemble
Ensemble, nous l'avons franchi

I only remember an immense wall
But we were together
Together we surmounted it

Ensemble by Jean-Jacques Goldman

Obtuse audio plugin frameworks and specious realtime constraints present an immense wall to music production in high-level languages. This project aims to surmount them.

Implementation status

Short term goals are to support MIDI sequencing of CLAP instruments, with both offline and realtime rendering. Longer term goals are to develop higher level languages to support intelligent playback like NotePerformer. See this vi-control post for an explanation why MIDI alone is inadequate.

Architecture

architecture

Modules

  • sequencer
  • CLAP plugin host (via clap-hs)
  • VST plugin host
  • audio I/O (via portaudio)
  • MIDI device routing

API

See ensemble.tl for a Type Language specification of the API.

To run a WebSocket server:

./ensemble --interface websocket --port 3000

The WebSocket endpoint will be available at localhost:<port>. Note that all calls are asynchronous, so messages need to be tagged using the @extra field in order to route them back to their senders.

Example request and response payloads:

{ "@type": "getAudioDevices", "@extra": 855818240 }
{ "@type":"AudioDevices", "@extra": 855818240, "audioDevices": [ { "name": "Microsoft Sound Mapper - Input", "index": 0}, { "name": "Speakers (Realtek (R) Audio)","index": 1 } ] }

Platforms

  • unix
  • windows

About

A high level audio engine for building DAWs

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published