http://habrahabr.ru/post/220061/
Можно ли закодировать звук в виде изображения, которое считывается камерой и проигрывается в реальном времени?
На ум сразу приходит QR-код или некие его аналоги. В такой код можно записать ссылку на mp3, или даже совсем маленький звуковой файл. Но в первом случае требуется выход в сеть, а во втором — большая плотность кода и повышенные требования к качеству изображения. Кроме того, ни тот ни другой способ не обеспечит мгновенное воспроизведение.
Что, если кодировать звук не в цифровом, а в аналоговом формате? То есть, допустить возможность больших потерь информации с сохранением основных «очертаний» звукового послания. Например, такие потери возникнут при плохом освещении, плохой камере, маленькой картинке, мятой или рваной бумаге с кодом. Пусть со страшными артефактами, но картинка должна звучать.
На протяжении нескольких лет я занимаюсь изучением советского фотоэлектронного
синтезатора АНС, созданного инженером Евгением Мурзиным в период с 1938 по 1958 г. Фишка этого инструмента в том, что музыка создается путем рисования спектрограммы и играется потом неким подобием современного сканера — вертикальное сканирующее устройство просвечивает партитуру, проецируя свет на специальные диски (своего рода оптические преобразователи Фурье), которые готовый модулированный сигнал посылают на фотоэлементы. Такой формат идеально подошел бы для записи звука в графическом виде. Поврежденная или уменьшенная спектрограмма может потерять некоторые гармоники, но сохранит общую картину для последующего воспроизведения. И очень кстати мною был создан программный симулятор синтезатора АНС —
Virtual ANS, способный не только играть такие партитуры, но и создавать, конвертируя аудио-файл в картинку спектра. То, что нужно!
Осталось ответить на последний вопрос — как маркировать границы картинки, чтобы программа-сканер играла именно то, что нужно, не захватывая лишнюю информацию. Решено использовать только горизонтальные маркеры сверху и снизу. Отказ от маркеров по бокам кода, во-первых, упрощает процесс декодирования, а во-вторых, позволяет без особых затрат играть спектрограмму сразу же после обнаружения горизонтальных маркеров. При этом процессом проигрывания можно управлять вручную: скорость и направление задает сам слушатель, свободно сканируя изображение. Ручной режим завораживает, но неравномерность движения и тряска рук накладывают свой отпечаток на звук. Поэтому в программу следует добавить и автоматический режим, когда текущий кадр с камеры застывает и сканируется равномерно без вмешательства пользователя.
Проекту дадим название PhonoPaper. Спецификация кода выглядит следующим образом:
Бесплатная программа-сканер была написана приблизительно за 2 месяца на языке
Pixilang с использованием движка Virtual ANS (для проигрывания сонограммы в реальном времени). На текущий момент она доступна только для Android. iOS-версия появится в ближайшие дни (ждем проверки Apple). Поддержка других систем — в планах. Android-версия использует библиотеку прямого доступа к камере из проекта
OpenCV, которая, к сожалению, совместима не со всеми устройствами, хотя разработчики постоянно ее совершенствуют — с этим пока приходится мириться. Больше всего проблем (падение или черный экран) с Android 4.4.2 — заранее прошу прощения.
Предвижу вопрос о практическом применении. Поэтому привожу небольшой список с примерами использования PhonoPaper-кодов:
- голосовые подсказки или тематические куски музыки на визитках, рекламных плакатах, товарах;
- бумажные открытки с напечатанным звуковым посланием;
- аудио-примеры в учебниках или детских книжках;
- звуковые метки на пластинках, дисках, кассетах;
- звуковая подпись на обратной стороне бумажной фотографии;
- арт-эксперименты;
- изучение основ построения спектральной музыки и звука через ручное рисование PhonoPaper-кодов.
Посмотрим, как это работает в живую:
Из особенностей хочу отметить возможность изменять форму и цвет таких кодов практически без особого вреда для хранимой в них звуковой информации. Приведу пару примеров: