Age | Commit message (Collapse) | Author | |
---|---|---|---|
2020-02-20 | Fix crash on buffer override of N/A data-types | Robin Gareus | |
DiskReader::refill_audio and DR::run() do check if a given playlist is available. This is required for upcoming changes to set DR channels to unconditionally match DiskWriter. | |||
2020-02-20 | Fix declick at transport start for multi-channel tracks | Robin Gareus | |
2020-02-14 | Fix seamless looping w/split-cycles | Robin Gareus | |
This fixes the following (loop-lennth > internal_playback_seek length. Due to read-ahead on some cycles the following can happen --- Loop From: 3528000 To: 3880800 (len: 352800) start-sample: 3880971 playback_sample: 3528171 nframes: 96 start-sample: 3880875 playback_sample: 3528075 nframes: 192 --- which resulted in disk_samples_to_consume == 0; | |||
2020-02-12 | Fix loop-fade and de-click buffersize calculation | Robin Gareus | |
Exponential approach to zero: 1 / exp(t) == exp (-t) we "stretch" it by a time-constant "c": gain(t) = exp (-t * c) To find the time t, at which the exponential approach reaches gain "g": exp (-c * t) = g take the log of both sides: log (exp (-c * t) = log (g) since log (exp (x)) == x : -c t = log (g) divide by -c : t = -log (g) / c set g = 1e-5 and c = _a/sr and we get: t = -log (1e-5) / (_a/sr) The iterative approach using g += c * (target_gain - g); converges faster than the exact exp() calculation. Except with 32-bit float, if target-gain is 1.0f and "c" is small. With 32bit float (1.0 - 1e-5) = .9999900 is represented as sign: +1 | mantissa: 0x7fff58 | exponent: 126 there are only 126 "steps" to 1.0. Rounding of the lowest mantissa bit does matter. We have to assume worst-case, and increase the required loop_fade_length buffersize. vs. approaching 0, where there are over 2^110 steps between zero and 1e-5. | |||
2020-02-12 | NO-OP: use #define for de-click + fade gain coefficient | Robin Gareus | |
2020-02-12 | Prevent out-of-bounds array access | Robin Gareus | |
2020-02-12 | fix missing MIDI playback by using correct (expanded) logic in ↵ | Paul Davis | |
DiskReader::declick_in_progress() If use_transport_fades() is false, then the declick_amp will have its gain always set to the current target (no declick). Therefore only testing if it has reached zero is not enough, we need to check if we are declicking at all. | |||
2020-01-23 | extend DEBUG_TRACE output | Paul Davis | |
2020-01-21 | add a heuristic to avoid refilling playback buffers at transport stop | Paul Davis | |
If we're within 1/6th of the size of the reserved buffer of the target sample, no need to refill | |||
2020-01-21 | remove debug output | Paul Davis | |
2020-01-18 | Session::request_locate() takes a tri-valued second argument for ↵ | Paul Davis | |
"roll-after-locate" This allows callers to defer logic about auto-play/current rolling state and more to TransportFSM where it can be cnentralized and is less ambiguous | |||
2020-01-07 | fix required offset when reading MIDI data near loop end/start | Paul Davis | |
2020-01-07 | improved/new DEBUG_TRACE output | Paul Davis | |
2020-01-07 | imrpove debug msg | Paul Davis | |
2020-01-03 | add extensive comment for posterity | Paul Davis | |
2020-01-03 | fix recent bad commit | Paul Davis | |
2020-01-03 | fix DiskReader::overwrite_existing_audio() | Paul Davis | |
Several math/geometry errors here | |||
2019-12-19 | fix thinko ... we're checking if a DiskReader handles audio | Paul Davis | |
2019-12-18 | do not try to process audio in a diskreader with no audio playlist | Paul Davis | |
2019-12-18 | fix crash when looping with a MIDI track | Paul Davis | |
2019-12-16 | fix logic error that prevented MIDI playlists from being rendered at load time | Paul Davis | |
An edit was required to force the render | |||
2019-12-14 | fix behavior of DiskReader when moved after an instrument | Paul Davis | |
2019-12-13 | Fix mismatched delete | Robin Gareus | |
2019-12-12 | reduce another race condition risk | Paul Davis | |
overwrite_queued == true is equivalent to _pending_overwrite != 0 | |||
2019-12-12 | remove useless lock | Paul Davis | |
rbuf allocation/use is protected by process_lock | |||
2019-12-12 | fix playback of newly added/modified MIDI data | Paul Davis | |
2019-12-12 | expand DEBUG_TRACE() statement | Paul Davis | |
2019-12-11 | remove MIDI readahead parameter | Paul Davis | |
We just don't do this anymore | |||
2019-12-11 | variable renaming in Butler for various buffer sizes | Paul Davis | |
2019-12-10 | should probably resolve MIDI notes when loop bounds change | Paul Davis | |
We don't really need to do this if the bounds have moved "outwards", but at present we don't know if that is the case, so be safe and resolve in case the loop bounds moved "inwards" and we would otherwise get stuck notes caused by the now-missing noteOffs | |||
2019-12-10 | fix unnecssary disruption of MIDI stream when disabling loop | Paul Davis | |
2019-12-10 | use PlayistChanged appropriately to fix MIDI output | Paul Davis | |
We didn't render the MIDI data when a playlist was set, only when modified. | |||
2019-12-10 | revert to single buffer for disk playback, and 5.x-style overwrite | Paul Davis | |
Also address issues with MIDI and also atomicity of _pending_overwrite | |||
2019-12-08 | fix error when continuing to refill audio playback buffers after a buffer switch | Paul Davis | |
The file_sample[AUDIO] member was not updated to reflect the last-read sample in the switched-to buffer. Also move several methods and members from DiskIO to DiskReader where they belong. | |||
2019-12-08 | more debug output | Paul Davis | |
2019-12-07 | functional double buffering when using DiskReader::overwrite_existing_buffers | Paul Davis | |
2019-12-07 | a few parameter changes, and flesh out code to switch rbufs in DiskReader | Paul Davis | |
2019-12-07 | initial conversion to double buffering inside DiskReader | Paul Davis | |
Second buffer is not used (or allocated) yet. | |||
2019-11-24 | fix crash when using Region > Loop | Paul Davis | |
2019-11-23 | remove debug output | Paul Davis | |
2019-11-23 | remove debug message about LOCATE WITHOUT DECLICK. This behavior is normal ↵ | Paul Davis | |
and legal when looping | |||
2019-11-23 | more tweaks to correctly (or more correctly) reload disk reader buffers when ↵ | Paul Davis | |
loop fade choice changes | |||
2019-11-22 | redesign of declicking and fades around loop boundaries | Paul Davis | |
2019-11-21 | Fix multi-channel de-click | Robin Gareus | |
_declick_amp gain needs to be reset for each channel before the test (_declick_amp.gain() != target_gain) if de-clicking is needed. | |||
2019-11-19 | Fix declick offset position for multi-channel tracks | Robin Gareus | |
2019-11-18 | DiskReader::_declick_offs should only advance once per ::run() call | Paul Davis | |
2019-11-18 | DiskReader::_declick_amp needs to repeat the same work for each audio ↵ | Paul Davis | |
channel handled | |||
2019-11-18 | small changes to make declick out triggered by just stopping | Paul Davis | |
2019-11-18 | add missing NULL check | Paul Davis | |
2019-11-18 | use reverse-reading of MIDI data in DiskReader | Paul Davis | |