{"id":192,"date":"2021-12-28T10:44:31","date_gmt":"2021-12-28T08:44:31","guid":{"rendered":"https:\/\/tartine.linkpc.net\/?p=192"},"modified":"2021-12-28T10:44:31","modified_gmt":"2021-12-28T08:44:31","slug":"raspberry-pi-radio-partie-1-en-local","status":"publish","type":"post","link":"https:\/\/blog.nibelheim.fr\/?p=192","title":{"rendered":"Raspberry Pi Radio partie 1 : en local"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Vous avez des musiques? Vous voulez les streamer, soit pour vous, soit pour des amis, et vous n&#8217;avez qu&#8217;un modeste Raspberry Pi sous la main <em>(enfin, un 3 au moins pour avoir un peu de patate et de la RAM un minimum&#8230; 1Go, \u00e7a passe)<\/em>?<br>Alors bouclez vos ceintures, pr\u00e9parez la piste de danse, on est partis!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons nous baser sur un excellent tutoriel dont, si vous parlez anglais, je recommande le suivi plut\u00f4t que du pr\u00e9sent article, \u00e0 savoir celui-ci : <a href=\"https:\/\/kalifi.org\/2020\/03\/internet-radio-with-raspberry-pi-and-icecast.html\">https:\/\/kalifi.org\/2020\/03\/internet-radio-with-raspberry-pi-and-icecast.html<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je vais me reposer sur lui presque enti\u00e8rement car sa m\u00e9thode est simplissime et permet d&#8217;avoir quelque chose qui fonctionne en vitesse. Attention cela dit, il faut que vous ayez des bases sur l&#8217;utilisation du Raspberry Pi, car tout comme l&#8217;impression 3D, c&#8217;est un truc de bidouilleur, il faut donc se pr\u00e9parer \u00e0 y laisser du temps&#8230; Beaucoup de temps.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le but<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ce que nous allons faire dans cet article :<br>&#8211; Installer un &#8220;streamer&#8221; permettant d&#8217;envoyer un flux audio <em>(disons &#8220;le facteur&#8221;)<\/em>,<br>&#8211; Ajouter une unique source audio pour le &#8220;streamer&#8221; <em>(disons &#8220;la lettre&#8221;)<\/em>, \u00e0 partir de vos fichiers audio,<br>&#8211; Installer un logiciel de contr\u00f4le basique de liste de lecture <em>(le bureau de poste&#8230; ? Disons?)<\/em>.<br>Le tout en <strong>r\u00e9seau local uniquement<\/strong> <em>(= pas de nom de domaine ext\u00e9rieur; \u00e7a sera uniquement le premier pas, le reste viendra dans de futurs articles).<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e9requis<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons utiliser le Raspberry Pi en <strong>mode console uniquement<\/strong>. Pas de bureau, \u00e0 l&#8217;ancienne. D&#8217;ailleurs, vu le c\u00f4t\u00e9 gourmand du stream radio, je recommande d&#8217;avoir le strict minimum qui tourne sur votre Pi&#8230;<br>Il vous faut donc :<br>&#8211; un acc\u00e8s au Net (duh),<br>&#8211; un acc\u00e8s SSH avec un niveau admin (root) \u00e0 disposition,<br>&#8211; de quoi vous connecter dessus, genre PuTTY.<br><br>&#8211; Avoir copi\u00e9 quelques morceaux de musique dans un endroit quelconque sur votre Pi (exemple : <strong>\/home\/pi\/music<\/strong> ).<br>CECI IS IMPORTANT. Retenez bien cet emplacement.<br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Proc\u00e9dure<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Entrez les commandes suivantes :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update\nsudo apt install mpd\ncd \/var\/lib\/mpd\/music\nsudo ln -s \/home\/pi\/music music<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En bref :<br>&#8211; MPD est la source audio <em>(qu&#8217;il va falloir configurer)<\/em>,<br>&#8211; Et pour garder les choses simples, nous avons fait un lien symbolique <em>(disons un raccourci, m\u00eame si c&#8217;est faux)<\/em> l\u00e0 o\u00f9 se trouvent normalement les musiques que MPD va streamer.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo nano \/etc\/mpd.conf<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L\u00e0, nous allons changer la configuration de MPD.<br>Dans Nano, tapez <strong>Ctrl+W<\/strong> et entrez dans le champ de recherche :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">outside_sym<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Puis Enter. Faites en sorte de trouver les lignes suivantes et de remplacer les &#8220;no&#8221; par &#8220;yes&#8221; :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">follow_outside_symlinks \"yes\"\n\nfollow_inside_symlinks  \"yes\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ceci fait, descendez de plusieurs pages jusqu&#8217;\u00e0 trouver le bloc suivant :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#\n# An example of an ALSA output:\n#\n#audio_output {\n#       type            \"alsa\"\n#       name            \"My ALSA Device\"\n#       device          \"hw:0,0\"        # optional\n#       mixer_type      \"hardware\"      # optional\n#       mixer_device    \"default\"       # optional\n#       mixer_control   \"PCM\"           # optional\n#       mixer_index     \"0\"             # optional\n#}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La partie importante ici est de vous assurer que <strong>l&#8217;ensemble du bloc audio_output est comment\u00e9<\/strong> (avec un # devant chaque ligne), car nous n&#8217;en voulons pas, de ce bloc. Non.<br>Ceci fait, descendez encore avec <strong>Page down<\/strong> jusqu&#8217;\u00e0 tomber sur le bloc suivant, que vous allez faire ressembler \u00e0 ce qui suit :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#\n# An example of a shout output (for streaming to Icecast):\n#\naudio_output {\n        type            \"shout\"\n        encoder         \"lame\"\n#       encoder         \"vorbis\"                # optional\n        name            \"Mon stream\"\n        host            \"localhost\"\n        port            \"8000\"\n        mount           \"\/radio.ogg\"\n        password        \"hackme\"        #laissez comme \u00e7a!\n#       quality         \"5.0\"\n        bitrate         \"192\"\n        format          \"44100:16:1\"\n#       protocol        \"icecast2\"              # optional\n#       user            \"source\"                # optional\n#       description     \"\"                      # optional\n#       url             \"\"                      # optional\n#       genre           \"jazz\"                  # optional\n#       public          \"no\"                    # optional\n#       timeout         \"2\"                     # optional\n#       mixer_type      \"software\"              # optional\n<span class=\"has-inline-color has-vivid-red-color\">}<\/span>\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La sortie Shout est ce qui va r\u00e9ellement compter ici, car il s&#8217;agit v\u00e9ritablement de l&#8217;envoi de la musique.<br>Notez que nous utilisons ici le format de sortie OGG, mais il est possible de faire avec du MP3 <em>(\u00e7a n&#8217;a RIEN \u00e0 voir avec vos morceaux de musique et leur format!)<\/em>. OGG m&#8217;a donn\u00e9 de bien meilleurs r\u00e9sultats lors de l&#8217;int\u00e9gration <em>(mieux reconnu par beaucoup de logiciels)<\/em>.<br>Pour du MP3 malgr\u00e9 tout, <a href=\"https:\/\/kalifi.org\/2020\/03\/internet-radio-with-raspberry-pi-and-icecast.html\">r\u00e9f\u00e9rez-vous au tutoriel d&#8217;origine<\/a>.<br>Enfin, entrez :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo systemctl start mpd<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si jamais \u00e7a ne fonctionne pas, lisez donc les bons mots d&#8217;erreurs issus de journalctl :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo journalctl -xe<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Et bienvenue dans ladite perte de temps. Normalement, c&#8217;est un guillemet qui manque, ou une accolade mal comment\u00e9e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ceci \u00e9tant fait, nous allons installer <strong>Icecast2<\/strong>, qui est &#8220;le&#8221; programme de streaming.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install icecast2<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il n&#8217;y a pour le moment rien de sp\u00e9cial \u00e0 faire dans Icecast, la configuration par d\u00e9faut suffisant pour une premi\u00e8re tentative.<br>Ceci fait, nous avons Icecast2 et MPD qui sont install\u00e9s avec leurs passwords par d\u00e9faut (<strong>hackme<\/strong>), ce qui va permettre de nous assurer que les deux causent ensemble.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl start icecast2\nsudo systemctl start mpd<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Assurez-vous que tout va bien :<\/p>\n\n\n\n<pre id=\"block-c92de7ee-064e-402b-88ef-496ed232a9da\" class=\"wp-block-code\"><code>sudo systemctl status icecast2\nsudo systemctl status mpd<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vous devriez avoir pour les deux un joli statut en vert <strong>&#8220;active (running)&#8221;<\/strong>. Si vous avez <strong>active (exited)<\/strong> ou autre, alors y&#8217;a un schmol, et c&#8217;est de nouveau le moment de perdre du temps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A ce moment pr\u00e9cis, vous avez une source qui envoie du rien \u00e0 un streamer, qui propage.<br>Nous allons donc transformer ce rien en quelque chose via YMPD.<br><strong>Note : si les liens ne fonctionnent plus, rendez-vous ici : <a href=\"https:\/\/www.ympd.org\/#downloads\">https:\/\/www.ympd.org\/#downloads<\/a><\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/home\/pi<br>wget https:\/\/www.ympd.org\/downloads\/ympd-1.2.3-armhf.tar.bz2<br>tar -xvf ympd-1.2.3-armhf.tar.bz2<br>rm  ympd-1.2.3-armhf.tar.bz2<br>sudo .\/ympd --webport 8001<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Normalement, vous perdez le curseur et c&#8217;est parfait. Nous venons de t\u00e9l\u00e9charger une interface un peu jolie qui embarque son propre serveur Web et nous allons y acc\u00e9der via un navigateur \u00e0 l&#8217;adresse :<\/p>\n\n\n\n<h2 class=\"has-text-align-center wp-block-heading\">http:\/\/192.168.votre.ip:8001<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si tout se passe bien (normalement si \u00e7a se lance, \u00e7a ne peut QUE bien se passer), vous devriez avoir un truc du genre :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/tartine.linkpc.net\/wp-content\/uploads\/2021\/12\/image-1024x387.png\" alt=\"\" class=\"wp-image-197\"\/><figcaption>Evidemment, moi, j&#8217;ai de la musique qui passe mais chez vous, \u00e7a devrait \u00eatre vide. Et donc cliquez sur <strong>Browse database<\/strong> en haut, vous devriez avoir seulement marqu\u00e9 <strong>root<\/strong>. Cliquez dessus, et si vous avez tout bien suivi, les morceaux ou les r\u00e9pertoires que vous avez copi\u00e9 dans <strong>\/home\/pi\/music<\/strong> devraient s&#8217;afficher.<br>Si tel n&#8217;est pas le cas, cliquez dans <strong>Queue <\/strong>sur <strong>Update DB<\/strong>.<br>En passant la souris sur chaque ligne, qu&#8217;il s&#8217;agisse d&#8217;un r\u00e9pertoire ou d&#8217;un morceau, un + devrait appara\u00eetre sur la droite. En cliquant dessus, vous ajoutez le morceau ou le r\u00e9pertoire \u00e0 la playlist.<br>En retournant en haut sur <strong>Queue<\/strong>, vous avez les morceaux en attente de lecture. Cliquez sur le gros symbole de lecture et si vous voyez, comme sur l&#8217;illustration ci-dessus, un temps de lecture \u00e9voluer, vous avez gagn\u00e9 : \u00e7a joue!<br>Pour le moment, je vous recommande de cliquer dans la partie droite sur <strong>Repeat <\/strong><em>(c&#8217;est bien plus pratique pour mettre au point).<\/em><br>Ceci \u00e9tant fait, retournez sur votre Pi et tapez Ctrl-C pour arr\u00eater YMPD : il a termin\u00e9 son r\u00f4le.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ceci fait, arrive le moment de v\u00e9rit\u00e9 : dans votre navigateur, tapez l&#8217;adresse<\/p>\n\n\n\n<h2 class=\"has-text-align-center wp-block-heading\"><strong>http:\/\/192.168.votre.ip:8000\/radio.ogg<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous avez \u00e0 l&#8217;\u00e9cran quelque chose du genre :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/tartine.linkpc.net\/wp-content\/uploads\/2021\/12\/image-1-1024x56.png\" alt=\"\" class=\"wp-image-200\"\/><figcaption>Et que de la musique sort de vos enceintes, alors c&#8217;est gagn\u00e9 : vous avez maintenant un stream audio sur votre r\u00e9seau local! Bravo!<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Ce qu&#8217;il reste \u00e0 faire<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant que nous avons un concept qui marche, il est temps de faire des sauvegardes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>1- Sauvegarder!<\/em><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo cp \/etc\/mpd.conf \/etc\/mpd.conf.bak<br>sudo cp \/etc\/icecast2\/icecast.xml \/etc\/icecast2\/icecast.xml.bak<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>2- Changer les mots de passe<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il est temps de changer vos passwords dans<strong> mpd.conf<\/strong> et <strong>icecast.xml<\/strong> : avec l&#8217;aide de <strong>sudo nano<\/strong>, faites en sorte que le password se trouvant dans le bloc <strong>audio_output{}<\/strong> de <strong>mpd.conf<\/strong> soit le m\u00eame que celui indiqu\u00e9 comme <strong>Source password<\/strong> dans icecast.xml.<br>Au passage, pondez donc deux passwords un peu chiad\u00e9s pour Relay et Admin, \u00e7a ne fera pas de mal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3- Terminer la configuration de votre Source<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans mpd.conf toujours, vous pouvez \u00e9diter le mount point (ce qui se trouve apr\u00e8s le :8000 de l&#8217;adresse de la radio).<br>Pour le moment, c&#8217;est absolument trivial, mais vous allez voir qu&#8217;en changer, pour la suite, sera p\u00e9nible. Donc mettez-vous d&#8217;accord sur un nom de mount point, et tenez-vous-y.<br>Vous pouvez rajouter \u00e9galement une description \u00e0 votre stream ainsi qu&#8217;une URL, mais c&#8217;est optionnel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4- Installer NCMPD<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">YMPD est certes joli, mais il n\u00e9cessite un navigateur pour fonctionner et si l&#8217;envie vous prend de faire des ajustements de playlist avec uniquement un terminal, il vous faudra NCMPD.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install ncmpd<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tapez simplement ncmpd, puis majuscule-1 de la barre horizontale de chiffres (\u00e9videmment). Bienvenue dans la Matrice, vous pouvez faire la m\u00eame chose qu&#8217;avec YMPD, mais en mode bal\u00e8ze.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>5- Passer d&#8217;un morceau \u00e0 l&#8217;autre!<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il est possible que, sur la page de lecture Web de votre radio, la musique se coupe \u00e0 la fin de chaque morceau, vous for\u00e7ant \u00e0 rafra\u00eechir la page. C&#8217;est connu, ne vous inqui\u00e9tez pas, et nous y reviendrons au prochain chapitre!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conqueluzion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ceci termine notre premi\u00e8re partie de webradio sur Raspberry pi.<br><a href=\"https:\/\/tartine.linkpc.net\/?p=210\" data-type=\"URL\" data-id=\"https:\/\/tartine.linkpc.net\/?p=210\">Dans le prochain chapitre<\/a>, assez court, nous allons voir comment faire en sorte que la lecture se poursuive sans mal!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vous avez des musiques? Vous voulez les streamer, soit pour vous, soit pour des amis, et vous n&#8217;avez qu&#8217;un modeste Raspberry Pi sous la main (enfin, un 3 au moins pour avoir un peu de patate et de la RAM un minimum&#8230; 1Go, \u00e7a passe)?Alors bouclez vos ceintures, pr\u00e9parez la [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[24,25],"class_list":["post-192","post","type-post","status-publish","format-standard","hentry","category-raspberry-pi","tag-radio","tag-raspberry"],"_links":{"self":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/posts\/192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=192"}],"version-history":[{"count":0,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/posts\/192\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}