Восстанавливаем старые записи


Не так давно на Хабре проскакивала новость о том, что учёным удалось восстановить одну из очень старых записей, сделанную ещё в 1905 году, не повредив при этом носитель. Основным достижением тут является как раз факт целостности носителя, так как запись сделана была не абы на чём, а на восковом цилиндре. Это чуть ли не самый первый изобретённый способ записи\воспроизведения звука, который широко использовался. До этого носителем были стеклянные цилиндры с сажей (воспроизводить их правда не умели), затем покрытием стала фольга и лишь потом воск.

Я, разумеется, заинтересовался таким-то раритетом и решил послушать как там люди вообще жили-то, в далёком 1905-ом...К моему удивлению, оригинальная запись оказалась достаточно шумной, хоть и утверждалось, что она была обработана различными шумоподавляющими алгоритмами и т.д... Стоит отметить, конечно, что по сравнению с другими восстановленными с восковых цилиндров записями, эта действительно была весьма хороша - по качеству уже вполне сопоставимо с первыми пластинками. Однако, как известно, лучшее - враг хорошего.

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

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

Тут мы сталкиваемся с особенностями материала и самого способа воспроизведения.

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

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

Для начала включим спектральное представление сигнала и возьмёмся за эквалайзер (а эквалайзер это ведь наше всё).



Что мы видим на спектрограмме? Частота дискретизации файла у нас аж 22000 кГц, при этом никаких звуков в записи, как мы видим, нет выше 4.5 кГц, чего и следовало ожидать (см. факт номер раз). Однако, если присмотреться повнимательнее, какая-то грязь всё-таки просачивается выше (чтобы лучше было видно, повысил контрастность и яркость в квадрате, обведённым красным). Откуда оно берётся непонятно, но не вдаваясь в детали мы первым же делом можем с чистой совестью порзать всё выше т.н. "частоты Найквиста" для нашей частоты дискретизации (11 кГц). Так как запас там ещё приличный, я не стал мелочиться и убрал всё выше 8 кГц, а также ниже 100 Гц, так как там, судя по спектрограмме, тоже ничего дельного не было.

Немного поразмыслив, я подошёл к этому моменту ещё более радикально, а именно - не стал морозится с эквалайзером, а начал всё с начала и сразу изменил частоту дискретизации файла до 11 кГц.

Далее, не мудрствуя лукаво, воспользуемся инструментом, который есть во многих современных аудио-редакторах: Noise Reduction. Идея проста - выделяем место в треке, где у нас нет ничего кроме шумов. Далее создаём паттерн этих шумов (Capture Profile). В простейшем случае вам будет достаточно одного единственного ползунка Noise Reduction Level.

О том, для чего нужны все остальные параметры, можно узнать, например, вот из этого видео: Интересный видос с сайта Adobe. На английском.

Он там, правда, говорит, что у них, якобы движок обновился (речь о версии CS5.5) и они теперь умеют не создавать лишних артефактов при шумоподавлении, но, мы-то с вами знаем, что разница практически отсутствует. И настройки все те же, разве что окошко в новой версии перерисовали.

Есть ещё некоторые нюансы которые этот харизматичный мужик в видео не затрагивает, например "ширина окна" для преобразования Фурье (FFT Size).

Ширина окна влияет на частотное и временное разрешение сигнала — при увеличении ширины окна повышается частотное разрешение, но уменьшается временное разрешение и увеличиваются вычислительные затраты на выполнение быстрого преобразования Фурье.

Если не вдаваться в подробности, при избавлении от случайных (это важно) шумов, следует стремиться использовать как можно большее число точек (Snapshots in profile) при максимально возможном на данном отрезке FFT Size. Всё это значит, что для качественного "шумового профиля" нам нужен как можно более длинный отрезок, в котором есть только шумы. Вообще, чем хорош Noise Reduction, так это тем, что его можно использовать не только для шумов, но и для различных фоновых звуков (шум леса, дождя, etc.)

На самом деле, в том же SoundForge есть и более интересные инструменты, например возможность вычитать из сигнала волну произвольной формы, но я начинал пользоваться Audition'ом, ещё в бородатые времена, когда он звался CoolEdit, и тогда SoundForge даже близко ничего похожего не мог, а теперь мне уже лень браться за что-то новое.

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

Самыми раздражающими в нашем случае являются мягкие щелчки, а также периодичный шум, следующий сразу за щелчками. Я думаю этот эффект появился вследствие отклонений поперечного сечения цилиндра от формы круга, либо ось не ровно стояла. В какой-то момент, при записи, иголка слишком глубоко входила в воск (начальный щелчёк) и дальше короткий отрезок шла по неровности (продолжающийся несколько раз после щелчка характерный шум), далее цилиндр делал полный оборот и шум повторялся. Как мы увидим далее, от этого шума нам всё-таки удастся избавиться с помощью Noise Reduction, однако продвигаясь по файлу и просматривая форму волны, я заметил, что тут присутствуют ещё и достаточно странные косяки, похожие на характерные искажения A\B-усилителей. Очень характерный пример на заглавном скрине статьи, но там ещё достаточно спорно, так как у того искажения слишком длинный период (я выбрал наугад из файла). А вот на следующем скрине видно очень хорошо что я имею ввиду.



О том как эти штуки (не)надо лечить и почему, я решил написать отдельно, а чтобы статья слишком не разрослась, спрятал под спойлер. Можно пропустить этот кусок, это почти что лирическое отступление.

О том, как убирать искажения не надо и почему


