aboutsummaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)AuthorFilesLines
2024-03-28InputStream(): work in progressinputstreamRobin Haberkorn3-13/+203
* It still results in gaps (???). Under FreeBSD, even the expression `InputStream():play()` produces noise. Apparently, there is some kind of data corruption. * it's probably necessary to increase the input buffer size and tell Jackd about the difference (output - input buffer size) as an additional latency.
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().
2023-09-22Stream:evkey(): result stream will now contain the key id if the key is ↵Robin Haberkorn1-1/+1
pressed, as it was previously documented
2023-09-19added Stream:print() for tracking control values streamsRobin Haberkorn1-0/+19
2023-09-16evdev.lua: support more ABS_X constantsRobin Haberkorn1-1/+24
2023-09-16minor SubStream optimizationRobin Haberkorn1-9/+11
2023-09-15fixed SubStream of cached streamsRobin Haberkorn2-7/+11
* in particular: SndfileStream(...):sub(...) for multi-channel audio files. * The fix is more of a workaround just like the initial skipping of samples by sub() is a workaround. I couldn't yet think of a way how to seek in streams elegantly.
2023-09-15documentation updateRobin Haberkorn6-19/+34
2023-09-13added LDoc documentationRobin Haberkorn12-314/+1369
* gives a useful overview of everything supported right now * especially the type documentation is useful, as these things are not self-evident in Lua (because of dynamic typing). * The LDoc page can later be published as the Github pages of the project. This can even be done automatically by a Github action. However, we should first make sure that it's okay to publish the project before defending the thesis since Github pages will always be public even for private repositories. * Documentation of command-line parameters is lacking (TODO). * It may be possible to use types like "Stream(number)" to describe streams of numbers. The LDoc documentation mentions boxed types. Perhaps there can even be Streamable(number)? * We are also lacking good example programs and/or introductory material.
2023-09-09Stream:jdump() prints less unrelated traces nowRobin Haberkorn1-2/+6
2023-09-09cache the value in simple value streamsRobin Haberkorn1-1/+3
* analyzing the bytecode via tostream(...):jdump() has shown that this might be more efficient
2023-09-05added README and TODORobin Haberkorn3-0/+105
2023-09-05sampleCache should be global so that the other Lua modules can access it ↵Robin Haberkorn1-1/+1
directly as well
2023-09-05replaced math.pow(x, y) with x^yRobin Haberkorn1-1/+1
2023-09-05moved common definitions into applause.hRobin Haberkorn3-27/+17
2023-09-05libsndfile related classes moved into sndfile-stream.luaRobin Haberkorn2-100/+101
2023-09-05factored out filters into filters.luaRobin Haberkorn2-371/+362
2023-09-05MIDI stuff has been moved into midi.luaRobin Haberkorn4-245/+248
* common definitions are now in midi.h
2023-09-05MIDIStream is now an ordinary class that caches internallyRobin Haberkorn1-21/+15
2023-09-05Added HID support via EvdevRobin Haberkorn7-8/+333
* This works for relative, absolute and keyboard devices * devices can be grabbed, so they do not interfere with the rest of the system
2017-10-21Fix crashes on terminationRobin Haberkorn1-2/+3
* some internal datastructures were freed, but Jack was not properly shut down. This resulted in occasional crashes on shutdown. * The (incomplete) cleanup code has been commented out, which should work for the time being. Of course, the program should clean up properly but this is tedious and the internal datastructures will change in the forseeable future.