aboutsummaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)AuthorFilesLines
5 daysAppImage.yml: download tarball from git.fmsbw.deHEADmaster-fmsbw-cimasterRobin Haberkorn1-1/+1
5 daysAppImage.yml: removed the sudo - it won't work in the ubuntu22 podRobin Haberkorn1-1/+1
5 dayspoint to new home at https://git.fmsbw.de/applause2/Robin Haberkorn4-66/+39
This also replaces Github workflows with .fmsbw CI scripts.
2024-05-21added the Sheppard-Rice-Glissando example: this can also be run in batch modeRobin Haberkorn1-0/+52
2024-05-21AppImage: hopefully fixed launching the Jupyter notebookRobin Haberkorn1-1/+1
2024-05-21AppImage: fixed Jupyter and ILua modes on all but my own systemRobin Haberkorn1-6/+8
* We cannot use the Pip-installed launchers since they have hardcoded paths. Instead we reference python3 explicitly in the /usr/bin/applause launcher. * For some strange reason, the site-packages directory where all of the relevant packages are put is not in sys.path. So also export it via $PYTHONPATH.
2024-05-21AppImage: possibly fixed the ILua and Jupyter modesRobin Haberkorn1-2/+4
* when using a CI-built version, it would complain about missing Python modules and cannot find the `ilua` executable
2024-05-21README: added introduction and list of featuresRobin Haberkorn1-7/+35
2024-05-21nightly builds: website now has an index.html that shows the README.md by ↵Robin Haberkorn1-3/+8
default
2024-05-21nightly builds: normalized the artefact file names and updated READMERobin Haberkorn2-9/+16
2024-05-21added a nightly builds workflowRobin Haberkorn1-0/+48
* this will both build and publish an AppImage and publish the LDoc-generated pages as the project's website (gh-pages)
2024-05-20AppImages contain Jupyter notebook support nowRobin Haberkorn2-15/+44
* that's their default mode, but the ILua console and Lua prompt can also be accessed by passing additional commandline parameters. * README: we can install our ILua fork without explicitly cloning the repository which simplifies matters a bit.
2024-05-20added AppImage via pkg2appimageRobin Haberkorn3-6/+56
* Docker turned out to be impractical since you cannot connect a dockerized Jack client to a Jack server on the host as library versions would have to match exactly. Neither did I get Netjack to run in Docker. Also when running in Docker, it would be tricky to get gnuplot to work (and Tcl/Tk support in the future). Especially the Jupyter notebook packaging would have been a lot easier, though with Docker. * AppImage will automatically avoid bundling libjack and require a compatible libjack on the host instead. * Using pkg2appimage ensures we can pull in dependencies as Debian packages. * This version of AppImage.yml does not contain Jupyter notebooks.
2024-05-20ilua-wrapper.sh: use realpath instead of readlinkRobin Haberkorn1-1/+1
* should fix running from arbitrary directories
2024-05-20detect libreadline via pkg-configRobin Haberkorn2-3/+2
2024-05-01format tables in LDoc via HTML instead of MarkdownRobin Haberkorn5-8/+19
* this is unreliable but should be tested on the build server as well * drops the lua-discount dependency * updated TODO
2024-04-22applause.lua: fixed link to RTcmixRobin Haberkorn1-1/+1
2024-04-22libsndfile moved to Github and updated the format enum - it now supports MP3Robin Haberkorn2-2/+17
* SF_FORMAT is now up to date with libsndfile v1.2.2.
2024-04-21Stream:gnuplot() now takes an optional terminal parameterRobin Haberkorn1-3/+6
* This is especially useful when plotting to GNU pic scripts by setting terminal to "gpic". But also for all formats that are not guessed from the file extension.
2024-04-14minor documentation fixRobin Haberkorn1-1/+1
2024-03-27replaced Stream:foreach() with Stream:iter()Robin Haberkorn3-45/+53
* This allows the native syntax `for f in Stream:iter() do ... end` without using lambda functions. Also you can use `break` and `return` statements. * On the other hand we cannot exploit the extended xpcall() semantics and had to introduce another lambda in Stream:play(). * In general the number of function calls per tick stays the same. Stream:gtick() itself could be used as an iterator, but Stream:iter() adds checking for CTRL+C, resetting of the sample cache and binding functions.
2024-03-16Stream:gnuplot() now supports writing to an output filev0.1Robin Haberkorn1-2/+8
* Especially useful to generate PDF plots for my thesis.
2024-02-20ilua-wrapper: FreeBSD compatibilityRobin Haberkorn2-1/+3
2024-01-29updated README and TODORobin Haberkorn2-2/+7
2024-01-29revised Stream:resample() - it takes a stream factor now, so you can control ↵Robin Haberkorn1-19/+64
playpack speed * The old implementation was simple but severely limited: * the resample factor (playback speed) could only be scalar * for infinite source streams, the algorithm would require infinitely growing memory. The algorithm therefore also wasn't realtime-safe and quite slow (probably because of reallocations). * This could be made to work with stream-factors if the source stream is infinite, but we couldn't get rid of the memory requirements due to being based on IndexStream. * Instead, there is a custom ResampleStream now that backs Stream:resample(). It also performs linear interpolation but has constant memory requirements and works with factor-streams. Even for finite source streams and constant factors this implementation will be faster and more real-time safe. * You cannot play backwards, due to missing buffering. This can still be done manually using IndexStream if necessary.
2024-01-24evdev: access struct dirent via helper function applause_dirent_name() ↵Robin Haberkorn3-12/+10
instead directly from Lua * the structure is highly platform-dependant and might even differ between 32-bit and 64-bit systems * in particular this fixes EvdevStream on FreeBSD
2024-01-24README: mention some useful programsRobin Haberkorn2-3/+9
2024-01-22README: documented some FreeBSD tweaksRobin Haberkorn2-8/+32
2024-01-12Stream:gnuplot() supports plotting into Kitty terminals nowRobin Haberkorn2-0/+15
2024-01-12minor FreeBSD compatibility fixes and documentationRobin Haberkorn4-5/+15
2023-12-19added example for pitch tracking via FFTRobin Haberkorn4-2/+80
2023-12-19updated TODORobin Haberkorn1-1/+25
2023-12-19fft.lua: documented moduleRobin Haberkorn2-41/+146
2023-12-19fft.lua: added Hann(ing) window functionRobin Haberkorn1-2/+15
2023-12-19added a free sample to be used with the FFT examplesRobin Haberkorn4-9/+705
* license of the project is GPLv3 now
2023-12-19added FFT Jupyter notebookRobin Haberkorn2-1/+2155
* This still refers to a wave file that shouldn't be checked in.
2023-12-19fft.lua: added support for Fourier analysis (FFT/IFFT)Robin Haberkorn4-1/+347
* Allows one-time analysis of arrays or short streams. * Transformation on real-time streams * Magnitude and phase extraction * Windowing (only Hamming for the time being).
2023-12-10added Stream:partition() operationRobin Haberkorn1-0/+53
* Inspired by APL's partition function, although this always partitions into chunks of the same size. * Meant to be used for real-time FFT analys and synthesis. * Added Stream:each() and Stream:reduce() as APL-like aliases for Stream:map() and Stream:fold().
2023-12-10updated Jupyter notebook documentation after ILua forkingRobin Haberkorn2-20/+11
2023-11-23fixed playing of muxed streams and improved error reporting during Stream:play()Robin Haberkorn1-5/+5
* This now preserves the original traceback.
2023-11-16improved interruption (SIGINT, CTRL+C) supportRobin Haberkorn6-94/+192
* Just like the original LuaJIT interpreter, this will use a hook to automatically raise an error from Lua code. * Unfortunately, as long as Jit compilation is enabled, this cannot reliably work. Therefore we still set an `interrupted` flag that must be polled from tight loops. * Instead of polling via applause_push_sample() which gave interruption-support only to Stream:play(), we now have a separate checkint() function. * checkint() should be manually added to all tight loops. * Stream:foreach() and everthing based on it is now also supporting interruptions (via checkint()). * This internally works via applause_is_interrupted(). A C function was exposed only because LuaJIT does not support volatile-qualifiers and would optimize away reads to the interrupted-flag. As a side effect, we can also reset the hook. * Flags set in signal handlers should be `volatile`. * Added likely() and unlikely() macros to C code. * Updated sample.ipynb Jupyter notebook: Everything important is now supported, albeit requiring custom ILua patches.
2023-11-15Added Jupyter notebook exampleRobin Haberkorn2-4/+425
2023-11-15Added Jupyter-support to Stream:gnuplot()Robin Haberkorn1-1/+19
* Renders SVG into a cell instead of a separate window * currently requires some not-yet-merged patch for ILua (see https://github.com/guysv/ilua/issues/5)
2023-11-15Jupyter integration improvements: support $APPLAUSE_OPTS and document how to ↵Robin Haberkorn3-11/+15
display graphics and rich text
2023-11-12documented how to run Applause in Jupyter Consoles and NotebooksRobin Haberkorn3-0/+80
* This is at the very least cool to have and will be worthwile to write about in the dissertation. * Added ilua-wrapper.sh script which can be used as the ILua interpreter and/or can be symlinked to `lua` in PATH, so ILua will pick up Applause even in Notebooks without any additional tweaks.
2023-11-12support running scripts in batch modeRobin Haberkorn2-38/+67
* This should be largely compatible with the standard Lua interpreter. The `arg` array is also initialized.
2023-09-29added Stream:CCrel() for interpreting relative CC controllers (for instance ↵Robin Haberkorn1-4/+51
encoders) * currently, this does only support two's complement encoding of signed 7-bit integers
2023-09-26Stream:CC14() added, Stream:CC() outputs normalized values, got rid of ↵Robin Haberkorn2-47/+64
Stream:ccscale() * Stream:CC14() allows reading 14-bit CCs (split over two 7-bit MIDI messages). It's actually capable to handle regular 7-bit controllers just fine. The question is whether we still need a distinction between Stream:CC() and Stream:CC14(). Stream:CC14() has a slight overhead, but only when actually receiving MIDI messages. * Stream:CC14() and Stream:CC() output values normalized to [-1,+1] now. We actually never made use of raw CC values and the scaling can be done only once whenever a matching MIDI message is received, so the runtime overhead is irrelevant. * This means we could also get rid of Stream:ccscale() now. Just use Stream:scale() from nowon. * Use Stream:scan() now whenever relying on previous values. That way, you can often avoid having to keep an accumulator variable in the closure.
2023-09-26Stream:evrel(): scale output values only once per eventRobin Haberkorn1-7/+8
* The old implementation would require scaling operations at sample rate, even though the value changes only very seldom. * We are working with fractions, so we don't actually need to store the unscaled value in the closure.
2023-09-22EvdevStream:new() fixed opening device by nameRobin Haberkorn1-11/+43
* Iterating by /dev/input/eventX ids was too simplistic as there can easily be gaps. * Instead, we now iterate the directory using opendir(), readdir() etc. * Unfortunately, struct dirent might not be easily definable portably. (FIXME?) * Also added EvdevStream.list(), so you now longer have to invoke evtest for finding out ids and names of HID devices for EvdevStream:new().