-Debugging looper progress, algorithm not working right yet

main
Harry van Haaren 2013-05-16 16:14:14 +01:00
parent a55800115e
commit c7dac28706
2 changed files with 28 additions and 9 deletions

View File

@ -28,15 +28,21 @@ void Looper::process(int nframes, Buffers* buffers)
{
if ( playPoint < endPoint )
{
out[i] += sample[playPoint++];
out[i] += sample[playPoint];
}
// always update playPoint, even when not playing sound.
// it updates the UI of progress
playPoint++;
}
EventLooperProgress e(track, float(playPoint) / endPoint );
float prog = (float(playPoint) / fpb * numBeats);
if ( track == 0 )
cout << prog << " fpb*numBeats " << fpb * numBeats << endl;
EventLooperProgress e(track, prog );
writeToGuiRingbuffer( &e );
}
else if ( state == STATE_RECORDING )
else if ( state == STATE_RECORDING || stopRecordOnBar )
{
for(int i = 0; i < nframes; i++)
{
@ -51,12 +57,11 @@ void Looper::process(int nframes, Buffers* buffers)
void Looper::bar()
{
// only reset if we're on the last beat of a loop
if ( playedBeats >= numBeats )
stopRecordOnBar = false;
if ( state == STATE_RECORDING )
{
//cout << "Looper " << track << " restting to 0 " << endl;
playPoint = 0;
playedBeats = 0;
stopRecordOnBar = true;
}
if ( state == STATE_PLAY_QUEUED )
@ -87,6 +92,18 @@ void Looper::bar()
}
}
void Looper::beat()
{
playedBeats++; // only reset if we're on the last beat of a loop
if ( playedBeats >= numBeats )
{
//cout << "Looper " << track << " restting to 0 " << endl;
playPoint = 0;
playedBeats = 0;
}
}
void Looper::setLoopLength(float l)
{
numBeats *= l;

View File

@ -26,14 +26,15 @@ class Looper : public Observer // for notifications
state(STATE_STOPPED),
numBeats (4),
playedBeats(0),
stopRecordOnBar(false),
endPoint (0),
playPoint (0),
lastWrittenSampleIndex(0)
{}
void bar();
void beat();
void beat() { playedBeats++; }
void setFpb(int f) { fpb = f; }
void setState(State s);
@ -48,6 +49,7 @@ class Looper : public Observer // for notifications
int fpb;
int numBeats;
int playedBeats;
bool stopRecordOnBar;
int endPoint, playPoint, lastWrittenSampleIndex;
float sample[44100*60];