Как вы в настоящее время используете SoundTouch? Вы передаете аудиосэмплы в библиотеку SoundTouch во время их чтения? Или вы запускаете утилиту soundstretch и передаете аудио как файл или через канал?
Я не знаком со SoundTouch, но похоже, что в качестве входного сигнала требуется звук PCM, так что вы, вероятно, уже конвертируете в PCM. Если вы хотите передавать образцы звука в SoundTouch по мере их получения, вы можете декодировать их с помощью FAAC, используя что-то вроде этого
#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;
}
Вам нужно создать ссылку на библиотеку FAAD
Или, если вы идете по маршруту командной строки, может быть что-то вроде этого:
ffmpeg -i <input_file> raw.wav
raw.wav затем может быть передан в soundstretch