-Audio being pitch-shifted, algorithm needs tuning to keep pitch steady.

main
Harry van Haaren 2013-05-17 11:01:56 +01:00
parent b45f635a12
commit 163a4b7a28
3 changed files with 20 additions and 8 deletions

View File

@ -24,8 +24,6 @@ static void gmastertrack_button_callback(Fl_Widget *w, void *data) {
if ( data ) if ( data )
track = *(int*)data; track = *(int*)data;
cout << "Button " << track << " " << w->label() << " clicked" << endl;
if ( strcmp( w->label(), "Metro" ) == 0 ) if ( strcmp( w->label(), "Metro" ) == 0 )
{ {
Avtk::Button* b = (Avtk::Button*)w; Avtk::Button* b = (Avtk::Button*)w;

View File

@ -29,7 +29,7 @@ Gui::Gui() :
{ {
window.color(FL_BLACK); window.color(FL_BLACK);
window.label("Luppp 5"); window.label("Luppp 5");
window.callback( close_cb, 0 ); //window.callback( close_cb, 0 );
Avtk::Image* header = new Avtk::Image(0,0,600,36,"header.png"); Avtk::Image* header = new Avtk::Image(0,0,600,36,"header.png");

View File

@ -61,19 +61,37 @@ void Looper::process(int nframes, Buffers* buffers)
float* in = buffers->audio[Buffers::MASTER_INPUT]; float* in = buffers->audio[Buffers::MASTER_INPUT];
float* out = buffers->audio[Buffers::MASTER_OUTPUT]; float* out = buffers->audio[Buffers::MASTER_OUTPUT];
float playbackSpeed = endPoint / ( float(numBeats) * fpb );
// invert the change due to speed, and pitch-shift it back to normal :D
float deltaPitch = 12 * log ( playbackSpeed ) / log (2);
semitoneShift = -deltaPitch;
if (track == 0)
{
// log pitch-shift rates
char buffer [50];
sprintf (buffer, "Looper, pbs=%f, dP=%f", playbackSpeed, deltaPitch );
EventGuiPrint e( buffer );
writeToGuiRingbuffer( &e );
}
if ( state == STATE_PLAYING ) if ( state == STATE_PLAYING )
{ {
for(int i = 0; i < nframes; i++) for(int i = 0; i < nframes; i++)
{ {
if ( playPoint < endPoint ) if ( playPoint < endPoint )
{ {
tmpBuffer[i] += sample[playPoint]; tmpBuffer[i] = sample[playPoint];
} }
// always update playPoint, even when not playing sound. // always update playPoint, even when not playing sound.
// it updates the UI of progress // it updates the UI of progress
playPoint++; playPoint++;
} }
// not pitch-shift the audio in the buffer
pitchShift( nframes, &tmpBuffer[0], out);
float prog = (float(playPoint) / (fpb*numBeats)); float prog = (float(playPoint) / (fpb*numBeats));
/* /*
@ -96,10 +114,6 @@ void Looper::process(int nframes, Buffers* buffers)
} }
} }
// not pitch-shift the audio in the buffer
pitchShift( nframes, &tmpBuffer[0], out);
} }