Non-realtime audio editing


#1

How do I edit the audio data stored in a AudioFormatReaderSource I know how to do it in real time, but i need a non-real time aproach.

I tried loading the complete audio data in a buffer but then I don't know how to play it. 


#2

 

Try using an AudioProcessor instead.  Give it an AudioSampleBuffer, then ...

 

load with something like this .....

     

    // Create a reader
    AudioFormatManager formatManager;
    formatManager.registerBasicFormats();

    

    // scoped pointer wont delete properly on windows ....
    ScopedPointer<AudioFormatReader> reader (formatManager.createReaderFor(myFile));
 
    

    // READ the File
    int lengthToRead = reader->lengthInSamples;
    jassert(lengthToRead != 0);

  
    sampleBuffer->setSize(2, lengthToRead, true, true, true); // set the size appropriately
 
    // READ THE FILE to the BUFFER 
    reader->input->setPosition(0);
    reader->read(sampleBuffer, 0, lengthToRead, 0, true, true);
}

 

To play it .... simply copy it ito the buffer in the processBlock() method .....



 for (short chan=0; chan < buffer->getNumChannels(); chan++)
        buffer->addFrom(chan, 0, sampleBuffer->getReadPointer(chan%2, playPos), numSamples);

 playPos = (playPos + numSamples)%sampleBuffer->getnumSamples();

 

Obviously, you can then edit the sampleBuffer any way you like (either within the processblock, or not).

 

 

 


#3

Thanks! for the reply but if I make it this way I cannot use a transport source to change the sample rate, is there any simple solution?