Оглавление:

Простое интернет-радио: KISSIR: 13 шагов
Простое интернет-радио: KISSIR: 13 шагов

Видео: Простое интернет-радио: KISSIR: 13 шагов

Видео: Простое интернет-радио: KISSIR: 13 шагов
Видео: Павел Пламенев - Ночь перед боем. 2024, Ноябрь
Anonim
Простое интернет-радио: KISSIR
Простое интернет-радио: KISSIR
Простое Интернет-радио: KISSIR
Простое Интернет-радио: KISSIR

Иногда это просто должно быть тактильно. Никакого интерфейса. Просто кнопки.

Raspberry Pi в качестве проигрывателя интернет-радио не является чем-то новым, и существует множество инструкций о том, как создать проигрыватель интернет-радио с помощью Raspberry Pi с монитором или без него для потоковой передачи интернет-станций со всего мира. Если бы вы предпочли работать без головы (без монитора), вам все равно потребовались бы средства для взаимодействия с пи-плеером, обычно веб-интерфейс, если не прямое средство связи с хостом, такое как ssh. Эта инструкция будет немного отличаться; мы будем использовать простые нажатия кнопок для отправки команд на пи, тем самым устраняя необходимость в веб-интерфейсе и ЖК-экране. Звучит достаточно просто, правда (?)

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

Ваши навыки python не нуждаются в повышении. Фактически, я буквально перешел от «Hello World» к написанию этого, и, как вы увидите, я позаимствовал много кода - так что, если я могу это сделать и немного задокументировать, у кого-то не должно возникнуть проблем.

Пойдем!

Запасы:

Необходимые материалы

  • Raspberry pi / pi zero w со всеми креплениями: блоком питания, SD-картой и Raspbian или Raspbian lite.
  • Wi-Fi и доступ в интернет
  • Другой компьютер для просмотра веб-страниц и возможности подключения по SSH к raspberry pi
  • Цифро-аналоговый преобразователь (ЦАП) - необязательно, но вы будете благодарны.
  • Усилитель звука
  • Динамики
  • Монтажный провод и перемычки
  • Паяльник и припой
  • Perf Board для кнопок
  • Тактильные кнопки: нормально открытые - по одной для каждого жанра музыки, кнопка питания и дополнительная кнопка отключения звука (рекомендуется 7 кнопок)
  • Жилой блок для всего вышеперечисленного (необязательно, но аккуратно)

Шаг 1. Предварительные требования:

Предварительные условия
Предварительные условия

Мы начнем с предположения, что вы уже настроили Raspberry Pi, ЦАП и усилитель, а также предположим, что у вас есть доступ к Интернету. Из-за большого количества вариантов аудиооборудования, предпочтений и опций для прослушивания звука мы предполагаем, что ваша настройка уже завершена: у вас уже должен быть звук из динамиков, прежде чем вы начнете этот проект. Нам также понадобится ssh для raspberry pi, поэтому, используя конфигурацию pi, убедитесь, что для интерфейсов включен ssh. Я буду использовать Raspbian lite и рекомендую вам установить новую версию последней копии на свежую SD-карту, предназначенную для этого проекта. В случае успеха мы построим автономное устройство, которое можно будет оставить включенным 24/7 в качестве выделенного устройства для прослушивания.

Шаг 2: установите Python и Pip

Я предпочитаю использовать ssh для pi, используя другой компьютер, и выполнять все необходимые функции, используя сеанс ssh, но я предполагаю, что можно изначально настроить pi на монитор, клавиатуру и мышь и работать непосредственно с pi, пока он не станет работает, а затем развернуть как автономный.

Сначала проведем плановую проверку нашей системы и версии Python:

sudo apt-get update

sudo apt-get upgrade

Убедитесь, что Python установлен. В сеансе терминала введите в командной строке следующее:

python --version

Если вы видите python 2.7.13 (или более раннюю), давайте установим python 3. +:

sudo apt-get install python3

sudo apt-get install python-pip

sudo apt-get install python3-pip

sudo pip3 install --upgrade pip

Шаг 3. Установите MPG123 и Adafruit Blinka

Теперь, когда фундамент заложен, осталось еще несколько инсталляций:

MPG123 - это аудио-программа, которая воспроизводит нашу музыку. Установка действительно проста:

sudo apt-get install mpg123

Я провел много исследований и нашел на веб-сайте Adafruit отличный шаблон для воспроизведения звуковых файлов с помощью нажатия кнопок, поэтому вместо того, чтобы начинать с нуля, давайте продолжим путь, который люди из Adafruit уже проложили для нас. Их программа просит нас установить Adafruit Blinka:

$ sudo pip3 установить adafruit-blinka

