Пример #1
0
 void rate_controller::do_initialize()
 {
   stream=sonicCreateStream(sample_rate,1);
   if(stream==0)
     throw std::bad_alloc();
   sonicSetSpeed(stream,rate);
 }
Пример #2
0
// 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;
}
Пример #4
0
 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);
     }
 }
Пример #5
0
/* 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);
}