void rate_controller::do_initialize() { stream=sonicCreateStream(sample_rate,1); if(stream==0) throw std::bad_alloc(); sonicSetSpeed(stream,rate); }
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); }
TimestretchBufferProvider::TimestretchBufferProvider(int32_t channelCount, audio_format_t format, uint32_t sampleRate, const AudioPlaybackRate &playbackRate) : mChannelCount(channelCount), mFormat(format), mSampleRate(sampleRate), mFrameSize(channelCount * audio_bytes_per_sample(format)), mLocalBufferFrameCount(0), mLocalBufferData(NULL), mRemaining(0), mSonicStream(sonicCreateStream(sampleRate, mChannelCount)), mFallbackFailErrorShown(false), mAudioPlaybackRateValid(false) { LOG_ALWAYS_FATAL_IF(mSonicStream == NULL, "TimestretchBufferProvider can't allocate Sonic stream"); setPlaybackRate(playbackRate); ALOGV("TimestretchBufferProvider(%p)(%u, %#x, %u %f %f %d %d)", this, channelCount, format, sampleRate, playbackRate.mSpeed, playbackRate.mPitch, playbackRate.mStretchMode, playbackRate.mFallbackMode); mBuffer.frameCount = 0; }
/* Initialize the C data structure */ jlong Java_org_vinuxproject_sonic_Sonic_initNative( JNIEnv *env, jobject thiz, jint sampleRate, jint channels) { sonicInst inst = (sonicInst)calloc(1, sizeof(struct sonicInstStruct)); if(inst == NULL) { return 0; } LOGV("Creating sonic stream"); inst->stream = sonicCreateStream(sampleRate, channels); if(inst->stream == NULL) { return 0; } inst->byteBufSize = 100; inst->byteBuf = (short *)calloc(inst->byteBufSize, sizeof(short)); if(inst->byteBuf == NULL) { return 0; } return (jlong)((char *)inst - (char *)NULL); }