Skip to content

Latest commit

 

History

History
135 lines (110 loc) · 5.45 KB

README.md

File metadata and controls

135 lines (110 loc) · 5.45 KB

kteach-r

COMPOSABLE SAMPLEs PLAYER

A sample player that can play multiple sample and mix them. Can apply effect at the samples. Mixers players and effects are user configurable via GUI. Can record loop. Can analyze samples BPM ecc ecc. Can play sample in sync. Can receive midi command.

Name

The name kteach-r pronunced /kiː/ /ˈtɛk/ /ɑː/ is composed by k teach and r.

teach cause I like techno music, r cause of rust.

k cause the name kteach-r is a tribute to a character of Battlestar Galactica

What it can do

  • 1 kind of sample/track player (play, pause, loop, pitch, tempo)
  • several kinds of effects (volume, echo, ...)
  • 1 kind of mixer (n source 1 output)
  • 1 kind of recorder
  • everything above composable via GUI
  • control via MIDI
  • file browser and music collection (via a separate and standalone bin)
  • core buildable on wasm and embedded, (so it will possible to use kteach-r on standalone controllers)
  • 3 modalities editing, browse, performance, build

Examples

kteach-r is composed by a core and 2 GUIs. Example of how to use the core API without all the overhead of the graphical interfaces are in examples parsing mp3 in debug mode is pretty slow, better to use cargo run --release

Non goal

kteach-r is mostly an experiment so for now every direction is a good one.

Architecture

                             ____  ____     
                          /\/    \/    \/\/\                                   .
                         /                  \                                 .
                        /                    \                               /
  (ON SAMPLE LOAD)*    / input => decoder =>  \                             / 
  (ON GUI EVENT)  *   /  input => GUI     =>   | => audio engine -> output .
. (ON MIDI EVENT) *  /   input => MIDI    =>  / .                         . 
 \                  /       ^-------^            \                       /
  \                /            ^                 \                     /
   .THIS IS A WAVE*             r                  .---> REAL-TIME <---.
     ------------               e                   -------------------
                                a
                                l
                                 
                                t
                                i
                                m
                                e

GUI

I want (at least at the beginning) develop 2 GUI for the core. This because:

  • I want to do a comparison between the chosen libraries.
  • Having 2 GUI help keep everything more modular.

After a very superficial research the two libraries that I want to try are:

  • crochet: the underlying concepts seems very interesting
  • iced: cause I like elm

Decoder

Symphonia is the decoder. Cause is pure rust and it seems the most complete option. It is also WASM ready.

Reproduce audio

cpal is used to play audio cause it seems the defacto standard in rust.

RealTime audio engine

synthesizer-io-core is used as RT audio engine.

Midi

midir is used in order to send and receive midi messages. wmidi is used to serialize and deserialize midi messages.

Milestones

  • sample player (pause and play)
  • multi players support (pause and play)
  • n-channel mixer
  • add gain (as effect)
  • sample player position
  • sample player (play from)
  • sample player speed
  • sample player speed with same pitch
  • sample player waveform
  • sample player sync
  • effects (at least a delay and a reverb and a low/high pass)
  • config file (midi and player/mixer/effect)
  • sample analyzer (BPM and key and autogain)
  • sample recorder
  • file browser

Useful crates