HuGu — коллективный плейер музыки Вконтакте на node.js

в 8:53, , рубрики: javascript, music, node.js, метки: , , ,

Зачем это надо? А вспомним ситуацию: в офисе работают несколько человек, и у одного к компьютеру подключены музыкальные колонки. — «Вась, смени LoveRadio! Поставь Рамштайна!» И Вася, отвлекаясь от отчета/игры/мысли: «Надоел Рамштайн, давайте лучше „Поющие трусы“ поставлю? Мегазачотные песни!»

А может ли каждый добавлять свои любимые музыкальные композиции в общий плейлист? Через браузер? Из плейлиста Вконтакте? Да, может.

HuGu — что это такое?
HuGu — это приложение под node.js, которое проигрывает музыку из Вконтакте по плейлисту, который совместно составляют пользователи.

HuGu — коллективный плейер музыки Вконтакте на node.js

Немного предыстории
Как и в любой группе индивидуумов, в нашем коллективе (коллектив как коллектив, таких полно по всей стране, и я, как и многие, работаю в команде разработчиков) каждый разработчик хочет слушать музыку согласно своим предпочтениям. Обычно, конечно, это решается индивидуальными наушниками. Но если есть общие колонки, то можно и совместно слушать. Мы, например, долгое время пользовались mocp на общей машине для создания музыкального фона в офисе. Каждый по ssh мог поставить песню.

Однажды прошлым летом Илья (другой разработчик из нашего коллектива, не я) решил попробовать node.js. А какой смысл пробовать, если нет интересной задачи, которую сам себе поставил? И написал за несколько вечеров прототип приложения. И мы стали им пользоваться и забыли про mocp. А в эти новогодние выходные дни мне также захотелось приобщиться к тренду, и я немного переписал приложение.

А почему HuGu?
Сначало было Hurdy-Gurdy (Колёсная лира, или попросту шарманка), но для краткости стали именовать HuGu.

Как работает HuGu?
Под node.js запускаются веб-сервер и websocket-сервер. Каждый пользователь заходит на страницу веб-сервера и авторизиуется через OAuth Вконтакте к приложению HuGu. После авторизации пользователь может получить свой плейлист Вконтакте и из него добавить композиции в плейлист. Всё общение между клиентом и сервером происходит сообщениями по websocket'у.

Плейлист устроен по принципу очереди. На сервере мы используем mplayer для проигрывания mp3-файлов. Mplayer по очереди проигрывает файлы, добавленные пользователями. Также можно изменять громкость из веб-интерфейса (работает через amixer).

Мы это сделали для себя?
Конечно, прежде всего мы сами пользуемся HuGu. Обычно в офисе находится 5-6 разработчиков, каждый из которых периодически предлагает послушать разные композиции (на прошлой неделе мы слушали разные 8-битные мелодии).

Как-то незаконченно выглядит приложение...
Ну, еще недавно оно вообще вот так выглядело:

HuGu — коллективный плейер музыки Вконтакте на node.js

Но работа продолжается. В JavaScript'е — «я еще не волшебник, я только учусь», поэтому размещаю информацию о HuGu для получения фидбека. Отвечу на любые вопросы, приму во внимание замечания, воспользуюсь рекомендациями. Особенно касающиеся кода.

Почему музыка только из Вконтакте?
Вконтакте имеет удобное API для получения музыки. У многих там есть подборки любимых композиций, из которых можно быстро накидать музыки для прослушивания в офисе. Хотя, конечно, иногда Вконтакте тормозит или даже бывает недоступен — тогда приходится искать музыку на других ресурсах или на локальной машине, но это всё-таки редко происходит.

Кстати, в качестве эксперимента добавлен небольшой список радиостанций. Ибо иногда замечаешь, что сидишь в тишине или просто не знаешь, что хочешь послушать.

Но OAuth Вконтакте?
Тут самая большая неприятность, т.е. при создании веб-приложения Вконтакте, коими являются клиенты в веб-браузере, приходится указывать в настройках приложения во Вконтакте ip-адреса и/или домены, куда будет сделан редирект.

Два варианта решения проблемы:
1. Создать свое приложение, в нем указать свой ip-адрес. В настройках HuGu указать id приложения Вконтакте.
2. Использовать домен music.local, который я добавил в свое приложение. Но его необходимо либо прописывать в hosts на каждой использующей машине, либо задействовать свой DNS-сервер.

Либо использовать другую сокровищницу музыки? Варианты?

А почему композиции после проигрывания удаляются из плейлиста?
Так сложилось исторически. Плейлист как очередь удобен тем, что проигранные композиции удаляются, и нам больше не мешают, каждый видит, что скоро подойдет очередь для той или иной композиции.
Но вот моей супруге это не очень нравится, ей хочется как в классическом WinAmp'е: плейлист и шаффл. А как вам было бы удобнее?

Т.е. HuGu — это клиент-серверное приложение?
Ну, да. На сервере работает node.js с нашим приложением, к серверу также подключены колонки. А все пользователи через браузер подключаются к серверу и там проигрывают музыку.

Сервером может быть и чей-то рабочий компьютер, или специализированный компьютер. Мы, например, используем nettop (Foxconn Netbox DL-535W) с Ubuntu Server. А дома у меня HuGu стоит на моем рабочем настольном ноуте (также Ubuntu), к которому подключены колонки, а супруга со своего ноута (Windows), лёжа на диване, ставит музыку. Очень удобно.

А как еще можно использовать HuGu?
Скоро будут корпоративные вечеринки по случаю влюбленных, настоящих мужчин и прекрасных женщин — можно предложить каждому со своего смартфона поставить свою любимую песню, а не как это обычно происходит: «Эй, диджей! Поставь мой компакт-диск!».

А еще можно не ставить в кухню отдельные колонки и не стримить туда аудиопоток, как это делают умельцы. А просто с планшета из кухни прибавлять громкость на колонках в комнате.

Где скачать?
GitHub: https://github.com/antirek/hugu

P.S. Желаю всем отличной совместной разработки: )

Автор: antirek

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js