Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jbetz/ensemble
A high level audio engine for building DAWs
https://github.com/jbetz/ensemble
audio daw haskell music
Last synced: about 18 hours ago
JSON representation
A high level audio engine for building DAWs
- Host: GitHub
- URL: https://github.com/jbetz/ensemble
- Owner: JBetz
- License: mit
- Created: 2023-01-24T16:53:20.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-06-08T00:23:00.000Z (8 months ago)
- Last Synced: 2024-06-08T20:26:43.992Z (8 months ago)
- Topics: audio, daw, haskell, music
- Language: Haskell
- Homepage:
- Size: 466 KB
- Stars: 6
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# 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 GoldmanObtuse 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](https://www.noteperformer.com/). See [this vi-control post](https://vi-control.net/community/threads/is-it-time-for-sound-rendering.48604/post-4889885) for an explanation why MIDI alone is inadequate.
## Architecture
![architecture](architecture.png)
## Modules
- [x] sequencer
- [ ] CLAP plugin host (via [clap-hs](https://github.com/JBetz/clap-hs))
- [ ] VST plugin host
- [x] audio I/O (via [portaudio](http://www.portaudio.com/))
- [ ] MIDI device routing## API
See [ensemble.tl](./ensemble.tl) for a [Type Language](https://core.telegram.org/mtproto/TL) specification of the API.
To run a WebSocket server:
```bash
./ensemble --interface websocket --port 3000
```The WebSocket endpoint will be available at `localhost:`. 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:
```json
{ "@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
- [x] windows