В один из моментов, когда я рассматривал спектрограмму сигнала, до меня дошло, что в конце песенки, есть достаточно длительный момент, когда ничего, кроме "свиста птиц", не звучит. А свист этот на спектрограмме имеет вполне однозначную полосу.



А значит мы можем схитрить. Расчехляем эквалайзер, выставляем максимальный Range (это динамический диапазон, говоря проще, на сколько дБ будет усилена\ослаблена та или иная частота) и режем частоты на которых у нас поют птицы, а всё что ниже\выше оставляем.

Так как даже максимального динамического диапазона не хватает чтобы полностью прибить всех птиц, повторяю эквалайзер дважды. Вообще, про то как он работает, и почему так всё происходит, можно отдельную статью писать, только, боюсь, я не настолько хорошо знаю математику алгоритмов чтобы на эту тему умничать.



Итак, теперь мы имеем достаточно длинный отрезок с одним лишь шумом... и, правильно, возвращаемся к тому, с чего начинали. Захватываем профиль шума (после захвата нажимайте close, а не cancel, ибо иначе все настройки сбросятся к предыдущим использованным).

Помимо Noise Reduction, ещё есть фильтр Hiss Reduction, он, как следует из названия, поможет нам избавиться от свиста и всякого разного подобного. Настройки там почти аналогичные шумодаву, разве что FFT Size как-то по другому работает, а как именно я так и не разобрался, поэтому действую тут эмпирическим путём, чего и вам советую. Для Hiss Reduction тоже необходимо указать базовый уровень шума (кнопка Get Noise Floor), так вот, этот базовый уровень захватывать стоит на том же отрезке, на котором мы захватывали шумовой профиль.

Далее откатываем два последних действия (эквалайзер на птичках), затем выделяем весь файл и последовательно применяем к нему Noise и Hiss Reduction.

После применения этих двух разновидностей шумодава, мы получаем уже вполне годный к потреблению результат. Разве что, небольшие артефакты на концах спектра появляются. Тут нам на помощь снова приходит эквалайзер - нещадно режем всё ниже 150 Гц и выше 4.5 кГц.

Стало заметно тише, но щелчки до сих пор слышны. Теперь в дело снова идёт спектрометр. Если на данном этапе послушать файл и наблюдать за спектрограммой, будет очевидно, что в момент щелчка шум имеет весьма широкий спектр, а вот мелодия, напротив идёт чёткими волнистыми линиями (ниже, для наглядности выделил один щелчок красным).



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



В случае, если этот период был просто слишком громким, то я обычно просто делал его тише. Если он был ещё и сильно искажен, то удалял целиком (лень выправлять каждый, чего уж тут).



А тут я расскажу как буквально в два щелчка править амплитуду таких скачков.

Хинт о том, как удобно юзать избранное в Audition


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

Тут нам снова пригодится спектральное отображение сигнала. Если зорким взором окинуть панель инструментов в этом режиме, в глаза бросается вещь, вроде бы совсем не связанная с миром аудио-редакторов. Кисть. Она-то нам и нужна.

Она позволяет удалять произвольные участки на спектре. Будто динамический сверх-точный эквалайзер.

Помните я писал, что щелчки имеют широкий спектр, а вот музыкальные звуки хорошо читаются на их фоне? Сейчас мы этим и воспользуемся. Выбираем эту кисть, ищем момент где у нас идёт такой вот столбик шума на фоне музыки. Далее рисуем этой кистью в местах где у нас только шум, не затрагивая при этом музыкальную линию. Далее нажимаем del, затем передвигаем ползунок выделения чтобы просмотреть чё у нас получилось, либо просто начинаем рисовать кистью на новом месте. И видим что там, где только что удаляли, у нас теперь темнота, то есть тишина.



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

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

Кстати, помните я писал про то, что при удалении периодов появляется некий шум, которому вроде как и взяться неоткуда? Долго работая кистью в спектрографе, можно заметить что даже в этом режиме такой шум тоже иногда появляется - вокруг удалённой области непонятно откуда появляются белые участки - это оно и есть.

Внимательный читатель, наверняка ещё задаётся вопросом, а почему я, для того чтобы получить профиль шумов (там где "свистят птицы") использовал эквалайзер, а не эту "кисть", коль скоро там ничего, кроме свиста нет?

На самом деле вопрос хороший, так действительно можно было бы сделать, но мне, во первых лень было обводить всю огибающую, а во вторых, т.к. свистит тут у нас не идеальный синтезатор, остаётся вероятность наличия в свисте дополнительных гармоник, которые также присутствуют и в остальной песне. А если мы посчитаем на их основе шумовой профиль, то, очевидно, ошибочно избавимся от них при обработке. Хотя, на самом деле, конечно, основную роль конкретно в этом случае сыграла моя лень...


Итак, в качестве финальных штрихов прогоняем Automatic Click remover в режиме чуть сильнее среднего (верхний ползунок 30, нижний 75) - он уберёт резкие щелчки, которые могли появиться в результате наших манипуляций. И эквалайзером ещё раз срезаем всё выше 5 кГц и ниже 100 Гц. Далее нормализуем файл до 100%. Я ещё удалил самое начало файла, буквально полсекунды где-то, там всё равно после всех наших манипуляций ничего не осталось.

Кстати, в оригинальной статье не было упоминания, да и теги в файле проставлены не были, исполнители оригинала: Harlan And Belmont.
А Byron Harlan даже есть на discogs.com.

Вот, для сравнения, ссылка на оригинал: Тыц
А вот мой результат: Ты-дыц