Member of The Internet Defense League

Information Hacking

Un studio radio de streaming avec une Rpi3 : yes we can !

Mardi, Mars 19, 2019

Faire de la radio sur le Net c’est vraiment très cool, mais jusqu’alors il fallait soit monter un PC dédié pour ça ou alors acheter une streambox pré-paramétrée. Mais le monde la Raspberry ayant évolué, des gens se sont creusé et ont pondu une carte son en mode “hat” à plugger sur les gpio d’une Rpi3. Ca s’appelle Pisound. Et c’est excellentissime !

Principe général

Un studio pour une radio Internet requiert deux éléments distincts : d’un côté un serveur Icecast qui va diffuser un flux audio aux auditeurs et de l’autre côté un “streamer” : un logiciel qui envoie vers le serveur Iceacst le flux audio, que ce soit une playliste de fichiers ou du son “live”. Pour envoyer du son “live” il faut un mini studio radio : une table de mixage, des micros, un ampli casques, des casques, et une machine équipée d’une carte son qui va envoyer le flux audio via un logiciel dédié à cet effet : Darkice.

Un ordinateur à raccorder à la table de mixage est aussi nécessaire, pour envoyer du son pendant l’émission : générique, virgules sonores, morceaux de musique etc…

Tout ça est donc simple mais avec la Rpi3 et le Hat Pisound, c’est encore plus simple et efficace : vous branchez un cable jack stéréo depuis la sortie de la table vers l’entrée Jack de la pisound/Rpi, vous lancez Darkice sur la Rpi et ça y est, votre radio peut diffuser en direct sur la toile !

Les pièges techniques à connaître

Icecast n’est pas si compliqué que ça à paramétrer mais il faut y aller doucement : tout se passe avec un seul fichier xml que vous pointez en lançant le binaire en root sur votre serveur Internet public : sudo /usr/bin/icecast2 /etc/icecast2/icecast.xml &

Il vous faut une section d’authentification remplie, un port (le 8000 par défaut) et une section de point de montage. Bref, si vous faites un Icecast minimal sur le port 8000, tout doit bien se lancer et il doit être prêt à accueillir votre streaming.

Du côté du studio Pisound (99€) : rien de compliqué, il suffit de monter la carte sur les GPIO de la Rpi3 (sur les deux rangées de GPIO, pas une seule comme moi la première fois…), installer le tout dans son boitier (The case : 16€) à acheter sur le site ou à imprimer en 3D grâce aux plans généreusement offerts par la boite. Les concepteurs de Pisound ont un Gnu/Linux optimisé pour le son, PatchboxOS, je ne l’ai pas vu au moment de faire l’installation mais visiblement c’est très adapté : à utiliser à la place de Raspbian.

La pisound est configurable grâce à un utilitaire : pisound-config (en root).
Un bouton appelé The Button permet de l’éteindre, de lancer des scripts shell par simple pression : pratique.
Darkice est simple à configurer (après install en apt-get), sauf si vous avez mis deux mots de passe différents dans votre config Icecast comme moi et que vous avez indiqué Icecast 2-4 dans la section au lieu de 2-0… Il ne renvoie aucune erreur, ne diffuse rien et ne parle pas du mot de passe. En réalité la section [iceacst2-0] de Darkice n’indique pas la version mais un premier serveur Icecast, permettant d’indiquer ensuite une nouvelle section en 2-1…

Bref le xml de Darkice est court, simple à configurer : adresse ip du serveur, port de connexion, nom du point de montage password bitrate, rien de sorcier si votre iccecast est ok :

[general]
duration = 0 # duration of encoding, in seconds. 0 means forever
bufferSecs = 2 # size of internal slip buffer, in seconds
reconnect = yes # reconnect to the server(s) if disconnected

# this section describes the audio input that will be streamed
[input]
device = hw:1,0 # Alsa soundcard device for the audio input
sampleRate = 48000 # sample rate in Hz. try 48000, 96000 or 192000
bitsPerSample = 16 # bits per sample. try 16
channel = 2 # channels. 1 = mono, 2 = stereo.
# Only stereo mode is supported by Pisound.

