мячин.ком

Pitch Shift. Часть 2. Простейшее решение и его усложнения.

Простейшее решение.

Как решить такую задачу в лоб? Например, сжать время, не изменяя высоту. Очень просто. Разрезаем волну на куски:

Сдвигаем куски:

Получили тоже самое, но проигрываться будет быстрее. Хорошо работает, например, на ритмах, если разрезать по сетке. Но плохо работает на всем остальном, потому что появляются стыки и часть волны просто пропадает бесследно. При растяжении времени же появляется неприятное дублирование звуков:

Гранулярный подход.

Улучшим наше простейшее решение. Избавим его от резких стыков. Для этого нужно не резать волну на прямоугольные куски, а разбивать ее на гранулы, с более плавными переходами. Вот так:

Важное условие к гранулам: сделать так, чтобы после смешивания, амлитуда не исказилась:

Форма гранул.

В остальном, с формой гранул можно поэкспериментировать:

Трапеция и треугольник всё-таки плохие формы, потому что порождают изломы, которые дают искажение (появляются высокие частоты, которых не было в исходном сигнале):

Поэтому иногда лучше использовать гладкие гранулы, например, приподнятый косинус:

мячин.ком