Прежде чем идти дальше, давайте быстро проверим, настроена ли Alsa:

aplay --version

наши результаты должны быть такими: версия 1.1.3 от Ярослава Кисела

Шаг 4: Отрегулируйте громкость до 50% в Alsamixer

Отрегулируйте громкость до 50% в Alsamixer
Отрегулируйте громкость до 50% в Alsamixer
Отрегулируйте громкость до 50% в Alsamixer
Отрегулируйте громкость до 50% в Alsamixer

Теперь давайте примем меры предосторожности и отрегулируем громкость до 50%, чтобы избежать оглушительных сюрпризов:

В командной строке введите alsamixer:

alsamixer

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

Шаг 5: Домашнее задание: найдите 5 радиостанций, которые стоит послушать

Домашнее задание: найти 5 радиостанций, которые стоит послушать
Домашнее задание: найти 5 радиостанций, которые стоит послушать
Домашнее задание: найти 5 радиостанций, которые стоит послушать
Домашнее задание: найти 5 радиостанций, которые стоит послушать

Нам понадобится по одной станции для каждой кнопки. Собственно, нам понадобится url станции. Нажатие кнопки вызовет URL-адрес интернет-радиостанции в виде простого однострочного кода. Однако мы забегаем вперед, так что у нас есть домашняя работа; найти 5 радиостанций и их адреса. Найти 5 радиостанций несложно, но найти их URL-адреса может быть непросто. Я объясню почему через минуту.

SomaFm * - отличный источник для начала, особенно если вы еще не знаете, что хотите послушать. У них есть широкий выбор эклектичной музыки, ни один из которых я не считаю оскорбительным, никакой рекламы, и самое лучшее: они открыто делятся своими URL-адресами. Чтобы получить URL-адрес, щелкните изображение интересующей вас станции и на левой панели навигации нажмите «Прямые ссылки на поток». Оттуда найдите раздел MP3 и очистите URL-адрес с максимальной скоростью воспроизведения (например, 128 битов 64). Вставьте URL-адрес в текстовый редактор или блокнот.

Например, для очистки Christmas Rocks URL-адрес будет: (нам не нужно описание сервера)

ice4.somafm.com/xmasrocks-128-mp3

За пределами мира SomaFm все становится немного сложнее. Многие станции используют посредника между слушателем и станцией, будь то для рекламы, маркетинга или, возможно, отслеживания - и я обычно стараюсь избегать станций такого типа. Поскольку посредники предпочитают, чтобы вы слушали станцию через них, обычно довольно сложно найти URL-адрес; И здесь на помощь приходит Vtuner.

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

Шаг 6. Необязательно: очистите URL-адреса с помощью Vtuner

Необязательно: очистить URL-адреса с помощью Vtuner
Необязательно: очистить URL-адреса с помощью Vtuner
Необязательно: очистить URL-адреса с помощью Vtuner
Необязательно: очистить URL-адреса с помощью Vtuner

А теперь самое интересное … На домашней странице Vtuner проверьте ссылку на их огромный список станций в правом верхнем углу. Выберите жанр музыки, который вас интересует, а затем выполните сортировку по максимальной скорости, после чего вы увидите список станций. Выберите станцию, которая, по вашему мнению, может вам понравиться, нажмите ссылку или кнопку воспроизведения и прослушайте музыку. Если это не для вас, не беспокойтесь, повторяйте процесс, пока мы не найдем тот, который подходит для длительного удовольствия. На моем снимке экрана я выбрал цифровую импульсную версию музыки кантри, а на следующем экране я заметил, что она играет из Хорватии. Кантри из Хорватии звучит довольно интересно.

Мне это нравится. Но как мне получить URL-адрес? Просто щелкните правой кнопкой мыши по пустому пространству справа от изображения станции под названием станции, выберите «Просмотр источника страницы» и прокрутите вниз примерно до строки 150. Мы ищем строку с надписью «// Попробуйте обрабатывать ледяной дождь ». И URL-адрес находится сразу под ним!

orion.shoutca.st:8110/stream

Довольно ловко!

Повторяйте этот шаг, пока в нашем списке не будет как минимум 5 станций.

Двойное опционально: в качестве дополнительной меры, если вы можете найти 5 жанров музыки, которые вас интересуют (в отличие от 5 станций), создайте список радиостанций для каждого жанра и сохраните списки в виде текстовых файлов. Мы вернемся к этому позже.

Шаг 7: Настройте наши кнопки

Настройте наши кнопки
Настройте наши кнопки
Настройте наши кнопки
Настройте наши кнопки

