4 years agoMerge features/jack-session into master branch master
Gabriel M. Beddingfield [Mon, 3 Mar 2014 05:23:24 +0000 (21:23 -0800)]
Merge features/jack-session into master branch

This includes the following changes:

    b78e6a1 ThinSlider: Provide feedback on timeline of A/B looping.
    8e3dac9 Add experimental support for JackSession API.
    b428a07 Save/load loop a/b and position for JackSession.
    786a5f9 Save/restore speed and pitch for JackSession.
    194bf3e JackSession: Symlink data to session folder.


4 years agoMerge smbolton/master[1] into master branch
Gabriel M. Beddingfield [Mon, 3 Mar 2014 05:14:34 +0000 (21:14 -0800)]
Merge smbolton/master[1] into master branch

This includes the following changes:

    15a80cb Add MP3 loading support through libmpg123.
    a3e0f1f Change stretch range to more usable 25%-125%.
    1c86721 fix encoding of filenames (UTF-8 was broken)
    f27e900 refactor mpg123 code per Gabriel's suggestions
    870dd7b make position slider easier to grab
    a137323 don't fail on premature end of MP3 stream
    5e807a8 fix tabbing style


4 years agoRubberBandServer: query librubberband for `available' before read
Gabriel M. Beddingfield [Sat, 30 Nov 2013 17:32:44 +0000 (09:32 -0800)]
RubberBandServer: query librubberband for `available' before read

If the librubberband instance is asked for more data than it has in
its ringbuffer, it results in extra messages to the console:

    WARNING: RingBuffer::read: 4096 requested, only 483 available
    WARNING: RingBuffer::read: 4096 requested, only 483 available
    WARNING: RingBuffer::read: 4096 requested, only 486 available
    WARNING: RingBuffer::read: 4096 requested, only 990 available

However, this is not an error condition for StretchPlayer, which is
simply requesting "up to 4096 elements."  To avoid the spamming the
console, we now ask the stretcher how many elements are available and
then request only that much (or less).

4 years agoMerge branch 'features/ab-loop-waveform' into master
Gabriel M. Beddingfield [Sun, 1 Dec 2013 05:06:21 +0000 (21:06 -0800)]
Merge branch 'features/ab-loop-waveform' into master

4 years agotests: 1030_RubberBandServer: use format "%zu" for size_t
Gabriel M. Beddingfield [Wed, 17 Jul 2013 05:07:25 +0000 (22:07 -0700)]
tests: 1030_RubberBandServer: use format "%zu" for size_t

The format "%zu" is reserved for size_t integers.  Using only "%u"
works OK on 32-bit machines, but yields a compiler warning on 64-bit

    warning: format ‘%u’ expects argument of type ‘unsigned int’, but \
    argument 3 has type ‘size_t {aka long unsigned int}’ [-Wformat]

4 years agobuild: Add test subdirectory /after/ solving dependencies
Gabriel M. Beddingfield [Wed, 17 Jul 2013 04:50:53 +0000 (21:50 -0700)]
build: Add test subdirectory /after/ solving dependencies

If you only invoke 'cmake' once to configure, the tests won't be
properly linked to the RubberBand library.  By moving the
ADD_SUBDIRECTORY() to the end of the file, this works on the first

5 years agoBUGS: Added a feature request for recently used files.
Gabriel M. Beddingfield [Thu, 3 Jan 2013 14:49:36 +0000 (08:49 -0600)]
BUGS: Added a feature request for recently used files.

Thanks to Federico Bruni for the suggestion :-)

5 years agofix tabbing style contrib/smbolton/master
Sean Bolton [Fri, 30 Nov 2012 19:45:03 +0000 (11:45 -0800)]
fix tabbing style

5 years agodon't fail on premature end of MP3 stream
Sean Bolton [Fri, 30 Nov 2012 19:38:50 +0000 (11:38 -0800)]
don't fail on premature end of MP3 stream

5 years agomake position slider easier to grab
Sean Bolton [Tue, 27 Nov 2012 17:33:44 +0000 (09:33 -0800)]
make position slider easier to grab

5 years agorefactor mpg123 code per Gabriel's suggestions
Sean Bolton [Tue, 27 Nov 2012 05:29:52 +0000 (21:29 -0800)]
refactor mpg123 code per Gabriel's suggestions