# this section describes a streaming connection to an IceCast2 server
# there may be up to 8 of these sections, named [icecast2-0] … [icecast2-7]
# these can be mixed with [icecast-x] and [shoutcast-x] sections
[icecast2-0]
bitrateMode = cbr # variable bit rate
bitrate = 128
format = mp3 # format of the stream: mp3
quality = 0.8 # quality of the stream sent to the server
server = x.x.x.x # ip of the server
port = 8000 # port of the IceCast2 server, usually 8000
password = hackme # source password to the IceCast2 server
mountPoint = pisound # mount point of this stream on the IceCast2 server
name = pisound # name of the stream
description = DarkIce on Pisound # description of the stream
url = http://localhost # URL related to the stream
genre = my genre # genre of the stream
public = no # advertise this stream?
#localDumpFile = recording.mp3 # Record also to a file

Lancez Darkice : sudo /usr/bin/darkice -c /etc/darkice.cfg &
Ouvrez vos micros, envoyez un générique : ça diffuse sur votre serveur Icecast sur : http://votresite.tld:8000/live.ogg
Un lecteur html5 peut être installé dans une page web pour l’écoute, ou via un lecteur de streaming : Fstream pour IOS, Icecast Player sur Android, VLC ou d’autres logiciels lecteurs de flux compatibles Icecast sur ordinateur.


Une musicbox Rpi3 sans…musicbox

Dimanche, Juin 12, 2016

C’est en voulant utiliser la distribution Musicbox, qui permet de faire un juke box [connecté à une plateforme de streaming musical] sur Rapsberrypi, que j’ai été amené à monter la bête moi-même. La distribution Musicbox est en réalité une Raspbian qui intègre un serveur Mopidy, et la version en ligne n’est pas compatible avec le jeu d’instruction 64bits de la toute récente Rpi3. Pas grave, il suffit d’installer la dernière Raspbian, le serveur Mopidy, l’extension Spotify, un client http, une carte son HifiBerry (un shield Rpi avec sortie mini-jack) et tout fonctionne à merveille. Au point qu’avec un petit ampli 2X12 Watts et des enceinte haute fidélité (100 W RMS 93db/W/M - 8 Ohms), la qualité du son est… bluffante.

Courte recette pour monter sa Musicbox sans se prendre la tête. Avec un compte Spotify payant (Premium à 9,99€)

Ingrédients :

— Une Rpi3
— Une carte son Hifiberry DAC+ Standard phone jack version, 29,90€
— Une Raspbian (la plus récente est basée sur Debian Jessie)
— Un serveur Mopidy
— L’extension Spotify
— Un [ou plusieurs] client http de streaming : Mopify et Musicbox webclient dans cette recette

Durée de la recette : 1h de préparation - 5 minutes de cuisson

La recette :

Installer Raspbian sur une carte HDSC
Booter la Rpi3
Se connecter en ssh [compte par défaut : pi / password par défaut : raspberry]

— Ajout de la clef PGP de mopidy

wget -q -O - https://apt.mopidy.com/mopidy.gpg | sudo apt-key add -

— Mettre à jour la liste de paquets

sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/jessie.list

— Installer Mopidy

sudo apt-get update
sudo apt-get install mopidy

— Mises à jour

sudo apt-get update
sudo apt-get dist-upgrade

— Possibilité de lister toutes les extensions possibles de Mopidy :

apt-cache search mopidy

— Installer l’extension Spotify

sudo apt-get install mopidy-spotify

Configuration de la bestiole :

Le fichier de config créé par défaut après l’installation se trouve dans le home de l’utilisateur pi :

