Или: как распечатать обложку альбома музыки, которую вы слушаете, в режиме реального времени.

Многие ненавидят технологию печати чеков. Это известная спорная тема.

Но как это работает? Как они печатают? Если вы предпочитаете смотреть разговорную версию этого, ознакомьтесь с моей страстной беседой из Offline Camp ниже, в противном случае читайте подробности.

Бумага 📄

В термопринтере чернила не печатаются на бумаге из картриджа. Вместо этого чернила находятся в самой бумаге.

Эти чернила являются термохроматическими, что означает, что они меняют цвет при изменении температуры.

Термопринтер нагревает небольшие участки бумаги, меняя цвет чернил на черный.

Здесь вы можете увидеть, что происходит, когда вы нагреваете его от пламени. Возможно, вы также заметили, что старые квитанции, оставленные в вашем кошельке, в конечном итоге темнеют из-за тепла.

Взломать принтеры

Вместо того, чтобы разбирать кассу, вы можете купить несколько термопринтеров, готовых к взлому. Тот, который у меня есть (на фото ниже), - это Мини-термопринтер для чеков от Adafruit.

Я хотел что-то сделать

Мне нужно было придумать такой проект: что, если бы во время прослушивания музыки обложку альбома того, что я слушал, распечатали в реальном времени?

Казалось достижимым, но мне нужно было проработать две вещи:

В этом проекте я буду использовать JavaScript и Node.js.

Получить музыкальные данные 🖼 🎶

Поэтому сначала я решил использовать Last.fm. Last.fm отслеживает музыку, которую вы слушаете, например в потоковом режиме из Spotify.

У них довольно гибкий API, который позволяет получать всевозможные данные. Вы можете подписаться на API и прочитать документацию здесь: http://www.last.fm/api

Вот пример конечной точки, к которой вы можете получить доступ:

Перейдя по этому URL-адресу и используя метод «получить последние треки» с моим именем пользователя, я могу получить треки, которые сейчас слушаю!

Самая последняя песня, которую я слушал, была песня Bear Cavalry.

Вот упрощенная версия того, что он возвращает. Он возвращает информацию о песне и даже имеет изображение!

Использование Last.fm в узле

Хотя эта конечная точка API уже довольно доступна, существует модуль узла, который позволяет создавать поток воспроизводимых треков.

Это будет полезно при отправке этих изображений и информации на принтер позже.

Печать текста и изображений 🖨 🔥

Теперь у нас есть данные, необходимые для работы с этим принтером.

Команды термопринтера

Термопринтеры могут получать команды через последовательный интерфейс. Вы можете отправить команду на печать символов, штрих-кодов или даже подачи бумаги.

К счастью, вам не нужно делать это вручную, так как для этого есть модули узлов: serialport и thermalprinter.

Первая попытка

Я пытался напечатать обложку альбома. Слева вы можете увидеть, что я пытался напечатать, а справа - как это получилось при печати.

Он грязный, как тест Роршаха, и потерял всю глубину картины ...

Это связано с тем, что как только цвет достигает определенного порогового значения, принтер будет печатать его черным или белым.

Получение глубины с помощью дизеринга

Дизеринг - это намеренное добавление шума (здесь мы добавляем точки) к изображению для создания цвета. Поскольку у нас есть черный и белый, мы можем получить разные серые цвета.

Эти оттенки серого помогут нам достичь ощущения глубины, которой нам не хватает.

Вторая попытка

После применения дизеринга к изображению вы увидите, что отпечаток стал намного глубже! Да-да!

GraphicsMagick

Для создания изображений и дизеринга вы можете использовать GraphicsMagick и нодовой модуль gm.

Конечный результат

Если мы сложим все эти части вместе, у нас будет что-то, что может захватывать музыку, которая сейчас играет, создавать изображения и распечатывать их!

Поскольку это легче сказать, чем сделать, вы можете найти код и некоторую документацию на GitHub о том, как это было сделано.

Ниже вы можете увидеть дрянное видео того, что у меня получилось:

Спасибо за прочтение. Если у вас есть какие-либо вопросы, вы можете задать мне в Твиттере. :-)

Примечание редактора: это увлеченное выступление - одно из многих, которые делятся в Offline Camp, где небольшая группа отдыхающих с разными интересами собирается вместе, чтобы обсудить Offline First. Надеемся увидеть вас на грядущем мероприятии!