5 years agofix encoding of filenames (UTF-8 was broken)
Sean Bolton [Tue, 27 Nov 2012 03:12:43 +0000 (19:12 -0800)]
fix encoding of filenames (UTF-8 was broken)

5 years agoSQUASH! Link the qrc resources with executable, not static lib features/ab-loop-waveform
Gabriel M. Beddingfield [Sat, 24 Nov 2012 04:42:22 +0000 (22:42 -0600)]
SQUASH! Link the qrc resources with executable, not static lib

When the program is built, the icons do not appear on the UI.  This
regression was introduced by the build-system changes for the unit
tests.  The object file with the icons was linked into the static
library, which causes them to /not/ be added to the final executable.

Moving the sources (and the link) into the final executable.

5 years agoUse intptr_t when casting pointers to int
Gabriel M. Beddingfield [Sat, 24 Nov 2012 04:40:01 +0000 (22:40 -0600)]
Use intptr_t when casting pointers to int

Some of the alignment tests cast pointers to int, which works fine on
a 32-bit system but causes a compiler error on 64-bit systems.
Switching to use the intptr_t, which is designed for this purpose.

6 years agoChange stretch range to more usable 25%-125%.
Sean Bolton [Mon, 8 Oct 2012 05:01:37 +0000 (22:01 -0700)]
Change stretch range to more usable 25%-125%.

6 years agoAdd MP3 loading support through libmpg123.
Sean Bolton [Mon, 8 Oct 2012 04:27:19 +0000 (21:27 -0700)]
Add MP3 loading support through libmpg123.

7 years agoTests: Add RubberBand time/pitch sanity tests.
Gabriel M. Beddingfield [Thu, 8 Sep 2011 03:21:53 +0000 (22:21 -0500)]
Tests: Add RubberBand time/pitch sanity tests.

7 years agoTests: Add test for RubberBandServer
Gabriel M. Beddingfield [Thu, 8 Sep 2011 02:47:42 +0000 (21:47 -0500)]
Tests: Add test for RubberBandServer

The main tests feeds a sine wave, and tests that the output is mostly
unchanged (pitch and time ratios set to 1.0).  In that case, the e^2
should be less than .001.

7 years agoConfiguration: add more tests.
Gabriel M. Beddingfield [Tue, 9 Aug 2011 03:54:25 +0000 (22:54 -0500)]
Configuration: add more tests.

7 years agoConfiguration: reset the getopt() global variables.
Gabriel M. Beddingfield [Tue, 9 Aug 2011 03:45:41 +0000 (22:45 -0500)]
Configuration: reset the getopt() global variables.

When testing Configuration, the global state variables for getopt()
were not being reset.  Therefore, every other test failed.  By
resetting the variables, the unit tests pass and (potential) future
bugs due to multiple or re-used instances are avoided.

7 years agojack_memops: Fix byte order errors when source is non-native float
Gabriel M. Beddingfield [Tue, 9 Aug 2011 02:51:17 +0000 (21:51 -0500)]
jack_memops: Fix byte order errors when source is non-native float

In the sample_move_*() routines, when the source array is a float with
non-native byte order, the JACK routines treated the source float as
if it had native byte ordering, and then wrote to the output as if it
had non-native byte ordering.  However, the name of the function says
the opposite.

7 years agoTests: start a test for Configuration.
Gabriel M. Beddingfield [Tue, 9 Aug 2011 02:25:13 +0000 (21:25 -0500)]
Tests: start a test for Configuration.

7 years agobams_format: fix internal integer conversions
Gabriel M. Beddingfield [Mon, 8 Aug 2011 04:08:58 +0000 (23:08 -0500)]
bams_format: fix internal integer conversions

When these were being used, they were being passed 0 for count.  This
made the functions a NOP.

7 years agoTests: Complete the tests for bams_format.c
Gabriel M. Beddingfield [Mon, 8 Aug 2011 04:08:35 +0000 (23:08 -0500)]
Tests: Complete the tests for bams_format.c

7 years agoAdd te start of a bams_format test.
Gabriel M. Beddingfield [Sat, 6 Aug 2011 23:25:19 +0000 (18:25 -0500)]
Add te start of a bams_format test.

