[Начало] [Часть 2] [Форум iXBТ] [Download]
"Вместо предисловия"...
На самом деле этой третьей части быть не планировалось.
Как-то сидючи долгим зимним вечером (на самом деле в мае, хоть и вечером, но не тёмным - нет в Питере в мае тёмных вечеров даже ночь не тёмная) и записывая кассеты на DAT-рекордере - понял, что готовить фонограммы, так, чтоб они были бы красиво скомпонованы на кассете - сложно, а запись, как вы понимаете, на кассету процесс длительный и какой-либо недостаток при записи исправить бывает трудно. Как я уже упоминал во второй части, написал скрипт для подготовки фонограммы на компьютере - со всеми правильными паузами и прочим.
Поступила пара вопросов в "личку" про этот скрипт.
Отвечаю этим опусом, который и есть "третья часть, которой не планировалось".
Важно: все приведённые ниже скрипты и ПО использую в ОС FreeBSD и Linux, но функционал на Linux не полный - честно говоря, мне не очень хочется делать полный аналог для Linux - я точно не буду работать со звуком в Linux (в двух словах: работа со звуком в Linux реализована плохо - это моё ИМХО). Для Windows адаптацию делать вообще не буду - ибо... (... тут Остап не нашёлся, что сказать. В голове вертелись только старорежимные "милости повелевать соизволил" и прочая ерунда...).
Скрипт не является образцом хорошего кодинга - скорее наоборот. Кодировалось ситуационно - надо что-то - прилепил по-быстрому (от чего есть похожие по функционалу функции - переделывать лень) и комментариев в коде почти нет.
Скрипт периодически дописывается и изменяется, картинки в статье могут несколько уже не соответствовать текущей версии, но принципиальных изменений уже не будет.
Для аналоговой записи на аналоговом магнитофоне (или по аналоговому входу цифрового) достаточно треки на компьютере загрузить в проигрыватель и подать сигнал на вход магнитофона.
Всё, что касается далее вопросов про OS речь будет идти, если нет специальной оговорки, о FreeBSD.
Лицензия.
Скрипт распространяется по лицензии BSD (ага).
Немного о проблемах записи фонограмм и цифровых фонограмм в частности.
Есть такое явление в звукозаписи, как "клиппинг" - специфические искажения, связанные с превышением максимального уровня сигнала, c которым может работать аппаратура. В случае цифрового контента такая ситуация может возникнуть в самом цифровом коде и его нельзя выправить регулировкой уровня на самом аппарате записи-воспроизведения - это в общем случае даже не ошибка кодирования - был изначально задан слишком высокий входной уровень сигнала, а кодер цифровал, то, что получал - обрезанный по амплитуде сигнал - при кодировании с аналогового источника лучше слегка занижать уровень сигнала - поднять его проще потом, чем исправлять искажения при кодировании. К сожалению многие фонограммы в цифровых вариантах и lossless вариантах в том числе грешат этим. К сожалению, авторы цифровых копий не всегда обращают внимание на это и оцифровывают неверно.
Клиппинг на слух - это искажения в виде дребезга и неприятных резких щелчков, иногда динамики фактически выходят за пределы максимальной мощности или, при записи, за пределы пропускной способности звуковых трактов. Цифровой клиппинг проявляется так же, но если уровень громкости невысок, то при нормальном не выходящем за пределы уровне громкости он ощущается, как будто, как сказал мой знакомый меломан: "сыпятся мелкие камешки или песок". Надо сказать, что иногда, в рок-музыке так и вообще часто, клиппинг вводят намеренно для повышения агрессивности звучания. Современный музконтент типа рэпа, транса или типа того, (при всём желании не могу назвать это музыкой) просто изобилует этой бедой - так называемый насыщенный (извините, могу назвать его только так) пердящий бас - это он - клиппинг и есть - "дёшево и сердито" и, часто, именно такой звук считается красивым (когда на светофоре останавливается нечто и там "бум-бум-дрынь-бум-тыдым-цыдым", двери дребезжат, стёкла трясёт, машино прыгает). Жуть...
Этак... При воспроизведении, даже при возможности аппаратуры воспроизведения беспрепятственно (условно) воспроизвести "любой" выходной сигнал, входной при цифровом клиппинге всё равно будет искажённым и будет таким при любом уровне выходного сигнала - оно иногда может быть совершенно не заметно - так как физически данное явление порождает, так называемые паразитные гармоники, которые часто не воспринимаются на слух. На осциллографе это явление выражается, как обрезание верхушек синусоидального сигнала.
Так же "клиппинг" может возникнуть при перекодировании одного формата в другой, например 32 бит и 96000Гц в 16 бит 48000Гц или другие - в зависимости от используемого ПО и установленных параметров. И, что самое печальное - искажения может ввести и ваша звуковая карта - особенно современные типа аппаратно-софтовые, которые сейчас встроены в материнскую плату: AC'97, Intel HD. Не подумайте, что они плохие - нет, но плохим исполнением, как известно, можно испортить всё - поэтому, если вы хотите заниматься именно обработкой звука на то какое у вас "железо" следует обратить внимание. Возможно даже приобрести "внешнюю" звуковую карту - там, конечно, набор возможностей будет на порядки больше. Кстати, все современные видеокарты содержат на борту и аудиопроцессоры или вполне могут обрабатывать звуковой контент совершенно не напрягаясь на видеопроцессоре - для тех объёмов, что они обрабатывают для генерации видео - звук составляет небольшую долю от общего гигантского обрабатываемого потока данных.
Для примера пара статей о звуковых подсистемах:
2. https://www.ferra.ru/review/multimedia/s20876.htm?ysclid=l346nho6f7
Что можно сделать для предотвращения клиппинга.
Если у вас есть фонограммы с клиппингом, то откорректировать фонограмму можно, например программой audacity - она может найти потенциальный клиппинг в фонограмме и показать его - надо только включить в меню "Вид", соответствующий параметр. В ней имеется и соответствующий плагин для устранения этого явления. Плагин проводит анализ данных и по возможности (говоря просто) восстанавливает "нормальную синусоиду" сигнала.
Если участок с клипингом увеличить до отдельных семплов (отсчётов), то можно увидеть, как при цифровом клипинге отдельный отсчёт уходит выше границы 0dB:
При восстановлении звуковой волны данный отсчёт и все что так же превышают 0dB и дадут те самые полочки на синусоидах, которые породят те самые неприятно звучащие гармоники. Собственно редактирование в данном случае это понижение уровня семплов и придание им приемлемого уровня (без фанатизма) и без зашкаливания уровня к некоей аппроксимирующей "синусоиде", примерно выглядящей, как правдоподобная. К сожалению о том, каким должен быть уровень семпла, чтоб кривая определяемая уровнем каждого конкретного семпла соответствовала оригиналу, уже потеряна и нам остаётся только предполагать каким он мог бы быть. Но при небольших по масштабам повреждений от нескольких и даже десяткой семплов - на слух эти исправления практически не исказят оригинал - да, это будет уже не оригинал, но фонограмма, которая не будет иметь паразитных искажений и в общем в общей звуковой картине вы не заметите разницы - эти участки по времени звучания будут настолько быстрыми, что просто на слух не сможете их выделить, а вот если клиппинг оставить, то при малой длительности звучания они могут породить тот самый эффект "сыплющегося песка" или "хрипа" или, что уж совсем плохо выпадений и искажений так, как ваш ЦАП будет восстанавливать синусоиды из имеющейся у него информации и недостающее аппроксимировать согласно заложенного у него алгоритму. Такой вот "фотошоп". Что лучше решать вам.
Борьба с уже существующем в фонограмме цифровым клиппингом - дело неблагодарное и полностью его убрать не получиться, но можно минимизировать это явление. Самое простое: сделать "нормализацию" - формально - это не удаление клиппинга, но нормализация, часто может свести клиппинг практически до незаметного уровня. В программе, ffmpeg можно достичь подобного, используя соответствующие параметры, правда подбор их значений довольно трудоёмкое мероприятие. Проще, иногда, найти более лучшую фонограмму.
В программе audacity можно вполне при наличии времени повозиться с исправлением, если после работы скрипта, прослушиваемая итоговая фонограмма мне не нравится, то принимаю меры по устранению проблем. Прогоняю все исходные фонограммы в этой программе, собираю фонограмму заново и так пока не выйду на идеал для моего понимания, что такое идеал.
Скрипт подготовки фонограмм
Скрипт написан на bash c вкраплением на zsh (в bash всё никак не могут решить проблему юникода - русские буквы иногда уходят в никуда или искажаются). Работает в общем так, как мне нужно, но медленно на различных показывающих, например, листинги директорий и списки файлов с треками, с их параметрами. Но, к сожалению в скрипте используются циклы, а "циклы" - это в принципе на bash не быстро, увы это принципиальная проблема интерпретаторов вообще.
Вообще говоря, такую задачу, как подготовка фонограмм, писать на bash плохая идея, но изначально не планировал такого функционала, что появился в скрипте - хотел просто автоматизировать некоторые рутинные операции в c ffmpeg, но случилось-то самое "остапа понесло...".
Может быть перепишу на python или вообще на c++ с QT, работать будет быстрее точно, но опять же - делать полноценную программу для в общем-то не частой операции по подготовки фонограмм? Если станет скучно длинными зимними (или скорее зимовочными) вечерами (сутками) - может быть.
Скрипт называется незатейливо и в честь (см. первую часть) первого аппарата аудиофиксации: phonograph - длинно и неудобно, но точно не перепутаете с какими системными :).
Запуск так и делается:
% phonograph
Если запустить без параметров, то выйдет справка по командам и опциям - справка на английском - так получилось, что я всегда пишу для себя и обычно только на (хреновом) английском (но опять же: мне понятно :)).
Скрипт - это программа-оболочка, а не самостоятельная программа-обработчик (скрипты shell обычно таковыми и являются). Из справки видно, что для работы она требует установленных дополнительно программ: mc, ffmpeg, ffprobe, cuetag.sh, shntool, flac, wavpack, mac, enca, most, bc, zsh. Это в общем всё в духе unix - использование средств OS и других программ и утилит, а скрипт заменяет ваши рутинные действия делая их удобнее действия.
При старте скрипта пройдёт проверка наличия необходимого. Если чего-то нет, то будет соответствующее сообщение и совет, что делать.
Программа является консольной, то есть запускается и работает в командной строке (shell) с некоторым разноцветным интерфейсным оформлением:
Обработка треков для приведения к требуемым параметрам для фонограммы:
Предварительная обработка заключается в уже упоминавшемся удалении возможного клиппинга, удалении начальной и конечной "тишины", добавлении нужного количества "тишины" в начале и конце для формирования нужных пауз для правильного присвоения аппаратом, при записи, индексов ID. Ещё добавляю короткий участок "затухания" (fade) в конце (1.6 с) - обычно они и так в фонограммах есть, но не всегда. Да это вмешательство в оригинальную режиссуру, но ... Мне так нравится, да и такой короткий фэйд в конце практически не заметен, а для правильной записи на DAT по оптике то, что надо, ибо: 1.6с "тишины" в начале, 1.6с фэйда и 1.6с "тишины" в конце - в общем красота получается и для ID полезно: ставятся сами и правильно.
Есть ситуации, когда пауз, как таковых в альбоме не предусмотрено, например в альбомах Pink Floyd или различных live-альбомах - в таких случаях надо треки склеивать без этих пауз с "тишиной".
Рекордер считает паузой всё, что дольше 3-х секунд имеет уровень сигнала меньше -60dB, с нужным уровнем и соответствующей кодировке - на основе этого он выставляет ID трека (ID можно присваивать/удалять и вручную - на любых фонограммах в любом месте).
Все параметры предварительной обработки, как это принято, из командной строки и настраиваются из конфигурационного файла:
% phonograph conf
Файл имеет мало пояснений, но надеюсь из названий переменных всё-таки будет понятно. Если вдруг кому-то нужны будут пояснения более расширенные - добавлю.
После предварительной обработки в принципе файлы уже можно отправлять на запись из любого звукового проигрывателя, если вы пишите через аналоговый канал звуковой карты, то проблем не будет: фонограмма на ленте сформируется нормально - все паузы и прочее уже есть в файлах - надо только выставить уровень выходного сигнала и уровень записи на рекордере. Другое дело, если вы используете цифровой оптический канал - SPDIF. При отправке через звуковой проигрыватель "предварительных" треков есть такой эффект: при переходе от трека к треку происходит обрыв сигнала, который воспринимается рекордером как полное пропадание сигнала и он становится на режим "пауза", звуковой сигнал появляется "пауза" снимается и запись продолжается, но процесс начинается не мгновенно, а с некоторой небольшой задержкой и начало следующего трека смазывается. Для предотвращения такой неприятности надо все треки объединить в одну фонограмму - один сплошной трек.
% phonograph merge
Скрипт автоматически определяет параметры кодирования, но можно указать параметры либо в конфигурационном файле или в командной строке. DAT-рекордер позволяет три формата записи:
- 16бит/48000 Гц
- 16бит/44100 Гц
- 12бит/32000 Гц
Соответственно, как параметр программы это: DAT, CD, LONG.
Родным для DAT-рекордера является 16 бит / 48000 Гц. Таких фонограмм найти трудно. Поэтому в этот формат имеет смысл преобразовывать любые форматы отличающиеся от 16/48000 и 16/44100. Например, есть фонограммы 24/96000 или 32/96000 и их, как раз, имеет смысл преобразовать в 16/48000 и в таком виде отправить на запись. Если же формат 16/ 44100, то отправлять на запись именно в этом формате - преобразовывать их в 16 /48000 нет смысла, но если рекордер позволяет записать в таком формате.
Важно: DAT-рекордеры последних выпусков имеют разблокированный режим 16/44100, а вот изначально он был заблокирован и на выход и, часто и на вход.
Только в этом случае имеет смысл делать перекодирование в 16/48000. Перекодирование в LONG, даёт худшее качество записи. Смысл делать запись в этом формате имеется только, если хотите вместить на одну и туже кассету в два раза большую по длительности фонограмму. Качество записи, в общем случае, будет на уровне хорошего аналогового кассетного магнитофона.
Важно: любое преобразование даже цифрового сигнала, так или иначе вносят изменения в исходник, особенно, если вы преобразуете из контента с большими параметрами к меньшим. Обратное преобразование о меньших к большим в общем смысла не имеет: лучше они не станут - для лучшего качества нет данных. Правда, если вы будете редактировать и делать ещё какие-либо преобразования, например, в той же audacity, то преобразование к большим параметрам имеет смысл, так как редактирование будет осуществляться, условно говоря, с большей "подробностью" и будет меньше искажений, а потом опять привести к формату DAT-рекордера.
Остальные возможности скрипта описаны (кратко) в help.
Упомяну (ещё более кратко), что дополнительно может:
- разрезать единый файл на отдельные треки (split),
- перекодировать из одного формата в другой (recode),
- воспроизвести фонограмму на DAT-рекордер (play),
- редактировать теги звукового файла (tagedit),
- изменить настройки звуковых устройств компьютера (sound) (FreeBSD).
- если завершена обработка одной "порции" треков, можно добавить ещё треки и будет продолжена дальнейшая сквозная нумерация.
Звуковые устройства компьютера.
Немного о звуковых устройствах через которые компьютер воспроизводит звук. Выяснить какие звуковые устройства есть в вашей системе:
% cat /dev/statsnd
Что мы видим? Мы видим 7 звуковых устройств. Точнее их всего два.
Это 7 звуковых каналов, которые могут работать со звуковыми потоками, но вполне их можно называть именно "устройствами" - для упрощения.
Они являются независимыми: то есть, например на "устройство 5" можно включить (оно в моей системе стоит устройством вывода звука по умолчанию) вывод звука на наушники, с "устройства 3" проигрывателем в это время вывести, например, на DAT-рекордер. Звуковой поток естественно разный.
Увидеть полную информацию о всех звуковых устройствах (точнее о устройствах pcm):
% sysctl dev.pcm
Вывод полный не даю: очень много (поэтому, если хотите почитать вывод вдумчиво, то команду лучше выдать так: sysctl dev.pcm | less) дам только для одного устройства, которое у меня устройство "по умолчанию":
Обратите внимание на то в каком режиме происходит вывод и ввод:
dev.pcm.5.play.vchanformat: s16le:2.0
dev.pcm.5.play.vchanrate: 48000
dev.pcm.5.rec.vchanformat: s16le:2.0
dev.pcm.5.rec.vchanrate: 48000
Установлен (по умолчанию) режим 16/48000 - для записи на DAT-рекордер в его родном формате то, что нужно. Если вы сделали перекодировку в этот формат, то ничего менять и не нужно выдали - записали. Но для записи в формате CD (16/44100) и LONG (12/32000). нужно выход на рекордер согласовать и установить нужные параметры. Достаточно изменить частоту дискретизации на 44100 или 32000.
% sudo sysctl dev.pcm.3.play.vchanrate=44100
или
% phonograph set 3 44100
Для изменения в системе вы должны иметь на это право в данном случае изменение прав идёт через команду sudo. Можно не менять настройки карты, но будет происходить преобразование сигнала, из того, что есть в вашей фонограмме в установленный на звуковом устройстве. Хорошо это или нет - вопрос философский. Проведите эксперимент - проверьте.
Напомню, что мы работаем по цифровому каналу SPDIF. На некоторых материнских платах этот выход отсутствует (как у меня на материнке он есть, но "не распаян"), но на большинстве он есть. В моём случае я использую, как SPDIF - устройство делитель, подключённое к одному из HDMI (потому используется устройство 3) выходов видеокарты и по оптическому кабелю уже к DAT-рекордеру. В этом случае, если выставлен на рекордере тип входа "Optical" - рекордер автоматически перейдёт в нужный режим записи.
Почитать как работать со звуковыми устройствами в phonograph:
% phonograph help sound
Где взять.
Скачать: phonograph.tar.xz
Как установить.
Распаковать архив:
Запустить
- % tar -xf phonograph.tar.xz
Установка
% ./configure
% make install
или
% make
% mc
далее 'F2' [меню]
Установка идёт в каталоги:
$HOME
$HOME/.config/Phonograph/phonograph.conf
- $HOME/.local/share/Phonograph/*
Справка
команда без параметров
% phonograph
или
- % phonograph help [команда]
Работа
% cd $HOME
Поместите исходные музыкальные файлы в каталог $HOME/Documents/Phonograph/Source и запустите:
% phonograph create
или укажите путь до каталога с муз-файлами:
- % phonograph create [путь]
Удаление.
- % make deinstall
Структура рабочих каталогов.
$HOME - рабочий каталог
$HOME/Documents/Phonograph/Backup - копия исходных треков
$HOME/Documents/Phonograph/Music - ссылка на каталог с музыкальной коллекцией
$HOME/Documents/Phonograph/Recode - каталог куда будет помещён результат перекодирования
$HOME/Documents/Phonograph/Source - каталог исходных треков
$HOME/Documents/Phonograph/Z_Stores - каталог проектов
$HOME/Documents/Phonograph/Z_Stores/PH_Store/PH{DATE}{TIME}-{NAME} - каталог предварительно обработанных файлов
$HOME/Documents/Phonograph/Z_Stores/PH_Store/PH{DATE}{TIME}-{NAME}/Merge - каталог объединённой результирующей фонограммы.
$HOME/.config/Phonograph/phonograph.conf - конфигурационный файл
$HOME/.local/share/Phonograph/ - каталоги и файлы дополнительных и основных процедур.
Заключение.
Наверное на этом всё. Дополню, если кому-то это будет нужно.
Спасибо за прочтение.
(лайки, прочая подписка, как это сейчас принято)
Копирайты:
SPDIF — Sony/Philips Digital Interface (Interconnect) Format
HDMI — High Definition Multimedia Interface — интерфейс для мультимедиа высокой чёткости, позволяющий передавать цифровые видеоданные высокого разрешения и многоканальные цифровые аудиосигналы с защитой от копирования.
DAT - (Digital Audio Tape) или R-DAT (Rotary head Digital Audio Tape) — цифровой формат звукозаписи, разработанный компаниями Sony и Philips и представленный в 1987 году.
Все остальное, что есть в статье моего - это сплошное копилефт и licensed on BSD. Все названия фирм и прочих принадлежат своим правобладателям - мне на них ваще поф, (но ежель бабки зашлют - не откажусь).
[Начало] [Форум iXBT]