~/.config/mopidy/mopidy.conf (ou bien /home/pi/.config/mopidy/mopidy.conf

La configuration de départ, générée par Modipy est assez simple et ressemble en général à ça :

[core]
cache_dir = $XDG_CACHE_DIR/mopidy
config_dir = $XDG_CONFIG_DIR/mopidy
data_dir = $XDG_DATA_DIR/mopidy
max_tracklist_length = 10000

[logging]
color = true
console_format = %(levelname)-8s %(message)s
debug_format = %(levelname)-8s %(asctime)s [%(process)d:%(threadName)s] %(name)sn %(message)s
debug_file = mopidy.log
config_file =

[audio]
mixer = software
mixer_volume =
output = autoaudiosink
buffer_time =

[proxy]
scheme =
hostname =
port =
username =
password =

Mon fichier mopidy.conf, après l’avoir modifié pour qu’on puisse se connecter dessus avec un navigateur en http [sur l’url musicbox.local:8080] ressemble à ça :

[core]
cache_dir = $XDG_CACHE_DIR/mopidy
config_dir = $XDG_CONFIG_DIR/mopidy
data_dir = $XDG_DATA_DIR/mopidy
max_tracklist_length = 10000

[logging]
color = true
console_format = %(levelname)-8s %(message)s
debug_format = %(levelname)-8s %(asctime)s [%(process)d:%(threadName)s] %(name)sn %(message)s
debug_file = mopidy.log
config_file =

[loglevels]
cherrypy = warning
pykka = info

[audio]
mixer = software
mixer_volume = 80
output = alsasink
buffer_time =

[proxy]
scheme =
hostname =
port =
username =
password =

[mopify]
enabled = true
debug = false

[musicbox_webclient]
enabled = true
musicbox = false
websocket_host =
websocket_port =
on_track_click = PLAY_ALL

[spotify_tunigo]
enabled = true
region =
sub_genres = true
cache_time = 3600

[spotify]
enabled = true
username = Drapher
password = ********
bitrate = 320
volume_normalization = true
private_session = false
timeout = 10
allow_cache = true
allow_network = true
allow_playlists = true
search_album_count = 20
search_artist_count = 10
search_track_count = 50
toplist_countries =

[mpd]
enabled = true
hostname = 0.0.0.0
port = 6600
password =
max_connections = 20
connection_timeout = 60
zeroconf = Mopidy MPD server on $hostname
command_blacklist =
listall
listallinfo
default_playlist_scheme = m3u

[http]
enabled = true
hostname = 0.0.0.0
port = 8080
static_dir =
zeroconf = $hostname

[stream]
enabled = true
protocols =
http
https
mms
rtmp
rtmps
rtsp
metadata_blacklist =
timeout = 5000

[m3u]
enabled = true
base_dir = $XDG_MUSIC_DIR
default_encoding = latin-1
default_extension = .m3u8
playlists_dir =

[softwaremixer]
enabled = true

[file]
enabled = true
media_dirs =
$XDG_MUSIC_DIR|Music
~/|Home
show_dotfiles = false
follow_symlinks = false
metadata_timeout = 1000

[local]
enabled = false

Le serveur quand on le lance, doit afficher ça :

INFO Starting Mopidy 2.0.0
INFO Loading config from builtin defaults
INFO Loading config from /home/pi/.config/mopidy/mopidy.conf
INFO Loading config from command line options
INFO Enabled extensions: mopify, spotify, mpd, http, stream, spotify_tunigo, m3u, softwaremixer, file, musicbox_webclient
INFO Disabled extensions: local
INFO Starting Mopidy mixer: SoftwareMixer
INFO Mixer volume set to 80
INFO Starting Mopidy audio
INFO Starting Mopidy backends: SpotifyTunigoBackend, SpotifyBackend, StreamBackend, M3UBackend, FileBackend
INFO Audio output set to “alsasink”
INFO Starting Mopidy core
INFO Logged in to Spotify in offline mode
INFO Starting Mopidy frontends: QueueManagerFrontend, MpdFrontend, HttpFrontend
INFO MPD server running at [::ffff:0.0.0.0]:6600
INFO HTTP server running at [::ffff:0.0.0.0]:8080
INFO Starting GLib mainloop

Stopper le service :

sudo service mopidy stop

Bref, jusque là, tout va bien, mais on ne peut toujours pas se connecter sur spotify pour faire jouer de la musique.

Installer le ou les clients http :

J’ai choisi d’installer deux clients http, le premier (musicbox client) parce que c’est celui de la distrib musicbox, et le second (mopify) parce qu’il est “beau”.

Installation de Mopify :

sudo pip install Mopidy-Mopify

Installation de Musicbox client :

pip install Mopidy-MusicBox-Webclient

La liste de tous les clients Mopidy est bien entendu sur le site de Mopidy

Là, ça fonctionne (en suivant mon fichier de conf, une fois le serveur mopidy lancé), il suffit de se connecter sur musicbox.local:8080 (en ayant bien entendu inscrit musicbox au préalable dans le fichier /etc/hostname et quitte à faire dans /etc/hosts)

clients-http-mopidy.png

Pour tester le son en sortie, il est possible de brancher un mini jack sur la sortie idoine de Rpi3 vers un ampli/enceintes, mais le son sera très mauvais, avec un volume faible. La carte son de la Rpi3 est franchement trop faiblarde.

Installation du shield Hifiberry DAC+ Standard phone jack version

Suffit de le pluger sur les GPIO de la Rpi3. Point.

hifiberry-dacplus-phone.png

Ensuite, la gestion des drivers est plutôt simple, très bien indiquée sur le site du vendeur

En gros :
— Retirer du fichier /etc/modules la ligne : snd_bcm2835
(pour que le driver de la Rpi3 soit désactivé)

— Editer /boot/config.txt et ajouter :
dtoverlay=hifiberry-dacplus

Créer le fichier /etc/asound.conf

Y insérer le code suivant :
pcm.!default {
type hw card 0
}
ctl.!default {
type hw card 0
}

— Rebooter la bête

— Tester avec la commande : aplay -l

Vous devriez avoir ça :

**** Liste des Périphériques Matériels PLAYBACK ****
carte 0: sndrpihifiberry [snd_rpi_hifiberry_dacplus], périphérique 0: HiFiBerry DAC+ HiFi pcm512x-hifi-0 []
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0

C’est cuit ou presque.
Manque quand même que le serveur se lance tout seul au démarrage en tâche de fond, parce que sinon il y a obligation à le lancer à la mimine en ssh.

Le fichier de conf utilisé est celui de l’utilisateur pi, il faut donc le copier et remplacer le fichier mopidy.conf du démon mopidy :

Un copié-collé de votre mopidy.conf en sudo dans le /etc/mopidy/mopidy.conf ou bien un sudo cp ~/.config/mopidy/mopidy.conf /etc/mopidy/mopidy.conf

Pour installer mopidy en service système :

sudo systemctl enable mopidy

puis :

sudo dpkg-reconfigure mopidy

Le script du démon mopidy au démarrage se trouve dans /etc/init.d/mopidy

#!/bin/bash
# mopidy daemon
# chkconfig: 345 20 80
# description: mopidy daemon
# processname: mopidy
### BEGIN INIT INFO
# Provides: mopidy deamon
# Required-Start: $remote_fs $syslog $network
# Required-Stop: $remote_fs $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start mopidy daemon at boot time
# Description: Enable mopidy music server
### END INIT INFO

DAEMON_PATH=”/usr/bin/”

DAEMON=mopidy
DAEMONOPTS=”"

NAME=mopidy
DESC=”My mopidy init script”
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

case “$1” in
start)
echo “Starting Mopidy Daemon”
start-stop-daemon –start –chuid pi –background –exec /usr/bin/mopidy
–pidfile $PIDFILE –make-pidfile
— 2>/var/log/mopidy.log
;;
stop)
echo “Stopping Mopidy Daemon”
start-stop-daemon –stop –exec /usr/bin/mopidy –pidfile $PIDFILE
;;

