Releases: the-drunk-coder/megra.rs
Mégra 0.0.13
As for AppImages, there's one built on Ubuntu and one built on Arch, so you can choose the one closest to your system (both x86_64).
The Ubuntu one might be more generic, but somehow doesn't run on Arch. I still have to figure that out ...
As always, choose the ringbuffer version if you don't want to worry about your system's blocksize. If you can fix it to 512, choose the other one.
Changes for Mégra 0.0.13
- Visualizer:
:exclude
keyword to selectively exclude parts from being visualized - Visualizer: using
ls
withcompose
now leads to individual visualizations for the composed markov chains - Visualizer: correctly clearing composed, wrapped generators (no "leftovers")
- Samples: adding "exclude.txt" to sample folder allows excluding samples
- Language:
vals
can now define a row of lookup keys when provided the'keys
symbol as second parameter - Effects: add configurable bitcrusher with parameters
bcbits
bcmode
bcdown
bcmix
- Bugfix: sample parameters after sample number are now evaluated
- Synth: add a simple
BLIT
oscillator - Bugfix:
pear
now clears probability (sets it back to 100) after:for
, as it should be ... - Improvement: allow sending OSC from scheduled control events
- Improvement: allow print in ctrl event
- Improvement: finally implement ctrl events in
step-part
- Improvement:
step-part
with identifier AND symbol ... - Improvement:
bpm
for ctrl events - Improvement:
step-part
for ctrl events - Improvement:
vec
fornuc
- New language construct:
mapper
, a rudimentary event mapper that takes functions - New langauge constructs: event getters to extract a parameter from an event
ev-param
,ev-tag
andev-name
- New language construct:
note
event (can be used to drive scoreviz in conjunction withmapper
) - New (non-lazy) arithmetic functions:
round
,floor
andceil
midi-mul
,midi-add
,midi-sub
,midi-div
, to work with midi notesto-string
to turn numbers and some other stuff into strings- Language: line between function and macro is now very blurred, i.e. you can do
(fun (name) (fun (concat "to-" name) () (send-to name)))
,
where in the child function definitionname
will be replaced ... this may explode at any given moment !! - Bugfix (Visualizer): a failed visualizer message doesn't crash scheduling thread anymore
- Improvement (Visualizer): sending visualizer messages in multiple batches for bigger generators
- Bugfix:
rep
not chrashing when generator contains childless states - Synth:
freeze-add
for additive live looping
Mégra 0.0.12
Changes for Mégra Version 0.0.12:
- Editor:
Ctrl+S
selects current S-Expression - Editor:
Alt+Up/Down
moves between S-Expression - Language:
@rest
and@all
for variable argument handling in functions - Language:
()
(empty parenthesis) now evaluate tofalse
- Language: comparisons, comparators and a more powerful
match
statement - Language: better naming behaviour for
learn
, handling sample strings with line breaks correctly - Language: corrected behaviour of
every
, which had an incorrect modulo operation - Language:
every
now also works correctly on transitions withdur
events - Synth:
kpp
- KarPlusPlus, a Karplus-Strong approximation.
Known Issues:
Sample events need the :sus
argument explicitly specified if you want to use sus-mul
further down the line.
;; this won't work
(sx 'foo #t
(pear (sus-mul 1.5)
(nuc 'ba (violin))))
;; this will
(sx 'foo #t
(pear (sus-mul 1.5)
(nuc 'ba (violin :sus 1000))))
Mégra 0.0.11
Changes for Mégra Version 0.0.11:
- send OSC messages to visualizer as bundle (no more stuck nodes)
- simple
spread
function (without expanding) resync
flag forsx
- experimental
--karl-yerkes-mode
(evaluate current expression on every modification) load-file
- load other megra files- startup file to define instruments etc.
- allow
vec
to constructcyc
andloop
- allow nested
vec
to create chords inloop
andcyc
mosc
(multi-oscillator synth)min
andmax
limitersidx
argument for incomplete events (freq-mul
and the like) to target specific fields- improved sound card handling (should work now on soundcards without input)
Known Issues
If you want to define a function without parameters, the intuitive way to do this would be just leaving the parenthesis empty, but this currently doesn't work. To do so, you have to pass a #f
flag:
(fun noparam #f
(once (saw 100)))
Mégra 0.0.10
Changes for Mégra Version 0.0.10:
- introduce
progn
- introduce
match
- introduce
fun
(function definition) - introduce
callback
(callback definition, same asfun
but as a mnemonic) - introduce
let
(variable definition),defpart
now maps tolet
(no change from user perspective) - introduce
print
- introduce midi helpers
mtof
,mtosym
,veltodyn
- introduce
concat
to concatenate symbols and strings - introduce
map
struct,pair
constructor andinsert
method - add osc sender
- add some extra types (f64, i32, i64) for osc sender
- add osc receiver
- osc callbacks (toplevel functions with args)
- much more flexible midi callback (toplevel functions with args)
- start midi port from language instead of from command line
- negative playback rates for samples (can't believe I didn't think about that before ...)
- (kinda) lazy evaluation for the arithmetic functions
- 16-channel mode
- arbitrary labels for
learn
- allow defining event mappings for
learn
asmap
- allow defining samples for
learn
asvec
- sync on
ctrl
events :tie
flag forlearn
(auto-restart in case generator gets stuck)- reliable playback for long samples
Known Issues
Mégra will always look for an audio input device, and might not start on computers that don't have an audio input device. On laptops, which typically have an internal microphone, or using an external sound card that has both input and output, this shouldn't be an issue. On a computer like a Mac Mini, which doesn't have a built-in microphone, Mégra might not start without an external sound card (to be fixed in the future).
Mégra 0.0.9
If you have used Mégra before version 0.0.8, please also check out the breaking changes there!
Changes for Mégra Version 0.0.9
cyc
repetition time handling has been fixed- dynamic parameters for
facts
andvals
- new and more flexible ways to work with samples:
keys
,keys-add
,keys-sub
function to replace keys along the pipelinerandom-sample
with shorthandrands
to choose a different, random sample every timesample-number
(withadd
,mul
,sub
anddiv
), with shorthandsno
to modify sample numbers
- corrections in markov chain learning
- short samples for
learn
don't cause a crash anymore - fixed crash in wavematrix generation
- synth events now work properly without frequency argument
Mégra 0.0.8
BREAKING CHANGES !
cyc
and loop
constructors have been changed and, as of now, handle time differently.
cyc
now slices a fixed-length time cycle into equal parts, according to the number of events providedloop
works as before, as a loop of variable time-lenght, where each transition between events is given a fixed transition time- both
loop
andcyc
now accept shorthand syntax - shorthand syntax has changed a bit
For details, please check the documentation: https://megra-doc.readthedocs.io
Mégra 0.0.7
Changes for Mégra Version 0.0.7:
- add startup flag for maximum number of sample buffers.
- transpose function
- update egui dependency to latest version
- add basic arithmetic functions
facts
constructorvals
constructor- allow usage of stereo samples
- ambisonic-binaural sources (samples only)
pear
withdur
event is now applied to first transition- state preservation for named generator processors
- optional id for
every
- sample import/download mechanism
import-sample-set
- simple cubic waveshaper
- got rid of (some) annoying clicks when using live input
Known Problems:
learn
constructor can crash the program if sample strings are too short- first keyword parameter isn't read for synths if no note/frequency is specified
Mégra.rs 0.0.6
See changelog for new features: https://github.com/the-drunk-coder/megra.rs/blob/main/changelogs/megra_0_0_6.md
There's plenty of new filters in this release.
For macOS, you might need to make the files executable by running chmod +x /path/to/downloaded/megra
.
This time, I didn't attach a Linux build because making a 100% portable build is tricky, while installing cargo
isn't all that hard. Thus,
I recommend installing cargo
using your distro's package manager, and use the respective installation method as described in the
documentation.
For documentation and tutorial, including alternative installation methods, check: https://megra-doc.readthedocs.io/en/latest/
(Spanish version of the documentation is in the making.)
Mégra.rs 0.0.5
Now with LFOs and many other improvements.
For macOS and Linux, you might need to make the files executable with chmod +x
For documentation and tutorial, check: https://megra-doc.readthedocs.io/en/latest/
(spanish version of the documentary is in the making)
Mégra.rs 0.0.4
Mégra.rs 0.0.4
Use the non-ringbuffer versions if you can make sure your system blocksize is fixed at 512 samples. Otherwise use the ringbuffer version, it might be more stable, but slightly less performant.
Known Issues:
- You need an input- and an output device to be present on your system, even if you don't use input.
- On Windows, a USB sound card might work better than internal laptop sound cards.
Alternative Installation:
You can also install from crates.io
with cargo, if you have a Rust build environment up and running:
# standard
cargo install megra_rs
# ringbuffer
cargo install megra_rs --features ringbuffer
Enjoy, and good luck!