Библиотека SoundTouch испортила окончание при изменении высоты тона

Я использую библиотеку SoundTouch для изменения высоты звука некоторых аудиофайлов. Все работает хорошо, за исключением того, что последние несколько сотен миллисекунд нового аудиофайла не похожи на оригинальный файл. Вот оригинальный файл: введите описание изображения здесь

И вот что я получаю после изменения высоты тона:
введите описание изображения здесь

Как видите, концовка не правильная. Как будто там ничего не было в оригинальном файле, когда оно есть.

Вот код, который я использую:

int generateFile(WavInFile *file, SoundTouch *st, string fileName, int semitones)
{
const bool speech = true;

SAMPLETYPE samples[BUFF_SIZE];

WavOutFile *out = new WavOutFile(fileName.c_str(), (int)file->getSampleRate(), (int)file->getNumBits(), (int)file->getNumChannels());

int nChannels = (int)file->getNumChannels();

assert(nChannels > 0);

int num, nSamples;
int buffSizeSamples = BUFF_SIZE / nChannels;

st->setSampleRate((int)file->getSampleRate());
st->setChannels(nChannels);
st->setPitchSemiTones(semitones);

if (!speech)
{
st->setSetting(SETTING_USE_QUICKSEEK, 0);
st->setSetting(SETTING_USE_AA_FILTER, 0);
}
else
{
st->setSetting(SETTING_USE_QUICKSEEK, 0);
st->setSetting(SETTING_SEQUENCE_MS, 40);
st->setSetting(SETTING_SEEKWINDOW_MS, 15);
st->setSetting(SETTING_OVERLAP_MS, 8);
}while (file->eof() == 0)
{
num = file->read(samples, BUFF_SIZE);

nSamples = num / (int)file->getNumChannels();

st->putSamples(samples, nSamples);

do
{
nSamples = st->receiveSamples(samples, buffSizeSamples);
out->write(samples, nSamples * nChannels);
} while (nSamples != 0);
}st->flush();

do
{
nSamples = st->receiveSamples(samples, buffSizeSamples);
out->write(samples, nSamples * nChannels);
} while (nSamples != 0);

delete out;

return 0;

}

И да, я удаляю файл WavInFile * позже в моем коде. Поэтому мой вопрос: почему SoundTouch делает это и как я могу это исправить?

Также я не могу просто вырезать неправильную часть нового аудиофайла, потому что таким образом я создаю сотни файлов, поэтому вырезать каждый из них будет …

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]