How are you currently using SoundTouch? Do you pass audio samples to the SoundTouch library as you read them? Or do you spawn the soundstretch utility and pass the audio as a file or though a pipe?
I'm not familiar with SoundTouch, but it looks like it wants PCM audio as input, so you're probably already converting to PCM. If you wanted to pass samples of audio to SoundTouch as you receive them, you could decode with FAAC using something like this
#include <stdio.h>
#include <inttypes.h>
#include <faac.h>
#include <neaacdec.h>
#define SAMPLE_SIZE 2 //2 bytes, or 16bits per samle.
int AACDecode(uint8_t *aacData, size_t aacBytes, uint32_t sampleRate, unsigned char channels)
{
NeAACDecHandle decoder = NeAACDecOpen();
NeAACDecConfigurationPtr config = NeAACDecGetCurrentConfiguration(decoder);
NeAACDecFrameInfo info;
uint8_t *decoded = NULL;
uint8_t *readPtr = aacData;
int consumed = 0;
//If the AAC data is wrapped in ADTS, you don't need the next 2 lines
//If it's not wrapped in ADTS, you need to know sampleRate, and object type
//Object type is one of LOW, MAIN, SSR, LTP
config->defObjectType = LOW;
config->defSampleRate = sampleRate;
//If SoundTouch wants it in something other than siged 16bit LE PCM, change this
config->outputFormat = FAAD_FMT_16BIT;
if (!NeAACDecSetConfiguration(decoder, config))
{
printf("unable to set config\n");
return 0;
}
if (NeAACDecInit(decoder, (unsigned char *)aacData, aacBytes, &sampleRate, &channels) < 0)
{
printf("unable to init\n");
return 0;
}
do
{
decoded = (char *)NeAACDecDecode(decoder, &info, readPtr, aacBytes);
if (info.samples > 0)
{
size_t decodedBytes = (size_t)info.samples * SAMPLE_SIZE;
//Pass <decodedBytes> of PCM data, pointed to by <decoded> to soundTouch
}
consumed += info.bytesconsumed;
readPtr += info.bytesconsumed;
} while (info.error == 0 && consumed < aacBytes);
NeAACDecClose(decoder);
return 1;
}
You'd need to link against the FAAD library
Or if you're going the command-line route, maybe something like this:
ffmpeg -i <input_file> raw.wav
raw.wav could then be passed to soundstretch