v (thumbnail links to intro video) v
Cybin is a dependency-light, LuaJIT-based audio programming environment suitable for realtime performance and offline rendering. Unlike many popular multimedia programming environments, it strives to do everything in one place all at once, and its strength and weakness lies in completely reinventing the wheel in order to offer the user sample-accurate timing and complete control.
The best way to understand Cybin is to understand what it does, and by extension, what it does not do.
What it does is provide the user with:
__process
that recieves an arbitrary number of audio samples (one per channel) and outputs an arbitrary number of audio samples (one per channel) every 1/cybin.samplerate
secondscybin
that provides some basic audio/music utilties that would be difficult or impossible to provide adequately using a Lua interpreter alone (audio system info, MIDI I/O, audio file handling, etc...)What it does not do is:
LuaJIT
, JACK
, and libsndfile
(MacOS dependencies are available through brew)git
cd && git clone https://github.com/efairbanks/cybin.git && cd cybin
./LINUX_BUILD.SH
or MACOS_BUILD.SH
depending on your platform (Windows support hopefully coming soon)export PATH=$PATH:~/cybin
in your .bash_profile
or other shell startup file (or symlink to the cybin
executable, whatever floats your boat)Emacs
~/.emacs
, ~/.emacs.el
, or ~/.emacs.d/init.el
)
(add-to-list 'load-path "~/cybin")
(autoload 'cybin-mode "cybin-mode" "Cybin editing mode." t)
(add-to-list 'auto-mode-alist '("\\.cybin$" . cybin-mode))
(add-to-list 'interpreter-mode-alist '("cybin" . cybin-mode))
C-c C-c
-> execute line
C-c C-b
-> execute file
C-c C-e
-> execute block/paragraph
caveats: The way emacs traditionally sends blocks of code to subprocesses has something like a 1kB character limit, so large blocks should be broken up or imported using dofile()
or require()
.