[recovery mode] Слушаем птичек из 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-усилителей. Очень характерный пример на заглавном скрине статьи, но там ещё достаточно спорно, так как у того искажения слишком длинный период (я выбрал наугад из файла). А вот на следующем скрине видно очень хорошо что я имею ввиду.
О том как эти штуки (не)надо лечить и почему, я решил написать отдельно, а чтобы статья слишком не разрослась, спрятал под спойлер. Можно пропустить этот кусок, это почти что лирическое отступление.
О том, как убирать искажения не надо и почему На скрине выше не очень хорошо видно, так как я чуть отодвинулся для масштаба, но длительность такого колебания — жалкие 80 микросекунд. Проделываем нехитрые вычисления: T = 0.00008 мс (период)V = 340 М/с (скорость звука в воздухе)L = V * T = 0.0272 М (длина волны)F = V / L = 12500 Гц (частота)
На самом деле, тут всё можно сократить до банального F=1/T, но это ж Хабр, тут всё должно быть по хардкору.
Самое время вспомнить первый факт, озвученный ранее: очевидно, в подобной записи 12-ти килогерцам взяться неоткуда, так что практически наверняка это тоже шумы. Тут можно было бы обратиться к спектрометру, однако, так как эти колебания имеют совсем уж мизерную амплитуду, а кроме того, их, почему-то, слишком много, на спектральном представлении они совершенно не выделяются и похожи на тёмный-тёмный точечный фон (картинка с более контрастным квадратом это как раз оно и есть).
Врядли такие косяки возникли из-за движения иглы. Я полагаю это микро-трещины на воске, которые появились, скорее всего, из-за времени.
В идеальном случае, может показаться будто было бы круто просто взять и вырезать такие места, причём целыми периодами: так как эти колебания приходятся на места, где у нас фактически дефекты записи, однозначно можно сказать, что никакой полезной информации они не несут, а так как нам не принципиально сохранение оригинального тайминга композиции, мы могли бы смело их удалять — в среднем они длятся не более 100 мкс, это совершенно мизерный промежуток, на слух такое заметить нереально.
Только вот, живём мы не в идеальном мире (хотя, это как посмотреть), так что это достаточно скверная идея. Дело в том, что при удалении участка, происходит т.н. smoothing, т.е. сглаживание уровней соседних точек. Так как это у нас цифра, такие мельчайшие неровности после сглаживания это самый натуральный В/Ч шум. Мы его немного ограничили снизив частоту дискретизации файла, но тем не менее. Тут можно было бы попробовать порезать такой шум эквалайзером после всех удалений, но, опять же, это изменит форму волны, а в силу того что звук у нас цифровой, тут всё упирается в математику — сделать эквалайзером ровный срез по нужной частоте просто так не получится. Кроме того, как я говорил выше, таких искажений слишком много, отчего ручками вот так всё править практически бессмысленно — такие фрагменты имеют длительность порядка 100 мкс, а значит для того чтобы это «улучшение» было хоть немного заметно на слух (теоретически), вам нужно удалить просто невероятное количество таких участков. При этом, так как в остальном файле эти искажения никуда не денутся, «чистый отрезок» в пару миллисекунд будет банально незаметен на фоне шумных. И ещё бочка дёгтя — результаты сглаживания сотен удалённых отрезков создадут такой шум, что первоначальный вариант (который был без правки) покажется вам даже лучше того что у вас в итоге получится.
Помимо всего перечисленного, волны порой интерферируют друг с другом совершенно невообразимым образом (простите за тавтологию), отчего однозначно понять где конкретно искажение, а где, скажем сибилянты, очень сложно — для этого, как минимум, нужно хорошо знать особенности человеческой речи, формирование гармоник и всё остально. Так что, даже если бы не smoothing, при таком удалении есть неиллюзорный шанс банально попортить изначальный звук, сломав интерференционную картину.
И тем не менее, лекарство от данных болячек есть — ниже я покажу как подчищать звук, в том числе и от подобных искажений.
В один из моментов, когда я рассматривал спектрограмму сигнала, до меня дошло, что в конце песенки, есть достаточно длительный момент, когда ничего, кроме «свиста птиц», не звучит. А свист этот на спектрограмме имеет вполне однозначную полосу.
А значит мы можем схитрить. Расчехляем эквалайзер, выставляем максимальный Range (это динамический диапазон, говоря проще, на сколько дБ будет усилена\ослаблена та или иная частота) и режем частоты на которых у нас поют птицы, а всё что ниже\выше оставляем.
Так как даже максимального динамического диапазона не хватает чтобы полностью прибить всех птиц, повторяю эквалайзер дважды. Вообще, про то как он работает, и почему так всё происходит, можно отдельную статью писать, только, боюсь, я не настолько хорошо знаю математику алгоритмов чтобы на эту тему умничать.
Итак, теперь мы имеем достаточно длинный отрезок с одним лишь шумом… и, правильно, возвращаемся к тому, с чего начинали. Захватываем профиль шума (после захвата нажимайте close, а не cancel, ибо иначе все настройки сбросятся к предыдущим использованным).
Помимо Noise Reduction, ещё есть фильтр Hiss Reduction, он, как следует из названия, поможет нам избавиться от свиста и всякого разного подобного. Настройки там почти аналогичные шумодаву, разве что FFT Size как-то по другому работает, а как именно я так и не разобрался, поэтому действую тут эмпирическим путём, чего и вам советую. Для Hiss Reduction тоже необходимо указать базовый уровень шума (кнопка Get Noise Floor), так вот, этот базовый уровень захватывать стоит на том же отрезке, на котором мы захватывали шумовой профиль.
Далее откатываем два последних действия (эквалайзер на птичках), затем выделяем весь файл и последовательно применяем к нему Noise и Hiss Reduction.
После применения этих двух разновидностей шумодава, мы получаем уже вполне годный к потреблению результат. Разве что, небольшие артефакты на концах спектра появляются. Тут нам на помощь снова приходит эквалайзер — нещадно режем всё ниже 150 Гц и выше 4.5 кГц.
Стало заметно тише, но щелчки до сих пор слышны. Теперь в дело снова идёт спектрометр. Если на данном этапе послушать файл и наблюдать за спектрограммой, будет очевидно, что в момент щелчка шум имеет весьма широкий спектр, а вот мелодия, напротив идёт чёткими волнистыми линиями (ниже, для наглядности выделил один щелчок красным).
Для начала устраним апмлитудные всплески на местах щелчков. Для этого переключаемся в режим отображения формы сигнала. Как правило, это всего один «зашкаливающий» период волны.
В случае, если этот период был просто слишком громким, то я обычно просто делал его тише. Если он был ещё и сильно искажен, то удалял целиком (лень выправлять каждый, чего уж тут).
А тут я расскажу как буквально в два щелчка править амплитуду таких скачков.
Хинт о том, как удобно юзать избранное в Audition Собственно, идея тривиальна. В Audition для произвольного участка записи мы можем задавать определённый график изменения громкости (Amplitude and Compression → Envelope). Т.е. например можем сделать плавное затухание, или резкое появление. Ну в общем, нарисовать можно, что душе угодно. Обычно этот инструмент применяется для больших масштабов. Однако, я придумал как его можно использовать на микромасштабах. Открываем «Избранное» (Окно→Избранное) и создаём новый пункт. Выбираем эффект Envelope и правим настройки. В настройках создаём простейший график-дугу, с одной единственной точной-минимумом ровно по центру графика (50% время, 50% амплитуда). Придумываем имя, сохраняем и двигаемся к нашему первому щелчку.Теперь вам надо всего лишь выбрать на максимальном приближении один период волны «щелчка», который зашкаливает и два раза щёлкнуть по созданному эффекту в избранном. Вуаля — щелчёк по уровню становится примерно равен окружающим его колебаниям. Этакий «ультрапрецизионный софтлимиттер». В принципе можно добиться аналогичного эффекта и Hard Limiter’ом, но он порежет под один уровень все звуки в треке, а нам надо резать только ненужные. Кроме того там ещё есть ряд нюансов — например часто просто невозможно подобрать такие настройки, при которых лимиттер режет только то что нужно, например, когда щелчки слишком резкие.
После того, как самые громкие щелчки были побеждены, пришло время избавляться от мелких искажений, которые есть по всему файлу. В предыдущем спойлере я уже рассказал как их удалять не стоит, а сейчас расскажу как делать это более-менее правильно.
Тут нам снова пригодится спектральное отображение сигнала. Если зорким взором окинуть панель инструментов в этом режиме, в глаза бросается вещь, вроде бы совсем не связанная с миром аудио-редакторов. Кисть. Она-то нам и нужна.
Она позволяет удалять произвольные участки на спектре. Будто динамический сверх-точный эквалайзер.
Помните я писал, что щелчки имеют широкий спектр, а вот музыкальные звуки хорошо читаются на их фоне? Сейчас мы этим и воспользуемся. Выбираем эту кисть, ищем момент где у нас идёт такой вот столбик шума на фоне музыки. Далее рисуем этой кистью в местах где у нас только шум, не затрагивая при этом музыкальную линию. Далее нажимаем del, затем передвигаем ползунок выделения чтобы просмотреть чё у нас получилось, либо просто начинаем рисовать кистью на новом месте. И видим что там, где только что удаляли, у нас теперь темнота, то есть тишина.
Далее повторяем эту процедуру для всех мест, где всё ещё отчётливо слышны щелчки. В принципе, при должной упорности, можно вообще во всех местах выкорчевать вообще всё, оставив только гармоники.
Только это неблагодарное занятие, на самом деле. Потому что в реальности звуки имеют гораздо более сложную природу и помимо шумов между главными гармониками часто присутствуют менее важные призвуки. Но несмотря на то, что они менее важны, они придают звуку более естественный окрас и характерность, чего можно лишиться, если приняться выпиливать вообще все не гармонические звуки.
Кстати, помните я писал про то, что при удалении периодов появляется некий шум, которому вроде как и взяться неоткуда? Долго работая кистью в спектрографе, можно заметить что даже в этом режиме такой шум тоже иногда появляется — вокруг удалённой области непонятно откуда появляются белые участки — это оно и есть.
Итак, в качестве финальных штрихов прогоняем Automatic Click remover в режиме чуть сильнее среднего (верхний ползунок 30, нижний 75) — он уберёт резкие щелчки, которые могли появиться в результате наших манипуляций. И эквалайзером ещё раз срезаем всё выше 5 кГц и ниже 100 Гц. Далее нормализуем файл до 100%. Я ещё удалил самое начало файла, буквально полсекунды где-то, там всё равно после всех наших манипуляций ничего не осталось.
Кстати, в оригинальной статье не было упоминания, да и теги в файле проставлены не были, исполнители оригинала: Harlan And Belmont.
А Byron G. Harlan даже есть на discogs.com.
— Вот, для сравнения, ссылка на оригинал: yadi.sk/d/sLKZlyp2eQ2YKА вот мой результат: yadi.sk/d/lPlJJaEQeQ2Zc
Надеюсь вам было интересно.
P.S. Заранее извиняюсь за отсутствие обозначений осей на скринах. Там где синий — там везде по вертикали Гц, где зелёный — Дб. По горизонтали везде секунды.