Изменение длительности и высоты звучания Алексей Лукин Задача Требуется изменить длительности звучания или высоту звучания независимо друг друга Простой подход: ► (аналоговый) запишем на ленту и изменим скорость прокрутки ленты ► (цифровой) сменим частоту дискретизации (resampling) Увы: высота и длительность меняются синхронно! Celine Dion 2/19 Ускорение на 20% Задача Независимое изменение высоты и длительности, с сохранением достоверности звучания Приложения: ► Сэмплеры и виртуальные инструменты ► Подстройка скорости фильмов под ТВ ► Караоке: смена тональности ► «Звуковой микроскоп» в обучении музыке 3/19 Временная область Методы временной области работают с волной 1. Разбиваем сигнал на короткие гранулы (окна) 2. Повторяем или выкидываем (или сдвигаем) гранулы для изменения длительности 3. Передискретизация для изменения высоты Некоторые картинки взяты из диссертации J. Bonada 4/19 Временная область Методы временной области работают с волной 1. Разбиваем сигнал на короткие гранулы (окна) 2. Повторяем или выкидываем (или сдвигаем) гранулы для изменения длительности 3. Передискретизация для изменения высоты Проблемы: ► Гранулы могут складываться в фазе (хорошо) или в противофазе (плохо) ► Транзиенты могут исчезать или дублироваться Guitar+castanets 5/19 Замедление до 220% длины Временная область Решение: ► Выбор размера гранул кратным основному тону, тогда они сложатся в фазе (требуется вычисление автокорреляции или анализ высоты осн. тона) ► Запрет дублирования или выкидывания гранул с транзиентами (требуется поиск транзиентов и аккуратный план изменения гранул) Фиксированный размер гранул Pitch-synchronous granule size (“PSOLA”) Pitch-synchronous granule size, transients detection 6/19 Временная область Pitch-synchronous overlap-add (PSOLA) ► Размер гранул – 2 периода осн. тона ► Гранулы повторяются или откидываются ► Нестабильные результаты для нетонального или полифонического материала 7/19 Временная область + – Выводы ► Высокая скорость (1…5% CPU) ► Хорошее качество для сольных инструментов и вокала ► Плохое качество для нетонального или полифонического материала: Амплитудная модуляция (когда тона складываются не в фазе) Повторяемые или теряемые транзиенты (если только их явно не обработали) Реализации ► Редакторы, сэмплеры: Audition, Cubase , Logic, Ableton, ACID ► Коректоры вокала: Melodyne, Autotune 8/19 Вокодеры 9/19 Методы частотной области работают с оконным спектром сигнала Идея: построить спектрограмму (используя STFT) и ресинтезировать звук с отличающимся шагом по времени (synthesis hop) Проблема: при синтезе гранулы сигнала могут складываться не в фазе Решение: изменение фазы на каждой частоте («разворачивание фазы») Вокодеры Традиционный алгоритм: 1. Вычислить STFT от сигнала 2. Развернуть фазы для каждого частотного канала (чтобы скомпенсировать изменение шага синтеза), не изменять амплитуды 3. Синтезировать сигнал обратным STFT с другим шагом по времени 10/19 Вокодеры Амплитуды не изменяются Y (t su , k ) X (t au , k ) Формулы для разворачивания фаз обеспечивают сложение в фазе для кажой базисной функции STFT («горизонтальая фазовая когерентность») uk X (t au , k ) X (t au 1 , k ) Ra k ̂ (t au ) k 1 p uk Ra Y (t su , k ) Y (t su 1 , k ) Rsˆ k (t au ) 11/19 (инкремент фазы) (разворачивание фазы) (фаза для синтеза) Вокодеры Проблема фазовой когерентности ► Горизонтальная когерентность обеспечивается разворачиванием фаз ► Как насчет вертикальной когерентности? (согласованность фаз в соседних частотных каналах) Она пропадает! (за исключением случая целочисленного растяжения) Это порождает: “Phasiness” из-за сложения не в фазе базисных функций, принадлежащих одному тону исходного сигнала Размытие транзмиентов на всю гранулу Guitar+castanets 12/19 Vocoder 220% length Вокодеры Улучшение вертикальной фазовой когерентности: алгоритм «фазовой блокировки» фиксирует фазовые соотношения в пределах каждого спектрального пика 1. Делим спектр на частотные интервалы, соответствующие пикам 2. Разворачиваем фазу центрального (пикового) канала 3. Разворачиваем фазы окружающих каналов согласно центральному Это уменьшает «фазовость», но не спасает от размытия транзиентов Без фазовой блокировки 13/19 С блокировкой Вокодеры Как предотвратить размытие транзиентов? ► Частотное разрешение слуха неравномерно: оно лучше на низких и хуже на высоких частотах ► Можно использовать длинные окна на НЧ (для лучшего частотного разрешения) и короткие окна на ВЧ С фазовой блокировкой С блокировкой и разными размерами окон 14/19 “Time-scale and pitch modification algorithms” Вокодеры Как предотвратить размытие транзиентов? ► Можно перенести транзиенты в результирующий сигнал без растяжения (и модификации фаз) ► Разворачивание фаз гармоник сквозь транзиенты Phase locking and multiple window sizes + transients pasted 15/19 “Time-scale and pitch modification algorithms” Вокодеры + – Выводы ► Хорошее качество для сложных, полифонических звуков ► Некоторая «фазовость» (даже с фазовой блокировкой) ► Размытие транзиентов (если их не обрабатывать) ► Шумовые сигналы могут звучать неестественно ► Высокая сложность (но быстрее реального времени) Реализации ► Специализированные программы: SlowGold, Serato Time’n’Pitch, iZotope Radius 16/19 “Time-scale and pitch modification algorithms”