Продолжаем сдвигать высоту и менять темп. Напомню, что мы описали задачу и выбрали
не лучший, но самый простой метод ее решения. В этой статье мы рассмотрим еще одно
усовершенствование этого метода.
Разделение на частоты.
Поговорим теперь про размер гранул. Допустим, мы растягиваем время. Вот так,
алгоритмы с разными размерами гранул будут растягивать импульс:
Если же мы подадим на вход этим алгоритмам непродолжительный звук с некоторой высотой,
то увидим, что для данной высоты есть некоторый оптимальный размер гранулы.
Слишком маленькие гранулы будут изменять и высоту, а слишком большие гранулы скопируют
детали более крупного масштаба:
Проблема в том, что разным диапазонам частот соответствуют разные оптимальные размеры гранул.
Поэтому имеет смысл разбиение на частоты и вот такое усовершенствование алгоритма:
Кратномасштабный подход.
Человеческое ухо слышит логарифмически: разница воспринимаемой человеком высоты
между звуками с частотами 100 и 120 Гц примерно такая же, как и между 1000 и 1200 Гц.
Существует разбиение всех частот на диапазоны, которое принято называть
пирамидальным. Оно очень хорошо сочетается с устройством человеческого слуха:
диапазоны частот получаются одинаковой логарифмической ширины, а значит одинаково значимы для
человеческого уха. С другой стороны, такой подход удобен, поскольку размеры гранул
нужно определить только для одной полосы. Переход на другую полосу - это просто
масштабирование.
На его основе получаем следующую схему для алгоритма:
Пирамидальные разбиения часто используются в субполосном кодировании. Для реализации
этого разбиения можно создать собственный банк фильтров или воспользоваться существующими
алгоритмами из теории субполосного кодирования. Например, пирамидой Лапласа.
Источник: http://myachin.com/pitch_03.htm |