7 years agoAdd a unit test framework.
Gabriel M. Beddingfield [Sat, 6 Aug 2011 22:27:44 +0000 (17:27 -0500)]
Add a unit test framework.

7 years agoGracefully handle when autoconnect fails.
Gabriel M. Beddingfield [Sat, 6 Aug 2011 21:24:59 +0000 (16:24 -0500)]
Gracefully handle when autoconnect fails.

7 years agoInitialize EngineMessageCallback::_parent to 0.
Gabriel M. Beddingfield [Sat, 6 Aug 2011 21:24:01 +0000 (16:24 -0500)]
Initialize EngineMessageCallback::_parent to 0.

If an exception is thrown, a non-null _parent causes a segfault.

7 years agoWaveforms: Get the waveform to disappear when opening new file.
Gabriel M. Beddingfield [Tue, 2 Aug 2011 17:48:49 +0000 (12:48 -0500)]
Waveforms: Get the waveform to disappear when opening new file.

7 years agoImplement a playhead indicator.
Gabriel M. Beddingfield [Wed, 27 Jul 2011 03:31:04 +0000 (22:31 -0500)]
Implement a playhead indicator.

It currently draws pretty jumpy.

7 years agoWaveform: Reset min/max to previos sample.
Gabriel M. Beddingfield [Tue, 26 Jul 2011 03:10:44 +0000 (22:10 -0500)]
Waveform: Reset min/max to previos sample.

This results in a more realistic looking, digested waveform.

7 years agoWaveform: Give user feedback while editing a/b loop.
Gabriel M. Beddingfield [Tue, 26 Jul 2011 03:02:24 +0000 (22:02 -0500)]
Waveform: Give user feedback while editing a/b loop.

7 years agoWaveform: Commit a hack-ey for the a/b loop to get updated.
Gabriel M. Beddingfield [Tue, 26 Jul 2011 02:52:12 +0000 (21:52 -0500)]
Waveform: Commit a hack-ey for the a/b loop to get updated.

7 years agoWaveform: Set up a faster image creation scheme.
Gabriel M. Beddingfield [Tue, 26 Jul 2011 02:35:06 +0000 (21:35 -0500)]
Waveform: Set up a faster image creation scheme.

7 years agoWaveform: Allow user to edit loop with mouse.
Gabriel M. Beddingfield [Tue, 26 Jul 2011 02:18:24 +0000 (21:18 -0500)]
Waveform: Allow user to edit loop with mouse.

Note this is just the /editing/... the change doesn't make it back to
the engine, yet.

7 years agoAdd shading at the edges of the loop to indicate context.
Gabriel M. Beddingfield [Tue, 19 Jul 2011 17:45:18 +0000 (12:45 -0500)]
Add shading at the edges of the loop to indicate context.

7 years agoCommit a basic waveform view while A/B looping.
Gabriel M. Beddingfield [Tue, 19 Jul 2011 17:30:16 +0000 (12:30 -0500)]
Commit a basic waveform view while A/B looping.

7 years agoJackSession: Symlink data to session folder. features/jack-session
Gabriel M. Beddingfield [Thu, 7 Jul 2011 15:59:07 +0000 (10:59 -0500)]
JackSession: Symlink data to session folder.

Beforehand, we saved a full path to the song file.  However, this
violated the Jack SM protocol... which states that all data needs to
be saved into the session folder for this app.

This now symlinks the data into the session folder.  This conforms to
the "SaveTemplate" behavior, but not the "Save" behavior.  It is done
this way as a work-around for the following reasons:

  - Copying a 35MB .wav file causes us to be disconnected
    from JACK because we time-out during the callback.

  - Handling this correctly requires an asynchronous save,
    which requires more infrastructure adjustments.

  - In some cases, re-saving a session will cause our
    current session data to be deleted... leaving us with
    no data.  Always using symlinks seems to avoid this

7 years agoSave/restore speed and pitch for JackSession.
Gabriel M. Beddingfield [Wed, 6 Jul 2011 12:38:48 +0000 (07:38 -0500)]
Save/restore speed and pitch for JackSession.

