void AudioStretcher::write( AudioFrame* frame ) { int readFrames = frame->size / (audio.channels*2); //convert s16 to float for( int i=0; i < readFrames; i++ ) for( int c=0; c<audio.channels; c++ ) buffer[c][i] = frame->data[i*audio.channels+c] / 32768.f; rubberband->process( buffer, readFrames, false ); if( !audioOutput.empty() ) { int actualFrames = rubberband->retrieve( buffer, audio.frequency ); AudioFrame* frame = new AudioFrame( actualFrames * (2*audio.channels) ); //convert float to s16 for( int i=0; i<actualFrames; i++ ) for( int c=0; c<audio.channels; c++ ) frame->data[i*audio.channels+c] = buffer[c][i] * 32768.f; foreach( AudioOutput* output, audioOutput ) output->write( frame->copy() ); frame->free(); } frame->free(); }