Arduino Yún: Слушаем Интернет-радио. И через Малину и через Cubietruck.

Тема в разделе "Глядите, что я сделал", создана пользователем ИгорьК, 4 янв 2015.

  1. ИгорьК

    ИгорьК Гуру

    Все очень просто. Нам необходимо следующее:
    Arduino Yun;
    Аудиокарта Creative Sound Blaster Play (USB);
    Хороший двухамперный блок питания;
    Кабель мини-джек 3.5.
    Усилитель. Тип - на ваше усмотрение.

    1. Соединение простейшее. Карту в USB Arduino Yun, шнурок от карты - в усилитель (или пользуемся наушниками), питание - куда положено.

    2. Вспоминаем, что написано здесь, на предмет заведения в сеть и соединения через PuTTY.

    3. Выполняем через PuTTY:
    Код (Text):
    opkg update
    opkg install kmod-usb-audio
    opkg install madplay
    4. Загружаем в Yun код:
    Код (C):
    #include <Process.h>

    Process p;

    void setup() {
    Bridge.begin();
    delay(60000); // Ждем, пока Линукс часть стартует и подхватит Интернет.

    // Милицейская волна
    p.runShellCommandAsynchronously("wget -q -O - http://81.19.85.196/mv128.mp3 | madplay - -Q --no-tty-control &");

    // Авторадио
    // p.runShellCommandAsynchronously("wget -q -O - http://89.20.132.26:8000/v3_1 | madplay - -Q --no-tty-control &");

    // Дорожное радио
    // p.runShellCommandAsynchronously("wget -q -O - http://dorognoe.hostingradio.ru:8000/radio | madplay - -Q --no-tty-control &");

    // Радио Парадиз 192 кбт
    // p.runShellCommandAsynchronously("wget -q -O - http://stream-tx3.radioparadise.com:80/mp3-192 | madplay - -Q --no-tty-control &");

    }

    void loop(){

    }
     
    4. Через минуту после загрузки - слушаем радиостанцию Милицейская волна. Или Авторадио - как там в коде настроите.

    С Новым Годом ;) OpenWRT Internet Radio.
     
    Последнее редактирование: 23 янв 2015
    acos нравится это.
  2. ИгорьК

    ИгорьК Гуру

    P.S. Ссылка на источник, в котором также просто показано, как проиграть mp3 файл.
    Ссылка на тему, в которой есть много про радио, на OpenWRT. Тоже полезное место.
    Ну и тем, кто захочет повесить воспроизведение станций на кнопки. Для этого следует выполнять последовательно два процесса. Первый - останавливает воспроизведение, второй - запускает другое. Псевдокод:

    Код (C):
    if (SATATION button pressed) {
        p.runShellCommand("killall madplay");   // Останавливаем проигрыватель
        while(p.running());    // Ждем отработки процесса
        // Милицейская волна - запускаем
        p.runShellCommandAsynchronously("wget -q -O - http://81.19.85.196/mv128.mp3 | madplay - -Q --no-tty-control &");
    }
    if (STOP button pressed) { // А это просто выключить воспроизведение
        p.runShellCommand("killall madplay");
        while(p.running());
    }

     
     
  3. Круто, но очень дорого
     
  4. Apofiz

    Apofiz Гик

  5. ИгорьК

    ИгорьК Гуру

    Ну, пофлудим...
    Дорого? На этом сайте в принципе нет ничего дорогого. Вот сюда загляните. Попробуйте собрать и посчитать сколько Вам обойдется, например, коптер. Вот магазин, где все есть.
    Соберите простейший коптер: 4 мотора, 4 винта, 4 регулятора, рама, шасси, полетный контроллер, аппаратура управления, литий-ионный аккумулятор, зарядник для аккумулятора. Это минимум.
    Не важно, что у вас нет опыта - просто выберите самые дешевые товары из перечисленных (оно точно не полетит, но не суть, мы же считаем) и все сложите. Добавьте процентов 10 на инструмент. Цена в Москве. Хорошо, уменьшите на 30% - это вы заказали на ебее. Впечатляет?
    А теперь посмотрите сколько людей тусуются на форуме со своими коптерами, вертолетами, планерами и т.п.
    Как можно сравнить коптер и интернет-радио? Запросто, если и то и другое признать хобби. Какая разница, на что вы тратите деньги.

    При всем уважении к авторам этого устройства, оно мне напоминает наш КАМАЗ. Автомобиль постоянно берет призы на гонках, но популярностью не пользуется, и люди предпочитают Скании, Вольво, Маны и Мерцедесы.
    Я бы его повторил только если бы у меня случайно оказались эти детали. Так, ради развлечения.
    Полагаю, Apofiz, Вы его повторили? И как работает? Делитесь. Нравится смотреть в чудесный экран Нокии и наблюдать удивительную информацию? Как, связь не рвется, работает устойчиво? Куда и как его можно вставить? Качество звука? Функционал, говорите? Ну да. Две кнопочки и каракули на экране.

    Да, есть у нас такой спорт: сделать чудо-юдо за минимальные деньги. И страшно гордиться этим.
    Я не сноб, я сам когда-то собирал запчасти по помойкам. По свалкам. Было. Но совсем не гордился этим. Абсолютно не гордился. А сейчас, когда человек с руками и головой может заработать на хорошую вещь... Да уж.
    Услышал тут фразу: "можно вывезти девушку из деревни, но деревню из девушки - никогда". Так и с этим спортом: "дорого - фииии. Вот из трех отверток, ведра гаек и старой бочки сделать гоночный автомобиль - это да!" Ничего, что он расыпается и неуправляем - катится же...

    Вы видели, сколько народу ездит с противотуманками без тумана и китайским ксеноном? Это из той же оперы.
     
    Последнее редактирование: 3 фев 2015
  6. ИгорьК

    ИгорьК Гуру

    Теперь ближе к теме.
    Интернет радио, оказывается, уже действительно сделали до нас. Но не по ссылке от Apofiz, а вот по этой.
    Вам нужны три вещи:
    Малина
    Звуковая карта (эту я проверил) или DAC, в принципе, можно почти любой.
    wi-fi свисток - не любой. Из списка. У меня заработал этот. А этот не заработал, хотя есть в списке.
    Дальше все просто. С сайта скачиваем образ системы. Записываем на флэшку программой Win32DiskImager.
    Втыкаем в сеть, включаем, никаких мониторов, клавы и т.д. не надо.
    Находим малину в сети и через веб-интерфейс конфигурируем wi-fi и аудиовыход. Перегружаем и получаем готовое веб-радио и сетевой аудио-плейер файлов из NAS.
    Вот так это выглядит у меня. Пока так:
    332211.jpg
    И классно работает:
    20150111_164501.jpg
     
    Последнее редактирование: 16 янв 2015
  7. ИгорьК

    ИгорьК Гуру

    А Ардуино Yun? Вот дальнейшее направление работы:
    20150111_192513.jpg
    radio.jpg
    Планирую добавить экран и энкодер. Только собрал железо.
    Станции будут храниться в файле, с которым работает Linux. Выбор станции осуществляется либо энкодером либо через веб-интерфейс. На экране отражается информация выбора, а во время воспроизведения - название станции. Это первый этап.
    Вторым этапом хочу поменять madplay на mpd. Это позволит выводить на экран информацию с передающих сайтов. Вот такие планы.
     
    Последнее редактирование: 25 янв 2015
  8. Apofiz

    Apofiz Гик

    К сожалению не повторил тупо денег нет купить мп3 модуль (представляете в Китае нашел за 800руб) Но увы при моей зарплате это дорого . Накоплю обязательно соберу и отчитаюсь. Вы собирает на том ч о есть у вас Ардуино Уин по прайсу Амперки 4690руб для вас это не дорого? ля меня дорого. На Малине давно все собрано дык и Малина не дешовая а кроме хоббби еще и кушать надо это так проза.........
    Так что
    Так и есть. У вас есть Ардуино Уин у нас нет вот и дорого. Дык тогда уж Лично мне проще вот такая мамкаhttp://www.ieiworld.com/product_gro...37740140&id=08165589074693367093#.VLK9xHvdS9I есть на ней хоть черта собрать можно и самое главное бесплатно потому что она у меня есть а у вас нету поэтому не меряйте всех по себе.
     
  9. ИгорьК

    ИгорьК Гуру

    Продолжим флуд.
    Вы ничего не попутали? Это Вы явились сюда, и, померяв тему ПО СЕБЕ, написали, что это (1) дорого и (2) плохо.
     
  10. ИгорьК

    ИгорьК Гуру

    Узелки на память.

    1. Установка MPD и MPC осуществляется (Для Yun!!!!)
    Код (Text):
    opkg update
    opkg  install mpd-full
    2. Правим файл /etc/mpd.conf (вариант!!!)
    Код (Text):
    audio_output {
            type            "alsa"
            name            "My ALSA Device"
            device          "hw:0,0"        # optional
            format          "44100:16:2"    # optional
            mixer_type      "software"      # optional
            mixer_device    "default"      # optional
            mixer_control  "PCM"          # optional
            mixer_index    "0"            # optional
    }
    3. Узнаем все через:
    Код (Text):
    mpc help
    4. Запускаем радио:
    Код (Text):
    mpc add http://stream-tx3.radioparadise.com:80/mp3-192
    mpc play
    5. Узнаем что там играет:
    Код (Text):
    echo "currentsong" | nc localhost 6600 | grep -e "^Title: " -e "^Name: "
    6. Пишем это же скриптом в файл для дальнейшего чтения на дисплей:
    Код (Text):
    #!/bin/ash
    echo "currentsong" | nc localhost 6600 | grep -e "^Title: " -e "^Name: " | sed "s/^.*: //" > radioinfo.txt
    exit 0
    Где " sed "s/^.*: //" " - удаляет слова Title: и Name: с пробелами после них.
     
    Последнее редактирование: 21 янв 2015
    acos нравится это.
  11. ИгорьК

    ИгорьК Гуру

    Сделаем очередной шаг в построении радио на Arduino Yun.
    Установим mpd, как указано в предыдущем посте.
    Далее, откусим существенную часть вот этого проекта. Добавим веб-интерфейс к нашему радио, причем интерфейс позволяет не только проигрывать, но и добавлять радиостанции.
    У него пока есть недостаток - станции не сохраняются при перезагрузке. Но это отдельная тема. Мы просто загрузим плей-лист, который будет сохраняться всегда. Добавление радиостанций тоже возможно, но на время сессии. Руками, конечно, это все исправимо.

    Итак, в нашу папку Yun /srv/www распакуем архив. Можете его взять с сайта - там есть папка Webinterface - вот ее и закидываем.
    Можете закинуть файл, что прилагаю я. Отличие от авторского - конвертирует кириллицу в транслит.
    Затем выполняем следующие команды - создаем три папки:
    Код (Text):
    cd ~
    mkdir .mpd
    mkdir music
    mkdir .mpd/playlists
    После этого, в директорию /root/.mpd/playlists закидываем плейлист, который прилагаю. Вы можете править его на свой вкус - главное не ошибайтесь с синтаксисом.
    Выполняем следующие команды:
    Код (Text):
    mpd
    mpc
    mpc load list.pls
    Теперь, перейдя в веб-интерфейс, вы должны увидеть следующее:
    radio2.jpg
    Остается добавить в автозапуск инициализацию mpd и загрузку плейлиста.
    Редактируем файл /etc/rc.local. В него и добавляем:
    Код (C):
    mpd
    mpc
    mpc load list.pls
    # mpc play 1 // если хотите, чтобы запускалась первая станция
     
    PS. Не забудьте в Yun загрузить новый скетч - какой-нибудь blink. А то скетч из первого поста испортит все дело. Или, если подключен дисплей, выведите на него какой-нибудь анекдот.
    Сейчас задействована только Linux часть Arduino Yun. До МК руки не доходят.
    Задача вывода информации на дисплей в целом не сложна. В предыдущем посте, в последнем пункте показано, как вывести информацию с плейера в файл, и прочитать его не сложно путем организации соответствующего процесса. А вот как запускать станции - пока не понял.
     

    Вложения:

    • list.zip
      Размер файла:
      569 байт
      Просмотров:
      296
    • radio.zip
      Размер файла:
      263,1 КБ
      Просмотров:
      471
    Последнее редактирование: 2 фев 2015
  12. ИгорьК

    ИгорьК Гуру

    UPD. 02.02.2015
    Прикладываю сюда файл index_web_api.php . Этот файлик из архива radio.zip предыдущего поста. От прежнего он отличается тем, что
    1. веб-интерфейсе показывает не транслит, а русские буквы. (Потому и прикладываю)
    00011.jpg
    2. при вызове этого файла в папку /opt/radio отправляется файл infosong.txt , который в транслите содержит информацию о воспроизводимой музыке - для ЖК индикатора.
    3. при вызове этого файла в папку /opt/radio отправляется файл infostation.txt , который в транслите содержит информацию о станции - для ЖК индикатора.

    Не забываем в папке /opt/radio создать эти два файла с любым содержанием - они потом будут перезаписываться.

    Как мы его будем постоянно вызывать? Внесем в загрузку другой файл (тоже прилагаю) - rollstationinfo.sh . Его разместим в папке /opt/radio и не забудем сделать исполняемым. Запускать будем в фоне - отредактируем файл /etc/rc.local, конец которого теперь будет выглядеть так:
    Код (Text):
    mpd
    sleep 1
    mpc
    sleep 1
    mpc load list.pls
    sleep 1
    mpc play 1
    sleep 1
    /opt/radio/rollstationinfo.sh &

    exit 0
     
    Теперь ЖК читает файл infosong.txt и показывает что там играет. Код пока не прилагаю - еще до конца не доделал.
     

    Вложения:

    Последнее редактирование: 2 фев 2015
  13. shaman1010

    shaman1010 Нерд

    День добрый. Интересное начинание.
    Вот здесь давно живет проект с реализацией веб-радио на недорогом роутере+USB звуковушка.
    Можете просветить (либо "отослать" на прочтение почему лучше использовать mpd вместо madplay, кроме возможности вывода текстовой информации).
    И по Вашим проектам:
    1) Как реализовано продолжение проигрывания при кратковременном пропадании канала связи?
    2) Как планируете реализовать (если планируете) воспроизведение последней игравшей станции при откл/вкл питания (не выбранной, а именно последней играющей)
    3) Зачем в малинке использовали внешнюю карту? (там встроенный звук есть, а в "плюсовых" модельках еще и подчищенный). Creative настолько лучше звучит?

    Спасибо за ответы.
    Мои вопросы больше связаны с необходимостью править реализацию в указанном мной выше проекте, а кто, кроме энтузиаста, поможет это сделать с минимальными накладными расходами для железки (будь то роутер, малинка, либо чтото еще) :)
     
  14. ИгорьК

    ИгорьК Гуру

    На сайт cyber-place я здесь ссылку давал - там много информации по веб радио. И не только по конкретно Вашей ссылке. Есть еще что почитать по OpenWRT.
    Все что буду отвечать - глубоко частное мнение, поскольку я самодельщик, а не специалист в этих вопросах.

    Итак, от madplay я отказался.
    mpd - предпочтительнее потому, что позволяет на старте загрузить плейлист даже большого размера и работать с ним. Позволяет легко "достать информацию" о станции и музыке, а также переключить станцию простой командой типа mpc play 3, а не загрузкой адреса новой станции, что очень важно для Yun.

    1. Продолжение проигрывания никак не реализовано, потому что Yun цепко держит wifi, а mpd - сам возобновляет потерянное проигрывание. Проверено уже парой недель постоянного воспроизведения.

    2. Способов много. Наиболее простой - в памяти линукс иметь файл с номером играющей станции. При выключении этот файл не будет изменен. А при старте ничто не мешает считать его скриптом и запустить именно эту станцию той же командой (внутри скрипта) mpc play (номер станции).

    3. В обычной малинке В, везде пишут, звук отвратительный. Я, честно говоря, даже не проверял, потому что звуковую карту купил для Yun и с ней сразу работал. В В+ вроде звук получше.
    Но тут вот какое дело. Эта бодяга с малинкой у меня тащит звук на очень приличный усилитель с очень приличной акустикой. (Не той что на фото - есть еще одна.) Малинка воспроизводит losless записи на ней. Как Вы понимаете, воспроизводить losless через штатное малиновое устройство, это не правильно.
    В общем, через Sound Blaster Play звучит это все очень недурственно, причем явно слышна разница между радио, обычно 128-192 кбт, mp3 - 320 и losless. Так что карта себя оправдывает. Естественно, на аудиосистеме, если просто динамики "чтобы играло на кухне" - можно обойтись без нее.

    Как резюме - могу по своему скромному опыту рекомендовать к повторению Малина+Volumio+ USB звук для комфортного воспроизведения радио и музыки с домашних складов.
    Кроме того, заказал себе приблуду hifiberry. Как прибудет - отчитаюсь.
    Yun со звуковой картой планирую воткнуть в один старый бум-бокс, который звучит очень хорошо, но кассеты, диски я не использую, а usb и флэш он не понимает.
     
    Последнее редактирование: 3 фев 2015
  15. shaman1010

    shaman1010 Нерд

    Здесь вопрос не в том, цепко ли железка держит канал, а в пропадании самого канала по независящим от нас причинам. Если mpd это умеет делать автоматом - это уже большой плюс в его сторону (если madplay этому нельзя научить, конечно)
    Здесь есть уже существенные различия. В микропроцессорных железках для этого можно использовать диапазон памяти в eeprom, а в роутере - все временное нужно хранить в ram, иначе во флешке будет "дырка" при частом переключении каналов (а может и не при частом). Собственно вопрос больше с этим связан.
    Если честно - не понимаю. Там же есть hdmi-выход, а в любом человеческом ресивере (как я понял - вы о таком упоминали) есть hdmi входы. И звук в цифре доходит до ресивера без джиттера и искажений. Т.е. на входе ресивера получаем неискаженную цифру, соответствующую первоисточнику, вне зависимости от среды передачи (в этом, собственно и достоинства именно цифровой передачи контента).

    Вот здесь самоделкин в конце своих мучений таки добился нужного, и сверил исходящий и результирующий файлы в HEX-е. "Самоделкин" применяется исключительно с уважительным оттенком, сам такой :)
     
  16. ИгорьК

    ИгорьК Гуру

    1. Я проблемы пропадания канала не видел и на madplay. Возможно у меня канал хороший, а может чего не замечал. Были случаи, когда madplay замирал на минуту, а потом восстанавливал соединение. То же и mpd. Не сталкивался с этой проблемой.
    2. Я знаю как реализуется eeprom в МК, но пользоваться этим не буду и вот почему. Операционка в Yun да и в Малине переносятся на SD карту. С нее все и работает. Будет там одной дырой больше или меньше - не важно.
    3. Вы правы про HDMI. Будет возможность - попробую. Однако у Volumio отсутствует графический интерфейс, с которым, обычно, связан звук на HDMI. Я перечитывал темы с сайта Volumio и не встречал там такого варианта выхода звука. Проверю.

    А что касается самоделкина - там другое железо. Для меня интересен процесс изучения темы. Про Yun у нас практически ничего не написано, мне интересно освоить самому. Где-то подглядываю чужие решения. Спасибо за наводку.
     
  17. shaman1010

    shaman1010 Нерд

    На прошивке CyberWRT (по сути OpenWRT с плюшками) - при перезагрузке входного роутера (интернет-канал пропадает на минуту) стрим падает и позже не поднимается. Может нужно как-то указать madplay-еру чтобы он продолжал воспроизводить автоматом? Как? При отключении входного канала - оба процесса wget и madplay активны.


    Важно, особенно на microSD, особенно, когда операционка из-за нечитаемого блока, решит, что это ошибка в разметке файловой системы и сбросит ее в дефолтное состояние.

    Ну и что, что другое - там процесс с результатом. А на каком железе (если это линукс) не особо принципиально.
     
  18. ИгорьК

    ИгорьК Гуру

    Ну а что мануал по мадплею говорит?
    Я не уверен, что файл, удерживающий информацию о воспроизводимой станции, находится все время физически в одном месте. А даже если и так, то там кроме него еще туча чего находится, постоянно перезаписываемого. Какая разница где что упадет первым. Раз есть СД в принципе - она может убиться и от других файлов.
    Возможно я чего-то не понимаю, но это мой уровень, он невысок.
    Сегодня доделал вывод информации на дисплей. Название станции отражается в верхней строке постоянно, а в нижней - информация о музыке. Если она длиннее 16 символов - бегущая строка. Код завтра выложу. Там не только скетч, но и изменения в скриптах.
     
    Последнее редактирование: 4 фев 2015
  19. ИгорьК

    ИгорьК Гуру

    Несколько слов о логике отображения информации.
    Интернет станции выдают или не выдают принимающему информацию о себе и воспроизводимом контенте. Делают это все по-разному. Разный объем информации и ее "красота". Так, на фото ранее видно, что отличная радиостанция "Радио Си" из Екатеринбурга пишет о себе много буков. Гораздо больше 16.
    "Радио Парадиз" вещает о себе следующее: "Radio Paradise - DJ-mixed modern und classic rock, world, electronica & more - info: radioparadise.com". А вот радио "Лучшие Песни" заявляет о себе так: "best_songs".
    В общем, этот кавардак и ограничение в 16 символов строки ставят непростую задачу сделать все более менее прилично.
    В библиотеке ЖК есть функция scroll, которая двигает изображение в указанную ей сторону. Но делает она это в отношении обоих строк сразу. Кроме того, начиная с некоторой длины строки все налезает друг на друга. Зрелище отвратное. При двух строках более менее приличной длины все рябит перед глазами.
    Решил следующее - название станции будет отражаться всегда без скроллинга. Информация о музыке - в зависимости от длины: если 16 и меньше - статика, больше - скроллинг.
    Информацию о музыке будем брать от радиостанции, а информацию о самой станции - из плейлиста, который, как понятно, мы делаем ручками и будем обязаны обзывать станцию с учетом ограничения. Вот "Милицейская волна" имеет 17 символов в названии. Можно назвать "Police Wave". Или типа того.
    Это первые пояснения к логике кода. Собственно, на видео все это заметно.

     
    Последнее редактирование: 4 фев 2015
  20. shaman1010

    shaman1010 Нерд

    Кстати, а чем web-интерфейс на русском не устраивает?
    Вот подправил немного. Просто заменить в www/webradio
    Так, в качестве наброска...
    Завел mpd на TP-Link 703n.
    Сверху это радио. Пока нравится чуть больше, чем от CyberWrt.
    Видно песню, плюс дизайн под телефоны меняется, соответственно можно лучше адаптировать. Да и OLED 1,3" добавить, получится вполне симпатично.
     

    Вложения:

    Последнее редактирование: 5 фев 2015