Обработка аудио: караоке

Автор задания:
Алексей Лукин

Цель задания

Задание познакомит вас с основами цифровой обработки сигналов и аппаратом кратковременного преобразования Фурье (STFT). В качестве задачи предлагается реализовать эффект караоке, т.е. подавления вокала в музыкальных композициях.

Описание метода

Явное нахождение вокала в полифонической звукозаписи - сложная задача. Поэтому большинство алгоритмов подавляют вокал с помощью различных трюков со стереопанорамой. Как известно, большинство звукозаписей создаются в стереофоническом формате, т.е. содержат левый и правый каналы. Вокал, как правило, панорамируется "в центр" стереозаписи, т.е. записывается поровну в левый и правый каналы. А сопровождающие инструменты для создания стереоэффекта панорамируются под другими углами, т.е. записываются в левый и правый каналы в различных пропорциях. Поэтому методы подавления вокала обычно на самом деле подавляют "центральный канал" в стереозаписи.

Простейший метод

Самый простой метод подавления вокала реализован во многих домашних стереосистемах. Он заключается в вычитании левого и правого стереоканалов. При этом вокал, поровну записанный в двух стереоканалах, уничтожается, а инструменты, панорамированные не в центр, частично остаются. Другими словами, если левый канал был равен сумме вокала и инструментов L(t) = V(t) + I<sub>1</sub>(t), а правый L(t) = V(t) + I<sub>2</sub>(t), то после вычитания останется L(t) - R(t) = I<sub>1</sub>(t) - I<sub>2</sub>(t). Недостаток данного метода в том, что не удается получить стереофоническое инструментальное сопровождение. Также невозможно получить голос, звучащий отдельно от сопровождения.
Пример работы: исходная запись (WAV), результат вычитания (WAV).

Histoire.png  Спектрограмма исходной записи (стерео)

Histoire_simple.png  Спектрограмма результата (моно)

Спектральный метод

Для получения стереофонического инструментального сопровождения можно использовать метод кратковременного преобразования Фурье (STFT). Оба стереоканала раскладываются в частотно-временной спектр X<sub>L</sub>[t,f] и X<sub>R</sub>[t,f]. Идея метода в том, чтобы подавить частотно-временные коэффициенты, значения которых близки в левом и правом стереоканалах. Они предположительно соответствуют вокалу (центральному каналу). Остальные коэффициенты, предположительно соответствующие стереофоническому сопровождению, не изменяются. После такой модификации коэффициентов производится синтез звука из частотно-временных коэффициентов.
Для выполнения частотно-временного разложения рекомендуется использовать кратковременное преобразование Фурье с весовым окном Ханна вида 1+cos(x). Длина окна может быть параметром алгоритма, и ее рекомендуется брать в районе 50-100 ms (2048 или 4096 отсчетов при частоте дискретизации 44.1 кГц). Степень перекрытия окон во времени рекомендуется положить равной 75%.
Синтез осуществляется с помощью обратного преобразования Фурье с наложением окон. Используется такое же весовое окно, как при разложении.
Подавление комплексных частотно-временных коэффициентов можно проводить по критерию их относительной похожести в левом и правом каналах. Например, можно сравнивать модуль разности коэффициентов с суммой их модулей: D[t,f] = |X<sub>L</sub>[t,f] - X<sub>R</sub>[t,f]| / (|X<sub>L</sub>[t,f]|+|X<sub>R</sub>[t,f]|). Если полученная разница меньше некоторого порога, то соответствующие коэффициенты левого и правого каналов обнуляются.
Можно также использовать более плавную схему управления: подавлять коэффициенты не полностью, а лишь частично, в зависимости от их относительной разницы.
Пример работы: результат (WAV) (получен усложненным спектральным методом, с использованием алгоритма multi-resolution, описанного в диссертации автора).

Histoire_advanced.png  Спектрограмма результата (стерео)

Требования к программе

Программа должна быть консольным приложением, допускающим указание параметров: имени входного WAV-файла, выходного WAV-файла и опций алгоритма. Опция "-1" включает простейший алгоритм, "-2" - спектральный алгоритм. Возможно предоставление дополнительных настроек. Пример: karaoke.exe input.wav output.wav -2
Достаточно ограничиться поддержкой WAV-файлов в формате 44.1 кГц, 16 бит, стерео.
Можно полагать, что все данные поместятся в оперативной памяти - размер файлов будет небольшим (порядка десяти секунд).
Для вычисления FFT можно воспользоваться стандартным кодом из материалов (или, при желании, любым другим).

Материалы

Оценка

Простейший метод (вычитание стереоканалов) 4 балла
Спектральный метод с жестким порогом +8 баллов
Спектральный метод с мягким порогом (+ документация) +3 балла

© Лаборатория компьютерной графики при ВМиК МГУ