Вместо предисловия
Привычная схема записи начитки текста выглядит примерно следующим образом. Журналист прибегает к звукорежиссеру в надежде побыстрее записаться и сдать материал на эфир. У звукорежиссера все оборудование уже готово и ему достаточно нажать одну кнопку, пару минут на обработку и звуковая дорожка отправляется на монтаж.
Но если из этого процесса выдернуть звукорежиссера, на сколько тогда осложнится процесс записи? К примеру, звукорежиссер может быть на записи программ или прямых эфирах. А может просто у него выходной. В такие моменты журналисту приходится ждать или откладывать начитку на другое время.
Чтобы как-то автоматизировать процесс записи, у нас и возникла эта идея – создать звукозапись без звукорежиссера.
Постановка задачи
Хотелось прийти к тому, чтобы журналист мог самостоятельно записывать себя в любое время. В то же время не тратить время на обучение журналистов и объяснения как работают программы для записи звука и прочие нюансы. А обойтись малой кровью и создать простое веб-приложение буквально с одной кнопкой.
И так было решено собрать простое веб приложение, которое умеет сохранять начитку в аудиофайл. Задачка казалась бы тривиальна, тем не менее пришлось немного покопаться. Поскольку уже имелась наработанная схема и перестраивать ее не хотелось, то все делалось в дополнение к существующей схемы.
Этапы решения
Есть специально оборудованная комната, довольно тесная. В ней помещался один человек, микрофон и студийный предусилитель. Сигнал с которого идет на компьютер звукорежиссера в другом кабинете. Первая мысль была запихать все, что можно в автозагрузку (автологон в учетную запись, загрузка пресетов для записи, начинать и заканчивать запись нажатием, например, пробелом). Но это все же рабочее место звукорежиссера, настроено под себя так сказать, и нерадивый журналист может навести свой порядок. Плюс это два разных кабинета: комната записи и комната звукорежиссера. И лишний раз пускать туда пользователей без присмотра звукорежиссера так же не хотелось бы. Так что этот вариант быстро отмели.
Ну раз нельзя трогать один компьютер, то нужен другой, новый ПК, который будет в роли сервера звукоснимателя. При таком раскладе мы получим две автономные системы, и функционирование ПК и сервера не влияли бы друг на друга. Именно то, что нам и нужно! К счастью, у предусилителя имеется два выхода (цифровой и аналоговый) на которые можно подать один и тот же вход. Аналоговый выход был занять ПК звукорежиссера, оставался цифровой.
Собрав простенький сервер с подходящей звуковой картой, нужно было как-то им управлять. В комнате записи было тесно и установить туда какие-нибудь тачскрин панели или kvm переключатели, было трудно. Вообще хотелось доступности и универсальности, то что было бы у каждого желающего записаться. А это несомненно смартфон. Поэтому было решено запилить веб интерфейс.
Интерфейс максимально простой. Состоял он из «двух страниц»: начать запись и остановить запись. На первую страницу поместили поле для ввода названия начитки, кнопку «Начать запись» и список уже записанных файлов. На второй странице красивая анимированная надпись «ЗАПИСЫВАЮ…» идея взята отсюда. И кнопка «Остановить запись».
На бекенде был написан простой php-скриптик, который запускал и завершал процесс ffmepg по нажатию кнопки. На использование ffmpeg натолкнула вот эта страничке, где приводился пример записи звука из командной строки.
Работа над ошибками
Система заработала, записывала, сохраняла и воспроизводила записи. Однако появлялись некоторые недочеты.
Остановка записи. Запись останавливалась обычным глушением процесса по его pid. Однако корректное сохранение файла в таком случае возможно только в формате mp3.
Файл записывался с одним каналом звука. На звуковую карту приходили два канала, а ffmpeg записывал один. Желаемый результат был достигнут, Добавив параметр смешивания каналов в строку запуска. В этом помогла вот эта страничка.
На записи терялись начало и конец. Решилось добавление небольшой задержки после нажатия на кнопку. Просто интерфейс работал быстрее, чем запускался скрипт.
Копились файлы. Чтобы не копились файлы и была какая-то структура, скрипт создавал папку каждый месяц.
Ограничение записи. В качестве страховки от зомби процессов от шутников установили также ограничение по длине записи.
Подводя итоги
Готовое решение выглядит следующим образом. Журналист заходит в комнату звукозаписи и включает тумблер (включаются свет + предусилитель). Подключается к wifi-точке с телефона и заходит на веб сервер по qr-коду. Далее вводит название и жмет кнопку старт. По завершению записи проверяет начитку, воспроизводя ее на телефоне. Если все записалось хорошо, то гасит свет, закрывает комнату и в полном удовлетворении идет дальше по своим делам.
Железки
Микрофон Shure SM7B
Предусилитель - dbx 386
Сервер собран на процессоре i3-2320 со звуковой картой HDSPe AIO от RME
ПК звукорежиссера собран на i7-2600 со звуковой картой M-Audio Delta66