restart)
$0 stop
$0 start
;;

*)
echo “Usage: $0 {start|stop|restart}”
exit 1
esac

Les droits :

sudo chmod +x /etc/init.d/mopidy

Redémarrage pour tester la bestiole : vous vous connectez avec un navigateur sur http://musicbox.local:8080

Sélectionnez le client de votre choix. Lancez un morceau…

Et là, si votre Hifiberry est branchée à un mini jack vers RCA, sur un ampli équipé d’enceintes de qualité, vous risquez d’être bluffé. Le Ogg vorbis de spotify à 320Kbps est bien meilleur qu’un MP3 de base, et tous vos potes pourront choisir les morceaux qu’ils veulent faire jouer. Soirées sympathiques en vue…

Petite note complémentaire : sur IOS, la résolution de nom fonctionne très bien, mais pas sur androïd. Il faut donc que les équipements sous android se connectent au client http… via l’IP. Un scanner réseau pour repérer l’IP de la Rpi reste la solution la plus simple. Ou bien installer un écran sur la Rpi3 qui renvoie son IP…

Créer un lieu de hacking au sens large ?

Dimanche, Septembre 7, 2014

Les lieux d’échanges et de partage se font rares, et pourtant l’émergence des hackerspaces, fablabs, et désormais, des tiers-lieux — est en train de contredire cette affirmation. Malgré tout, une difficulté importante revient autour de ces lieux de création et d’échanges, et celle-ci réside dans l’obligation de maintenir un état d’esprit particulier pour ne pas “basculer”.