7 years agoSave/load loop a/b and position for JackSession.
Gabriel M. Beddingfield [Wed, 6 Jul 2011 12:18:30 +0000 (07:18 -0500)]
Save/load loop a/b and position for JackSession.

7 years agoAdd experimental support for JackSession API.
Gabriel M. Beddingfield [Tue, 5 Jul 2011 15:02:07 +0000 (10:02 -0500)]
Add experimental support for JackSession API.

7 years agoLoop A/B: Start a Waveform widget and hook into UI.
Gabriel M. Beddingfield [Tue, 28 Jun 2011 17:49:22 +0000 (12:49 -0500)]
Loop A/B: Start a Waveform widget and hook into UI.

7 years agoProvide access to raw audio data.
Gabriel M. Beddingfield [Tue, 28 Jun 2011 17:25:44 +0000 (12:25 -0500)]
Provide access to raw audio data.

7 years agoThinSlider: Provide feedback on timeline of A/B looping.
Gabriel M. Beddingfield [Tue, 28 Jun 2011 17:11:46 +0000 (12:11 -0500)]
ThinSlider: Provide feedback on timeline of A/B looping.

7 years agoUpdate the BUGS.txt for some of the lastest fixes.
Gabriel M. Beddingfield [Sun, 26 Jun 2011 22:21:48 +0000 (17:21 -0500)]
Update the BUGS.txt for some of the lastest fixes.

7 years agoBuild: RubberBandServer.cpp was in header list instead of .hpp.
Gabriel M. Beddingfield [Sun, 26 Jun 2011 22:20:46 +0000 (17:20 -0500)]
Build: RubberBandServer.cpp was in header list instead of .hpp.

7 years agoPlayerWidget: make the slider style scalable.
Gabriel M. Beddingfield [Sun, 26 Jun 2011 17:35:35 +0000 (12:35 -0500)]
PlayerWidget: make the slider style scalable.

7 years agoPlayerWidget: Use the 'circle' icon for the slider handles.
Gabriel M. Beddingfield [Sun, 26 Jun 2011 17:09:21 +0000 (12:09 -0500)]
PlayerWidget: Use the 'circle' icon for the slider handles.

7 years agoExported the circle icon to a PNG.
Gabriel M. Beddingfield [Sun, 26 Jun 2011 17:03:41 +0000 (12:03 -0500)]
Exported the circle icon to a PNG.

7 years agoUpdate icons to add a "circle" icon.
Gabriel M. Beddingfield [Sun, 26 Jun 2011 17:03:24 +0000 (12:03 -0500)]
Update icons to add a "circle" icon.

7 years agoImplement a stylesheet for the slider controls.
Gabriel M. Beddingfield [Sun, 26 Jun 2011 16:17:15 +0000 (11:17 -0500)]
Implement a stylesheet for the slider controls.

7 years agoFix a thinko in the driver init code.
Gabriel M. Beddingfield [Sat, 25 Jun 2011 20:21:26 +0000 (15:21 -0500)]
Fix a thinko in the driver init code.

7 years agoCreate drivers using a factory system. drivers/alsa
Gabriel M. Beddingfield [Sat, 25 Jun 2011 17:12:10 +0000 (12:12 -0500)]
Create drivers using a factory system.

7 years agoPlayerWidget: Update the cursor on mousePressEvent().
Gabriel M. Beddingfield [Mon, 13 Sep 2010 17:14:29 +0000 (12:14 -0500)]
PlayerWidget: Update the cursor on mousePressEvent().

When it comes to mouse/cursor interaction, several decisions are made
based on what the current cursor type is.  The assuption is that a
mouseMoveEvent() will always happen before a mousePressEvent().  In a
traditional desktop/mouse environment... this usually holds true.

However, in a touchscreen environment you only get a mouseMoveEvent()
when "clicked."  Thus, you almost always have the wrong cursor and the
window does the wrong thing.  It's not uncommon to get stuck in a
resizing mode.

This commit updates the cursor on every mousePressEvent().

7 years agoConfiguration: Set up a more flexible system for command line options.
Gabriel M. Beddingfield [Mon, 13 Sep 2010 05:10:34 +0000 (00:10 -0500)]
Configuration: Set up a more flexible system for command line options.

Put all command-line options, docs, and default strings into a single
struct that puts the data together.  At run-time, assemble these to
feed to getopt_long().

7 years agoEnable compile-time switches for audio API's.
Gabriel M. Beddingfield [Sat, 25 Jun 2011 16:57:22 +0000 (11:57 -0500)]
Enable compile-time switches for audio API's.

This contains some preprocessor stuff that's fragile... but it works
for now.



7 years agoCreate a pop-up dialog for exceptions.
Gabriel M. Beddingfield [Sun, 12 Sep 2010 07:25:14 +0000 (02:25 -0500)]
Create a pop-up dialog for exceptions.

7 years agoJackAudioSystem: Respect the autoconnect config setting.
Gabriel M. Beddingfield [Sun, 12 Sep 2010 05:43:47 +0000 (00:43 -0500)]
JackAudioSystem: Respect the autoconnect config setting.

7 years agoCompositing: make it a run-time switch.
Gabriel M. Beddingfield [Sat, 25 Jun 2011 16:51:56 +0000 (11:51 -0500)]
Compositing: make it a run-time switch.



7 years agoConfiguration: Add the new -xcC opts to parse loop.
Gabriel M. Beddingfield [Sun, 12 Sep 2010 05:33:56 +0000 (00:33 -0500)]
Configuration: Add the new -xcC opts to parse loop.

7 years agoConfiguration: Add an internal, debugging options checker.
Gabriel M. Beddingfield [Sun, 12 Sep 2010 05:24:18 +0000 (00:24 -0500)]
Configuration: Add an internal, debugging options checker.

Since the options are maintained in about 4 different structures,
I created a little checker to make sure they stay in harmony.

7 years agoConfiguration: Add config variables for autoconnect and compositing.
Gabriel M. Beddingfield [Sun, 12 Sep 2010 05:23:22 +0000 (00:23 -0500)]
Configuration: Add config variables for autoconnect and compositing.

This just establishes the variables... it doesn't actually have
any effect.

7 years agoUse new Configuration object to select drivers, etc.
Gabriel M. Beddingfield [Sat, 25 Jun 2011 16:48:08 +0000 (11:48 -0500)]
Use new Configuration object to select drivers, etc.



7 years agoCreate a Configuration class and get it plugged in.
Gabriel M. Beddingfield [Sat, 11 Sep 2010 21:30:36 +0000 (16:30 -0500)]
Create a Configuration class and get it plugged in.

Note that it doesn't actually affect anything, yet.

7 years agoAlsaAudioSystem: Change default period size from 2048 to 512.
Gabriel M. Beddingfield [Sat, 25 Jun 2011 15:24:32 +0000 (10:24 -0500)]
AlsaAudioSystem: Change default period size from 2048 to 512.

At 2048, the stretcher server starves the audio thread for some
unknown reason.  Changed to 512 to match the process size of the
RubberBand stretch device.

7 years agoAlsaAudioSystem::_convert_to_output_float: Improve performance a little.
Gabriel M. Beddingfield [Sat, 25 Jun 2011 15:23:22 +0000 (10:23 -0500)]
AlsaAudioSystem::_convert_to_output_float: Improve performance a little.

Copy buffer pointers to locals to reduce cache misses.

7 years agoAlsaAudioSystem: Implement the new AudioSystem functions.
Gabriel M. Beddingfield [Sat, 25 Jun 2011 15:02:35 +0000 (10:02 -0500)]
AlsaAudioSystem: Implement the new AudioSystem functions.

Timestamps are just scaffolding, it doesn't actually return a usable

7 years agoMerge branch 'master' into drivers/alsa
Gabriel M. Beddingfield [Sat, 25 Jun 2011 14:42:36 +0000 (09:42 -0500)]
Merge branch 'master' into drivers/alsa


7 years agoAdd DSP load estimate.
Gabriel M. Beddingfield [Sat, 25 Jun 2011 14:39:25 +0000 (09:39 -0500)]
Add DSP load estimate.

7 years agoAlsaAudioSystem: Make audio thread RT, and RT-safe.
Gabriel M. Beddingfield [Sat, 25 Jun 2011 14:05:28 +0000 (09:05 -0500)]
AlsaAudioSystem: Make audio thread RT, and RT-safe.

