Звукозапись на бумагу

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

Впервые оптическая звукозапись появилась в 1904 году. Звук в буквальном смысле научились фотографировать. Нанесение звука на киноплёнку параллельно с изображением стало началом звукового кино. Но в этой статье я не буду рассказывать об оптической звукозаписи в чистом виде, а всё же воспользуюсь благами цифровых технологий. Предлагаю, своего рода, эмуляцию оптической звукозаписи с использованием бумаги, т.е те звуковые дорожки, которые раньше "печатали" на кинопленку, мы распечатаем на бумагу. Соответствующий проект размещен на сайте http://zenpho.co.uk/paper.shtml
Все операции я производил в системе Linux Mint. Для пользователей Windows, думаю, тоже можно приспособить, так как, имеются "исходники" программы...
Для начала нужно установить все "зависимости", а именно:
  • python 2.7.6
  • sox 14.4.1
  • python image library 1.1.7
  • imagemagick 6.7.7-10
  • bash 4.3.11(1)
  • avconv 9.13-6:9.13-0
Опытным путем было установленно, что avconv можно заменить на ffmpeg (этот параметр содержится в файле 01-audioToPaper.sh). Из скрипта 01-audioToPaper.sh рекомендую убрать строки compand 0.1,1 -60,-20,-6,0 \ (если я правильно понял, то эта опция "глушит" звук, но если звуковой файл будет надлежащим образом подготовлен, то надобности в этой опции нет). Также, пакет PIL был заменен на PILLOW, поэтому в файле wav2png.py и png2wav.py нужно заменить самую первую строку на from PIL import Image,ImageDraw. В файле 02-paperToScans.sh можно удалить параметр --calibration-cache=yes \ (у меня с ним не запускалось сканирование).
В папку со скриптами нужно поместить звуковой файл input.wav (либо просто указать нужный файл во время работы скрипта), при чем, его не нужно перекодировать - скрипт всё "сделает" сам. Но, возможно, нужно будет чуть "подтянуть" уровень громкости, так как, итоговый результат декодирования будет чуть тише оригинала.
Теперь, запускаем скрипт 01-audioToPaper.sh, который перекодирует звуковой файл в звуковые дорожки. В папке contact должен появится "склеенный" лист со всеми звуковыми дорожками. После, нужно распечатать изображение, при чем, в опциях печати нужно выбрать, что-то типо "Растянуть на весь лист".


Для последующего декодирования звука его нужно отсканировать. Для этого запускаем скрипт 02-paperToScans.sh . Однако, в этом скрипте нужно изменить параметр STRIPS_PER_PAGE_X="30", заменив "30" на нужное число звуковых дорожек, но не более 30. Он автоматически отсканирует и "разрежет" лист на дорожки, которые поместит в папку scannedStrips. Есть небольшая проблемка с точностью "разрезки" (зависит от положения листа бумаги при сканировании), но она не критична и легко исправима (либо путём позиционированием листа бумаги на сканере, либо изменением параметров в строке  scanimage -l 2 -t 1 -x 203 -y 292 \).


Скрипт 03-scansToAudio.sh декодирует все отсканированные дорожки в звук и создаст файл reassembled.wav. Так звучит приложенный выше пример.

Обновление:
 
Как вариант, можно использовать кусок скрипта и действовать немного по другой схеме. Звуковой файл можно подготовить с помощью вот таких команд:
 
ffmpeg -i temp.wav \
-ar 22050 \
-ac 1 \
-acodec pcm_u8 \
-f u8 - | \
sox -S \
 -t u8 \
-r 22050 \
- input.wav \
highpass 170 \
compand 0.1,1 -60,-20,-6,0 \
gain -h treble 9 4000 treble 18 8000 treble 24 11000 \
rate 3300 \
gain -n

где: temp.wav - исходный файл; input.wav - итоговый.

Далее, с помощью программы из папки wav2pbm_c разбить звуковой файл на дорожки и "склеить" их с помощью команды:

montage *.pgm -tile 30x1 -geometry +0+0 out.pgm

где: 30 - количество дорожек.

Распечатать, отсканировать при разрещении 300 dpi (для другого разрешения нужно поменять число в "rate 3300" на число = dpi * 11) и "разрезать" на дорожки с помощью команды:

convert out.pgm -crop 80x3300 +repage +adjoin out_tiles_%02d.pgm

где: 80 - ширина дорожки (точки), а 3300 - длина (точки), которые подбираются опытным путем, дабы равномерно "разрезать" на те же дорожки.

Преобразовать "дорожки" в звук с помощью программы из папки pbm2wav_c.
 
На этом всё :)

Комментарии

Отправить комментарий

Популярные сообщения из этого блога

Математика Люшера

Поиграем на микрокалькуляторе

Погода по барометру