4 years agoWaveform: manage reference to AudioReferenceData with a smart pointer features/large-files
Gabriel M. Beddingfield [Mon, 15 Jul 2013 00:27:45 +0000 (17:27 -0700)]
Waveform: manage reference to AudioReferenceData with a smart pointer

Beforehand, Waveform was managing the pointer manually.  As a result,
it was not being deleted (leaking) with the Waveform was destroyed.
This patch now manages the pointer with an auto_ptr.

This also adds some documentation about how the transfer of ownership
is being handled.

4 years agoConsolidate all usages of smart pointers to the smart_ptr.hpp implementation
Gabriel M. Beddingfield [Sun, 14 Jul 2013 23:33:23 +0000 (16:33 -0700)]
Consolidate all usages of smart pointers to the smart_ptr.hpp implementation

4 years agoAudioReferenceData: New API for non-RT access to audio data
Gabriel M. Beddingfield [Sun, 14 Jul 2013 22:48:20 +0000 (15:48 -0700)]
AudioReferenceData: New API for non-RT access to audio data

This is a new API for accessing audio data from a non-RT thread that
is able to accomodate systems that don't have all the audio data in

4 years agoEngine: refactor to use AudioSource instead of managing it in the class
Gabriel M. Beddingfield [Sat, 13 Jul 2013 23:30:21 +0000 (19:30 -0400)]
Engine: refactor to use AudioSource instead of managing it in the class

Engine was managing file opening, reading, and data management for itself.
The code is refactored to use an AudioSource object for this task.

4 years agoFileMemoryAudioSource: Send message to stdout when file fails to load.
Gabriel M. Beddingfield [Sat, 13 Jul 2013 22:57:24 +0000 (18:57 -0400)]
FileMemoryAudioSource: Send message to stdout when file fails to load.

4 years agoAudioSource: Add (temporary) method get_audio_range()
Gabriel M. Beddingfield [Sat, 13 Jul 2013 22:55:59 +0000 (18:55 -0400)]
AudioSource: Add (temporary) method get_audio_range()

In order to support waveform images in the GUI, the GUI must have some
sort of low-level access to the raw audio data.  The current solution
is architectured to presume that the data is always in memeory and we
need only provide a pointer to that section of memory.  However, this
interface doesn't work at all when you want to /not/ do the
all-in-memory model.  Rearchitecturing this on the engine side as well
as the client side is pretty invasive.  Thus, this mothod is added to
factilitate refactoring, but the method is intended to be removed.

4 years agoAudioSource: Add doc on the return value.
Gabriel M. Beddingfield [Sat, 13 Jul 2013 22:47:25 +0000 (18:47 -0400)]
AudioSource: Add doc on the return value.

4 years agoAudioSource: create a cue point interface
Gabriel M. Beddingfield [Wed, 10 Jul 2013 21:32:52 +0000 (14:32 -0700)]
AudioSource: create a cue point interface

Setting up a system to declare points that need to be immediately
seekable.  This is needed, for instance, to implement an A/B loop

5 years agoTests: Update printf() format for 64-bit size_t
Gabriel M. Beddingfield [Tue, 26 Mar 2013 04:02:12 +0000 (21:02 -0700)]
Tests: Update printf() format for 64-bit size_t

This applies to the RubberBandServer tests.

5 years agoAudioSource: Create abstract way to access file data
Gabriel M. Beddingfield [Mon, 25 Mar 2013 05:17:51 +0000 (22:17 -0700)]
AudioSource: Create abstract way to access file data

This introduces the classes AudioSource and FileMemoryAudioSource (and
related tests).  These are not yet used by StretchPlayer, but are
added in order to refactor the way that the audio data is accessed.
The end goal is to be able to have an implementation that does not
need to load all of the audio data into memory.

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 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.

6 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.

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

6 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.

6 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.

6 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.

6 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.

6 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

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

7 years agoImprove thread safety of A/B repeat.
Gabriel M. Beddingfield [Mon, 7 Feb 2011 04:32:00 +0000 (22:32 -0600)]
Improve thread safety of A/B repeat.

Instead of changing variables on the fly, increment an atomic integer
to be processed in the normal process() callback.

7 years agoThrottle the feed to the stretcher.
Gabriel M. Beddingfield [Mon, 17 Jan 2011 22:42:15 +0000 (16:42 -0600)]
Throttle the feed to the stretcher.

Keep the buffers of the stretcher between 512 and 1024 frames.  First
step to tracking latency.

Known issue:  Audio will stutter at the beginning of the song.

7 years agoAdd documentation on frame position synchronization.
Gabriel M. Beddingfield [Sun, 16 Jan 2011 08:26:20 +0000 (02:26 -0600)]
Add documentation on frame position synchronization.

7 years agoAllow for non-aligned buffers when applying gain.
Gabriel M. Beddingfield [Sat, 15 Jan 2011 02:07:02 +0000 (20:07 -0600)]
Allow for non-aligned buffers when applying gain.

7 years agoMerge remote branch 'master' into features/worker_thread
Gabriel M. Beddingfield [Thu, 13 Jan 2011 02:15:31 +0000 (20:15 -0600)]
Merge remote branch 'master' into features/worker_thread


7 years agoFix ALSA driver so that we always proce 2^N frames at a time.
Gabriel M. Beddingfield [Sun, 12 Sep 2010 04:52:08 +0000 (23:52 -0500)]
Fix ALSA driver so that we always proce 2^N frames at a time.

7 years agoPlug ALSA implementation into the Engine.
Gabriel M. Beddingfield [Thu, 9 Sep 2010 04:04:31 +0000 (23:04 -0500)]
Plug ALSA implementation into the Engine.

7 years agoCommit a /mostly/ working ALSA driver.
Gabriel M. Beddingfield [Thu, 9 Sep 2010 04:04:16 +0000 (23:04 -0500)]
Commit a /mostly/ working ALSA driver.

It doesn't deliver buffers the way I expect.  E.g. when requesting
interrupts every 2048 frmaes, I don't always get 2048 (or more)
frames.  I'll often get 1900 frames.