Самая важная часть! Снимите пыль со старого паяльника или, по крайней мере, подключите его и запекайте пыль. Пора припаять. Я использую 4-х контактные кнопки мгновенного действия, нормально разомкнутые. Я построю набор кнопок (фото слева) и прикреплю их к какой-нибудь плате. На фото сложно сказать, но все выступы кнопок идут с севера на юг. С правой стороны вы можете увидеть, где я проложил шину заземления для своих заземляющих проводов и прикрепил несколько перемычек с штыревым концом к противоположной стороне каждой кнопки. Вместо того, чтобы иметь 7 заземляющих соединений, шина позволит нам использовать одно заземляющее соединение с пи для всех. Конечным результатом является тонкая вафельная плата, которая будет прикреплена к верхней части радиоприемника с помощью нескольких винтов через предусмотренные пилотные отверстия. Только верхушки пуговиц будут видны через паз, который я вырезал сверху. Поскольку моя верхняя поверхность имеет толщину всего 1/4 дюйма, я хочу быть осторожным, чтобы не перетянуть винты. Клей может быть полезным, чтобы удерживать перфорированную плату прикрепленной к радиоприемнику.

Шаг 8: Определите наши контакты GPIO

Определите наши контакты GPIO
Определите наши контакты GPIO
Определите наши контакты GPIO
Определите наши контакты GPIO

В моем единственном другом руководстве я представил новое использование старых голосовых шапок Google AIY версии 1. В этом непопулярном (или узко популярном) руководстве я упомянул, насколько впечатлен дизайном самой шляпы. У меня есть несколько штук, так что я буду собирать прототип, используя шляпу, поскольку на ней есть и ЦАП, и усилитель.

Теперь давайте определим шесть контактов, на которых будут нажиматься наши кнопки. Я попрошу вас сосредоточиться на левой части шляпы Google AIY, где написано «сервоприводы». Есть столбик из 6 люверсов для штифта, куда я буду прикреплять и припаять концы мужской кнопки из нашего предыдущего шага. Если вы работаете без шляпы Google Aiy voice, не беспокойтесь - фотография справа поможет вам. В любом случае мы будем работать с контактами 26, 06, 13, 05, 12 и 24 gpio (BCM) сверху вниз (или 0-5). GPIO # 24 будет зарезервирован для дополнительной кнопки паузы.

Не забудьте также подключить заземление.

Шаг 9: Код

Я сомневаюсь, что код здесь сильно изменится, однако для получения последней версии кода Python посетите мой github. Я приложил копию от 18.12.2019 под названием pytiful3.py.

Это не самый эффективный код, который вы когда-либо видели, и он довольно подробный, но он выполняет свою работу.

Давайте начнем с создания песочницы для игры. В нашем домашнем каталоге создайте на Raspberry Pi каталог под названием kissir:

мкдир киссир /

и скопируйте содержимое файла pytiful3.py в каталог, открыв образец файла в текстовом редакторе и используя

судо нано киссир / pytiful3.py

скопируйте / вставьте содержимое файла в наш только что созданный скрипт python. Не забудьте сохранить нашу работу, нажав Ctrl-x, Y и введите.

Если вам нужен быстрый обзор сценария, мы импортируем модули Python, которые нам понадобятся, а затем определяем наши кнопки и назначаем пин gpio каждой из 7 кнопок. Будет 5 радиостанций (вы можете редактировать их по своему усмотрению), кнопку остановки и кнопку выключения. Цикл while true выполняется до тех пор, пока не будет нажата кнопка, что в большинстве случаев остановит любое существующее воспроизведение mpg123 и начнет воспроизведение станции, назначенной кнопке, которая была нажата. Кнопка паузы / остановки на самом деле не является кнопкой паузы, а скорее выключателем, поскольку мы не можем приостанавливать интернет-радио. Интернет-радио никого не ждет.

Шаг 10: Протестируйте в нашей песочнице

Тест в нашей песочнице
Тест в нашей песочнице

Перед тем, как развернуть радио, во время сеанса ssh перейдите в папку kissir, где хранится наш скрипт. Мы можем просто запустить сценарий из командной строки вручную, набрав:

python3 pytiful3.py

Если вы сначала заглянули в код, то, вероятно, заметили, что я оставил несколько операторов печати, чтобы мы могли понять, что происходит. Если все сработало, у нас будет подсказка с надписью «Нажмите кнопку». Это говорит о том, что наш скрипт запущен и прошел предварительную проверку кода. Моя первоначальная попытка имела бесконечный цикл «музыка приостановлена - нажмите кнопку, чтобы продолжить», и я обнаружил, что моя кнопка паузы была подключена так, чтобы она всегда была закрыта, а не нормально открыта. Надеюсь, вам повезло с этапом пайки.

Ctrl-C остановит скрипт, если вам нужно прервать его.