Ne pas “basculer” ? Oui, ne pas basculer d’un espace de hacking vers celui du club de hobbyistes ou vers la pme…

La règle du MIT

Ce que ne comprennent pas toujours les acteurs ou promoteurs des fablabs eux-mêmes, surtout pour les plus novices, est l’orientation du lieu. Son état d’esprit, son organisation sociale, technique, logistique. Un fablab n’est pas seulement un lieu d’innovation. Un fablab n’est pas seulement un lieu avec des machines numériques qui peuvent fabriquer des objets. Un fablab n’est pas seulement un lieu pour prototyper. Un hackerspace n’est pas simplement la réunion de gens passionnés de hacking. Alors ? Qu’en est-il vraiment ?

Le principe d’origine du fablab est celui de l’éducation par les sciences et les techniques. La Fabfondation précise cet aspect central dans la constitution et l’organisation de ces lieux :

“A Fab Lab is also a platform for learning and innovation: a place to play, to create, to learn, to mentor, to invent. To be a Fab Lab means connecting to a global community of learners, educators, technologists, researchers, makers and innovators- -a knowledge sharing network that spans 30 countries and 24 time zones.”

Apprentissage, innovation, un lieu pour jouer, étudier, inspirer, inventer : les caractéristiques d’un fablab sont celles d’une nouvelle forme d’école, ou d’université populaire. Le principe central d’un fablab est celui d’une production collective, dans lieu ouvert au plus grand nombre, basé sur l’éducation au sens large, l’éducation populaire : comprendre, apprendre, échanger, partager, pratiquer, etc…

“Fab Labs  have to share a common set of  tools and processes.  

A prototyping facility is not the equivalent of a Fab Lab. A 3D printer is not a Fab Lab.

The idea is that all the labs can  share knowledge, designs, and collaborate across international borders. If I make something here in Boston and send you the files and documentation, you should be able to reproduce it there, fairly painlessly.  If I walk into a Fab Lab in Russia, I should be able to do the same things that I can do in Nairobi, Cape Town, Delhi, Amsterdam or Boston Fab Labs. The critical machines and materials : are identified in this listand there’s a list of open source software and freeware that we use online as well (embedded in Fab Academy modules here) But essentially it’s the processes and the codes and the capabilities that are important. So you want a laser cutter for 2D/3D design and fabrication, a high precision milling machine for making circuits and molds for casting, a vinyl cutter for making flexible circuits and crafts, a fairly sophisticated electronics workbench for prototyping circuits and programming microcontrollers, and if you can possibly find the funds, you’ll want the large wood routing machine for furniture and housing applications.  We are also testing fairly inexpensive, but robust and with fair resolution 3D printers—the most current favorite is listed in the inventory.”

La Fabfoundation stipule qu’installer une imprimante 3D ne fait en aucun cas un fablab, comme mettre en œuvre tous les outils pour faire du prototypage. Un ensemble de processus, de moyens techniques et une organisation particulière doivent être mis en œuvre. Et au delà, un état d’esprit pour faire “tourner la machine”