7 years agojack_memops.h: Remove need for JACK headers.
Gabriel M. Beddingfield [Sat, 25 Jun 2011 01:48:14 +0000 (20:48 -0500)]
jack_memops.h: Remove need for JACK headers.

7 years agoAlsaAudioSystem: Finish out format support.
Gabriel M. Beddingfield [Sat, 25 Jun 2011 01:47:19 +0000 (20:47 -0500)]
AlsaAudioSystem: Finish out format support.

Extra byte-ordering checks for different formats.

7 years agoAlsaAudioSystem: Remove some obsolete debugging code.
Gabriel M. Beddingfield [Fri, 24 Jun 2011 17:58:49 +0000 (12:58 -0500)]
AlsaAudioSystem: Remove some obsolete debugging code.

7 years agoAlsaAudioSystem: Convert asserts() to error handling code.
Gabriel M. Beddingfield [Fri, 24 Jun 2011 17:55:50 +0000 (12:55 -0500)]
AlsaAudioSystem: Convert asserts() to error handling code.

Note that the use of `goto` required several variable declarations to
be placed at the top of the ::init() function.

7 years agoAlsaAudioSystem: Auto-negotiate preferred format.
Gabriel M. Beddingfield [Fri, 24 Jun 2011 17:44:29 +0000 (12:44 -0500)]
AlsaAudioSystem: Auto-negotiate preferred format.

7 years agoHandle 16-bit integer conversions with BAMS library.
Gabriel M. Beddingfield [Fri, 24 Jun 2011 03:45:24 +0000 (22:45 -0500)]
Handle 16-bit integer conversions with BAMS library.

It borrows its implementation from jack's memops.

7 years agoRename memops to recall JACK source file roots.
Gabriel M. Beddingfield [Thu, 23 Jun 2011 17:35:19 +0000 (12:35 -0500)]
Rename memops to recall JACK source file roots.

7 years agoCopy memops from jack sources.
Gabriel M. Beddingfield [Thu, 23 Jun 2011 17:13:41 +0000 (12:13 -0500)]
Copy memops from jack sources.

7 years agoAlsaAudioSystem: Temporarily fix the buffer latency issue.
Gabriel M. Beddingfield [Mon, 20 Jun 2011 17:49:14 +0000 (12:49 -0500)]
AlsaAudioSystem: Temporarily fix the buffer latency issue.

By default ALSA allocates a very large buffer.  This resulted in about
11 to 30 seconds of latency between the application and the actual
audio output.  This is worked around by setting a fixed-size nfrags

7 years agoMerge branch 'features/worker_thread'
Gabriel M. Beddingfield [Fri, 17 Jun 2011 17:17:44 +0000 (12:17 -0500)]
Merge branch 'features/worker_thread'

7 years agoRubberBandServer: Remove RT priority from the worker thread. features/worker_thread
Gabriel M. Beddingfield [Fri, 17 Jun 2011 17:15:29 +0000 (12:15 -0500)]
RubberBandServer: Remove RT priority from the worker thread.

I think this was a mistake.  The code isn't written safely enough for
RT priv.

7 years agoUpdate ChangeLog with latest changes.
Gabriel M. Beddingfield [Fri, 17 Jun 2011 04:23:28 +0000 (23:23 -0500)]
Update ChangeLog with latest changes.

7 years agoMerge branch 'features/worker_thread'
Gabriel M. Beddingfield [Fri, 17 Jun 2011 04:22:41 +0000 (23:22 -0500)]
Merge branch 'features/worker_thread'

7 years agoBump version to 0.504 for development.
Gabriel M. Beddingfield [Fri, 17 Jun 2011 04:22:13 +0000 (23:22 -0500)]
Bump version to 0.504 for development.

7 years agoEngine: Add some documentation in the process() callback.
Gabriel M. Beddingfield [Fri, 17 Jun 2011 03:56:19 +0000 (22:56 -0500)]
Engine: Add some documentation in the process() callback.

7 years agoRubberBandServer: Reformat one block for ledgibility
Gabriel M. Beddingfield [Fri, 17 Jun 2011 03:49:09 +0000 (22:49 -0500)]
RubberBandServer: Reformat one block for ledgibility

