void rate_controller::do_initialize() { stream=sonicCreateStream(sample_rate,1); if(stream==0) throw std::bad_alloc(); sonicSetSpeed(stream,rate); }
// Change the speed. void Java_org_vinuxproject_sonic_Sonic_setSpeedNative( JNIEnv *env, jobject thiz, jlong sonicID, jfloat newSpeed) { sonicStream stream = getInst(sonicID)->stream; LOGV("Set speed to %f", newSpeed); sonicSetSpeed(stream, newSpeed); }
status_t TimestretchBufferProvider::setPlaybackRate(const AudioPlaybackRate &playbackRate) { mPlaybackRate = playbackRate; mFallbackFailErrorShown = false; sonicSetSpeed(mSonicStream, mPlaybackRate.mSpeed); //TODO: pitch is ignored for now //TODO: optimize: if parameters are the same, don't do any extra computation. mAudioPlaybackRateValid = isAudioPlaybackRateValid(mPlaybackRate); return OK; }
speech_stream::speech_stream(int sample_rate,double speed): buffer_size(0.1*sample_rate), start_offset(0), offset(0), sonic_stream(0) { if(speed!=1) { sonic_stream=sonicCreateStream(sample_rate,1); if(!sonic_stream) throw std::bad_alloc(); sonicSetSpeed(sonic_stream,speed); } }
/* Run sonic. */ static void runSonic( waveFile inFile, waveFile outFile, float speed, float pitch, float rate, float volume, int emulateChordPitch, int quality, int sampleRate, int numChannels) { sonicStream stream = sonicCreateStream(sampleRate, numChannels); short inBuffer[BUFFER_SIZE], outBuffer[BUFFER_SIZE]; int samplesRead, samplesWritten; sonicSetSpeed(stream, speed); sonicSetPitch(stream, pitch); sonicSetRate(stream, rate); sonicSetVolume(stream, volume); sonicSetChordPitch(stream, emulateChordPitch); sonicSetQuality(stream, quality); do { samplesRead = readFromWaveFile(inFile, inBuffer, BUFFER_SIZE/numChannels); if(samplesRead == 0) { sonicFlushStream(stream); } else { sonicWriteShortToStream(stream, inBuffer, samplesRead); } do { samplesWritten = sonicReadShortFromStream(stream, outBuffer, BUFFER_SIZE/numChannels); if(samplesWritten > 0) { writeToWaveFile(outFile, outBuffer, samplesWritten); } } while(samplesWritten > 0); } while(samplesRead > 0); sonicDestroyStream(stream); }