Un lieu qui doit permettre l’échange

Le hacking [dans sa conceptualisation originelle], est l’approche la plus adaptée aux lieux innovants tels que sont les fabLabs, hackerspaces ou tiers-lieux. Non pas par une pratique particulière dépendante d’outils spécifiques ou dédiés au hacking, mais par l’approche technique, sociale, scientifique des acteurs du lieu. Le hacking est une approche particulière, une pratique quotidienne différente : comprendre, étudier les choses pour les modifier, les détourner ou simplement les améliorer. Le hacking est lié au DiY de par sa vocation à permettre de faire soi-même, en cherchant des solutions pour parvenir à ses fins.

La bidouille est un savoir-faire, un savoir-être : si la pièce qui me manque pour finaliser mon objet est trop chère, n’existe pas, comment la réaliser moi-même ? J’ai envie d’un appareil qui n’est pas dans le commerce : je le fabrique. J’ai envie d’un mode de vie, je le conçois et je le maintiens. Je vérifie que ce serveur prévu pour afficher des informations précises peut afficher autre chose, je lui fais afficher autre chose. Cette approche du hacking amène de nombreuses pratiques et modes d’échanges. Via Internet, très longtemps, et désormais physiquement, dans des lieux dédiés.

L’aspect central de ces nouveaux lieux est l’échange. Pas simplement l’échange d’informations, de savoirs ou de compétences mais aussi l’échange social. Cet aspect social réhabilite une longue tradition abandonnée autour de lieux différents tels que les MJC, bal populaires, guinguettes, jardins ouvriers, places du village etc… Chacun peut venir dans ces lieux, sans aucun prérequis : ni d’argent, ni d’âge, ni de compétences, de diplômes, etc… Le tiers-lieu, le fablab permettent aux citoyens de se ré-emparer de la technique, d’outils, de concepts, et ouvrent à chacun des possibilités qui sont la plupart du temps soigneusement accaparées par des “spécialistes” ou des “experts”.

Ces lieux ne sont pas, et ne doivent pas être un repaire d’ingénieurs ou de super-techniciens, petits génies de l’électronique ou de l’informatique : ils sont la possibilité pour tous de faire, réaliser ensemble, de manière horizontale, dans un échange dégagé des contraintes du jugement scolaire, social, professionnel, etc… Ce que les hackers ont toujours fait.

Tiers-lieu : l’espace de tous les possibles

Pour finir, le concept de tiers-lieu se doit d’être un peu mieux explicité : leur développement est en plein essor, leur potentiel, passionnant. Ce sont avant tout des espaces de socialisation, de rencontres. Ils peuvent s’orienter, se “thématiser” plus fortement selon leurs instigateurs, mais ils restent avant tout des lieux pour faire ensemble et échanger. De la même manière que les hackerspaces ou les fablabs, aucune limitation financière, sociale, n’est censée exister dans ces espaces qui peuvent réunir de nombreuses choses : fablabs, hackerspace, lieu de formation, espace de co-working, cantine ouverte, atelier partagé, espace de réparation, de recyclage, bibliothèque, centre-ressource, etc…

La réussite de ces lieux de hacking au sens large repose sur une unique chose : l’état d’esprit. L’ouverture, le partage, l’échange, la collaboration, le DiY, l’innovation, tous ces concepts très en vogue n’ont de vocation que s’ils coexistent dans l’esprit du hacking : horizontalité, do-ocratie, méritocratie, échange entre pairs, curiosité, humilité, apprentissage permanent, et refus de la financiarisation du procédé.

Radio Reflets #1 et #2 : Crise économique surveillance globale des populations

Jeudi, Février 21, 2013

La première émission de Radio Reflets du mois de janvier, sur la crise économique et financière peut être écoutée ICI . La deuxième de Radio Reflets a eu lieu le 25 février de 19h à 20h40, avec pour thème la surveillance. L’invité était Jérome Thorel, auteur d’un ouvrage sur le sujet, “Attentifs, ensemble ! L’injonction au bonheur sécuritaire”. L’émission sera disponible sous peu sur Reflets, ICI .