7 years agoRearrange worker thread a little to put parameter updates at beginning.
Gabriel M. Beddingfield [Fri, 17 Jun 2011 03:42:40 +0000 (22:42 -0500)]
Rearrange worker thread a little to put parameter updates at beginning.

7 years agoRubberBandServer: Improve the thread safety of resets.
Gabriel M. Beddingfield [Fri, 17 Jun 2011 03:11:58 +0000 (22:11 -0500)]
RubberBandServer: Improve the thread safety of resets.

This was actually causing the loss-of-first-buffer issue.

7 years agoRubberBandServer: Fix initial buffer corruption.
Gabriel M. Beddingfield [Thu, 16 Jun 2011 23:59:05 +0000 (18:59 -0500)]
RubberBandServer: Fix initial buffer corruption.

On playback, the very first set of samples were becoming corrupt
because I was pushing data into the stretcher when I shouldn't be.
Instead of pushing a small amount, call

7 years agoEngine: Handle more segment sizes, and adjust if it changes.
Gabriel M. Beddingfield [Wed, 15 Jun 2011 05:45:43 +0000 (00:45 -0500)]
Engine: Handle more segment sizes, and adjust if it changes.

If the segment size was large (e.g. 4096) then playing would stall.
In addition, large segment sizes were not being handled at all because
of fixed buffer sizes.  This improves some of that.

However, it appears that the first segment or so of input audio is
being truncated.  This is very apparent for the 4096 size
segment... but not so much when <= 512.

7 years agoRubberBandServer: Add CPU load estimator for worker thread.
Gabriel M. Beddingfield [Wed, 15 Jun 2011 03:30:47 +0000 (22:30 -0500)]
RubberBandServer: Add CPU load estimator for worker thread.

7 years agoSet RT scheduling and use a wait condition on worker thread.
Gabriel M. Beddingfield [Wed, 15 Jun 2011 02:45:34 +0000 (21:45 -0500)]
Set RT scheduling and use a wait condition on worker thread.

7 years agoEngine: Remove misc. debugging output.
Gabriel M. Beddingfield [Wed, 15 Jun 2011 02:23:34 +0000 (21:23 -0500)]
Engine: Remove misc. debugging output.

7 years agoEngine: Detect end of song and flush the stretcher buffers
Gabriel M. Beddingfield [Wed, 15 Jun 2011 02:17:39 +0000 (21:17 -0500)]
Engine: Detect end of song and flush the stretcher buffers

Engine was getting stuck at end of song because there was not enough
to pull off for a normal cycle in the middle of the song.

7 years agoMove buffer feed and latency calcs from Engine to RubberBandServer
Gabriel M. Beddingfield [Wed, 15 Jun 2011 01:56:59 +0000 (20:56 -0500)]
Move buffer feed and latency calcs from Engine to RubberBandServer

7 years agoEngine.cpp: Fix _n_feed_segs at 2.
Gabriel M. Beddingfield [Wed, 15 Jun 2011 01:42:58 +0000 (20:42 -0500)]
Engine.cpp: Fix _n_feed_segs at 2.

7 years agoImproved calculation of loop points and actual output pointer.
Gabriel M. Beddingfield [Wed, 15 Jun 2011 01:30:18 +0000 (20:30 -0500)]
Improved calculation of loop points and actual output pointer.

Note that the cached number of buffered segments sometimes runs away
(especially at the end of the song).  However, it's possible that this
number should be fixed at 2 and controlled by the RubberBandServer.

7 years agoAudioSystem: Add interface for frame-based time-stamps.
Gabriel M. Beddingfield [Mon, 13 Jun 2011 03:56:30 +0000 (22:56 -0500)]
AudioSystem: Add interface for frame-based time-stamps.

This is needed to estimate UI input timings.

7 years agoAdd bug about startup error checking.
Gabriel M. Beddingfield [Sat, 23 Apr 2011 18:44:33 +0000 (13:44 -0500)]
Add bug about startup error checking.

Reported by Federico Bruni <>

7 years agoCommit system to track output position.
Gabriel M. Beddingfield [Sat, 23 Apr 2011 18:42:53 +0000 (13:42 -0500)]
Commit system to track output position.