Итак, если вы видите «Нажмите кнопку», чего мы ждем? Выберите любую из пяти кнопок радиостанции.

Скорее всего, вы услышите хлопок динамика, чтобы начать воспроизведение музыки, и на данный момент я не могу с этим помочь. Mpg123 допускает суффикс «--preload 1» после адреса станции в команде os.system, однако я не мог сказать, имеет ли это значение. Это должно позволить небольшой буфер.

Еще один фрагмент кода, о котором вы, возможно, задумались: после вызова mpg123 стоит флаг "-f 7000". Это уменьшает громкость до максимального значения. Полный объем будет 32К. Насколько я понимаю, шкала громкости не является линейной, поэтому я не могу сказать, что она составляет всего одну пятую от максимальной громкости, но все же достаточно громко. Мне пришлось это сделать, потому что моя звуковая карта - звуковая карта Google AIY - иногда плохо работает с Alsamixer.

Продолжайте нажимать кнопки по своему усмотрению, расслабьтесь, расслабьтесь и наслаждайтесь комфортом прослушивания.

Шаг 11: Настройте наш код для автоматического запуска при загрузке

Так что, если все работает нормально и вам понравилась наша командная строка в песочнице, сейчас хорошее время для автоматизации загрузки скрипта. Убедитесь, что вы все еще находитесь в каталоге kissir, и поместите код сценария в корзину пользователя:

sudo cp pytiful3.py / usr / local / bin /

Сделайте его исполняемым:

sudo chmod + x /usr/local/bin/pytiful3.py

Напишите сценарий оболочки для его запуска при запуске:

sudo nano pytiful3.sh

И вставьте следующий текст:

#! / bin / sh ### BEGIN INIT INFO # Предоставляет: pytiful3.py # Обязательный-Start: $ remote_fs $ syslog # Обязательный-Stop: $ remote_fs $ syslog # Default-Start: 2 3 4 5 # Стоп по умолчанию: 0 1 6 ### END INIT INFO # убедитесь, что уровень громкости не громкий. TODO # Выполнять определенные функции по запросу системы (регистр «$ 1» в начале) echo «Запуск pytiful3.py» /usr/local/bin/pytiful3.py &;; stop) echo «Остановка pytiful3.py» pkill -f /usr/local/bin/pytiful3.py;; *) echo "Использование: /etc/init.d/pytiful3.sh {start | stop}" exit 1;; esac выход 0

Переместите в init.d:

sudo mv pytiful3.sh /etc/init.d/

Сделайте его исполняемым:

sudo chmod + x /etc/init.d/pytiful3.sh

Зарегистрируйте скрипт для запуска при запуске:

sudo update-rc.d pytiful3.sh по умолчанию

Шаг 12: снова протестируйте

Теперь, когда у нас есть сценарий, загруженный для запуска при запуске, просто помните, что любые вносимые нами изменения должны быть перенесены в корзину пользователя, а наш красивый сценарий kissir / pytiful3.py теперь просто сирота. Но с другой стороны, у нас все еще есть песочница, в которой можно поиграть. Я, вероятно, продолжу играть со сценарием, вносить изменения и сохранять его как новую версию в ближайшем будущем. Это все еще рабочий проект.

Сделаем перезагрузку, дождемся перезапуска пи и примерно через минуту снова нажмем кнопку.

Если у вас очень низкая громкость звука, помните, что у нас есть громкость alsamixer на 50%, поэтому мы можем увеличить ее соответственно из командной строки.

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

Эй, а как насчет того списка радиостанций, который мы составили на шаге №6? Что ж, оказывается, у MPG123 есть команда случайного выбора. Это так же просто, как создать список URL-адресов станций, и вместо того, чтобы вызывать URL-адрес одной радиостанции, просто используйте

"btn1234_choice = random.choice (btn1234)", сразу после определения нашего списка станций, где btn1234_choice - наш список. Не забудьте заключить список станций в квадратные скобки , разделенные запятыми. Затем вызов команды подпроцесса воспроизводит наш случайный выбор:

subprocess.call (['mpg123', '-q', btn1234_choice, "--preload 1"])

Шаг 13: упакуйте его, и все готово

Коробка, и мы готовы
Коробка, и мы готовы
Коробка, и мы готовы
Коробка, и мы готовы
Коробка, и мы готовы
Коробка, и мы готовы

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

В зависимости от имеющегося у вас оборудования (динамики, ЦАП и усилитель) вам может быть интересно, как скрыть некоторые из лежащих рядом проводов. Возможно, еще один инструктаж на другой день, но если вы планируете сделать жилой блок, чтобы заправить в него некоторые провода, я рекомендую дать себе много дополнительного места.

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

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

Рекомендуемые: