Je crois que moc peut se connecter à un serveur distant, mais le mieux pour le faire c'est sans aucun doute mpd.
mpd fonctionne comme serveur de musique, et on s'y connecte via une multitude de clients possibles. Les deux meilleurs à mon avis : ncmpcpp (non graphique) et cantata (qt, graphique).
Pour écouter les webradios, un scripts que je me suis fait (il fonctionne avec mpv), sous X ou en tty. On peut y ajouter ou y retirer les radios que l'on veut.
#!/bin/bash
#05/02/2021
#######Configuration
######Titre fenêtre (facultatif)
printf '\033]0;%s\007' 'dio'
######lecteur audio
lec='mpv '
######sortie son (espace vide possible)
dev='--audio-device=alsa/dmix:PCH '
######canal son (espace vide possible)
mix='--alsa-mixer-name=PCM '
######volume par défaut (espace vide possible)
vol='--volume=18 '
######configuration son (espace vide possible)
con='amixer set '
#######mise en veille écran tty
if ! xset q &>/dev/null; then
setterm -blank 10
fi
#######Données radio
######Adresses radio
array=( [1]="http://5.152.208.98:8058/listen.pls"
"http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_p"
"http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio3_mf_p"
"http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1xtra_mf_p"
"http://usa17.fastcast4u.com:5784/stream/1/"
"http://usa5.fastcast4u.com:6332/stream/1/"
"http://usa17.fastcast4u.com:5508/stream/1/"
"http://ais-live.cloud-services.paris:8000/europe1.mp3"
"http://direct.fipradio.fr/live/fip-midfi.mp3"
"http://direct.fipradio.fr/live/fip-webradio8.mp3"
"http://direct.fipradio.fr/live/fip-webradio3.mp3"
"http://direct.fipradio.fr/live/fip-webradio2.mp3"
"http://direct.fipradio.fr/live/fip-webradio4.mp3"
"http://direct.fipradio.fr/live/fip-webradio5.mp3"
"http://direct.fipradio.fr/live/fip-webradio1.mp3"
"http://direct.franceculture.fr/live/franceculture-midfi.mp3"
"http://direct.franceinfo.fr/live/franceinfo-midfi.mp3"
"http://direct.franceinter.fr/live/franceinter-midfi.mp3"
"http://direct.francemusique.fr/live/francemusique-midfi.mp3"
"http://icecast.radiofrance.fr/francemusiquelabo-midfi.mp3"
"http://icecast.radiofrance.fr/francemusiqueeasyclassique-midfi.mp3"
"http://icecast.radiofrance.fr/francemusiqueconcertsradiofrance-midfi.mp3"
"http://icecast.radiofrance.fr/francemusiquelacontemporaine-midfi.mp3"
"http://icecast.radiofrance.fr/francemusiquelajazz-midfi.mp3"
"http://icecast.radiofrance.fr/francemusiqueocoramonde-midfi.mp3"
"https://radios.infini.fr:8443/mutine"
"http://radio.toile-libre.org:8000/fpp.mp3"
"http://jazz-wr01.ice.infomaniak.ch/jazz-wr01-128.mp3"
"http://jazz-wr05.ice.infomaniak.ch/jazz-wr05-128.mp3"
"http://jzr-wr99.ice.infomaniak.ch/jzr-wr99.mp3"
"https://hd.lagrosseradio.info/lagrosseradio-metal-192.mp3"
"https://hd.lagrosseradio.info/lagrosseradio-reggae-192.mp3"
"https://hd.lagrosseradio.info/lagrosseradio-rock-192.mp3"
"http://radios.rtbf.be/musiq3-128.mp3"
"https://listen.radioking.com/radio/605/stream/2195"
"http://radiocampuslille.ice.infomaniak.ch/radiocampuslille-128"
"http://radioclassique.ice.infomaniak.ch/radioclassique-high.mp3"
"http://terraindentente.free.fr/radiobig210508.m3u"
"http://radiofg.impek.com/fg"
"https://live.radio-ihaveadream.com/index.html"
"http://broadcast.infomaniak.net/start-latina-high.mp3"
"http://broadcast.infomaniak.net/latinasalsa.mp3"
"http://media.radio-libertaire.org:8080/radiolib.mp3"
"http://radiomeuh.ice.infomaniak.ch/radiomeuh-128.mp3"
"http://novazz.ice.infomaniak.ch/novazz-128.mp3"
"http://nova-ln.ice.infomaniak.ch/nova-ln-128.mp3"
"http://nova-vnt.ice.infomaniak.ch/nova-vnt-128.mp3"
"https://str2.openstream.co/215"
"http://radio.wesped.com:8000/;stream.mp3"
"http://rmc.bfmtv.com/rmcinfo-mp3"
"http://listen.radioking.com/radio/3086/stream/9476"
"http://cdn.nrjaudio.fm/audio1/fr/30401/mp3_128.mp3?origine=fluxradios"
"http://streaming.radio.rtl.fr/rtl-1-44-128?listen=webCwsBCggNCQgLDQUGBAcGBg"
"http://broadcast.infomaniak.net/start-sud-high.mp3" )
######Noms radios
array2=( [1]="Ancient fm ~~ Moyen-Âge-Renaissance <> Canada"
"BBC One ~~ varia <> Royaume-Uni"
"BBC Tree ~~ classique <> Royaume-Uni"
"BBC Radio One Extra ~~ varia-electro-urbaine <> Royaume-Uni"
"Chronix_Agression ~~ métal <> États-Unis"
"Chronix Grit ~~ métal <> États-Unis"
"Chronix Metal <> États-Unis"
"Europe 1"
"FIP ~~ varia"
"FIP Electro"
"FIP Groove"
"FIP Jazz"
"FIP Musique du Monde"
"FIP Nouveautés"
"FIP Rock"
"France Culture"
"France Info"
"France Inter"
"France Musique ~~ varia"
"France Musique bo musiques de film"
"France Musique classique easy ~~ classique"
"France Musique concerts Radio France ~~ classique"
"France Musique contemporaine ~~ classique"
"France Musique jazz"
"France Musique Ocora musiques du monde"
"Fréquence Mutine ~~ Rock"
"Fréquence Paris Pluriel"
"Jazzradio jazz classique"
"Jazzradio jazz contemporain"
"Jazzradio jazz nouveautés"
"La Grosse Radio Métal"
"La Grosse Radio Reggae"
"La Grosse Radio Rock"
"Musiq'3 RTBF ~~ classique <> Belgique"
"New Morning Radio ~~ varia"
"Radio Campus Lille ~~ varia"
"Radio Classique"
"Radio des Studios Campus"
"Radio FG ~~ Électro"
"Radio I Have A Dream ~~ varia"
"Radio Latina-général ~~ varia"
"Radio Latina-salsa"
"Radio Libertaire"
"Radio Meuh"
"Radio Nova général ~~ varia"
"Radio Nova la nuit ~~ varia"
"Radio Nova vintage ~~ varia"
"Radio Pastel"
"Radio Sevillanas ~~ flamenco <> Espagne"
"RMC"
"RCV ~~ varia"
"Rires et chansons"
"Rtl"
"Sud Radio" )
#######Affichage automatique initial
######format tableau
tput setaf 2
divider=====================================================
divider=$divider$divider
header="\n %-10s %10s \n"
width=80
printf "$header" "N°" "RADIO"
printf "%$width.${width}s\n" "$divider"
######liste des radios
ra=0
until [ $ra -eq 25 ]
do
ra=$((ra+1))
echo -e $ra '\t' '\t' ${array2[$ra]}
done
######Explications utilisateur
#####Récupération nombre total radio (nr)
for nr in "${!array[@]}"
do
set "$nr = $nrb"
done
#####affichage explications
echo
tput setaf 1
echo $nr "radios."
echo "Catégorie « varia » pour les musicales généralistes."
echo "Q pour couper une radio, pour augmenter le volume * et le baisser / ."
echo
#######Demandes utilisateur
######Première demande
tput setaf 3
echo "Poursuivre l'affichage de la liste (P)"
read -p "Ou rechercher par mot / entrer un numéro de radio ? : " qun
echo
#####Vérification réponse non vide (plantage variable sinon)
while [[ -z $qun ]] || [[ $qun = "*" ]]
do
echo
echo "L'absence de réponse est une question répétée."
echo
echo "Poursuivre l'affichage de la liste (P)"
read -p "Ou rechercher par mot / entrer un numéro de radio ? : " qun
echo
done
#####Réponse P : poursuite affichage liste et modification possible réponse
if [ "$qun" = "P" ]
then
####affichage de 15 en 15
###variables
##nombre séries de lignes
ser=15
##initialisation autres variables
rest=0
###boucle d'affichage
while [ $qun = "P" ]
do
##calcul nombre radio restantes à afficher
rest=$(($nr - $ra))
##si reste suffisant
if [ $rest -gt $ser ]
then
##affichage du reste suivant nombre prévu
i=0
tput setaf 2
until [ $i -eq $ser ] && [ $ra -le $nr ]
do
i=$((i+1))
ra=$((ra+1))
echo -e $ra '\t' '\t' ${array2[$ra]}
done
##demande poursuite
tput setaf 3
echo "Poursuivre l'affichage de la liste (P)"
read -p "Ou rechercher par mot / entrer un numéro de radio ? : " qun
echo
fi
##Vérification réponse non vide (plantage variable et de grep sinon)
while [[ -z $qun ]]
do
echo
echo "L'absence de réponse est une question répétée."
echo
echo "Poursuivre l'affichage de la liste (P)"
read -p "Numéro de radio, recherche par mot, réafficher la Liste (L), Stopper le programme (S) ? " qun
echo
done
##Si reste insuffisant, affichage du nombre de radios restantes
if [ $rest -le $ser ] && [ $qun = "P" ]
then
##assignation du nombre de radios à afficher
ser=$rest
i=0
##affichage
tput setaf 2
until [ $i -eq $ser ] && [ $ra -le $nr ]
do
i=$((i+1))
ra=$((ra+1))
echo -e $ra '\t' '\t' ${array2[$ra]}
done
tput setaf 3
echo
echo "Fin de la liste des radios."
echo
##fin de la boucle de demande d'affichage
qun=shibboleth
fi
###fin de la boucle d'affichage
done
####fin condition réponse P
fi
#####Réponse non P
####boucle principale pour permettre boucle de lecture de radio
while [[ ! -z $qun ]] || [[ ! $qun = "*" ]]
do
###Pas de numéro : boucle vérification caractère non numérique de la réponse
while [[ ! "$qun" =~ ^[-+]?[0-9]+$ ]]
do
##boucle recherche par mot
ra=0
i=0
for ra in "${array2[@]}"
do
##couleur messages éventuels
tput setaf 3
##Effacement accents éventuels
raef=$(echo "$ra" | sed 'y/àçéèëêïîöôùüûÀÇÉÈËÊÏÎÖÔÙÜÛ/aceeeeiioouuuACEEEEIIOOUUU/')
qunef=$(echo "$qun" | sed 'y/àçéèëêïîöôùüûÀÇÉÈËÊÏÎÖÔÙÜÛ/aceeeeiioouuuACEEEEIIOOUUU/')
##recherche
i=$((i+1))
if echo $raef | grep -qi $qunef
then
#couleur résultats
tput setaf 2
#affichage résultats
echo -e $i '\t' '\t' ${array2[$i]}
#fin de la boucle de vérification de la liste
fi
done
##Nouvelle demande après affichage par mot
tput setaf 3
echo
read -p "Numéro de radio, recherche par mot, réafficher la Liste (L), Stopper le programme (S) ? " qun
echo
##Vérification réponse non vide pour grep
while [[ -z $qun ]] || [[ $qun = "*" ]]
do
echo
echo "L'absence de réponse est une question répétée."
echo
read -p "Numéro de radio, recherche par mot, réafficher la Liste (L), Stopper le programme (S) ? " qun
echo
done
##réinitialisation si demande affichage de la liste
if [ "$qun" = L ]
then
exec "$0"
fi
##sortie du programme si demande"
if [ "$qun" = S ]
then
exit
fi
###fin boucle recherche non numérique
done
####lecture du flux
###Information sur la radio
tput setaf 6
echo En écoute : ${array2[qun]}
echo
###lecture
$lec $dev $mix $vol ${array[$qun]}
echo "Interruption de la radio ou radio indisponible."
echo
qun=shibboleth
####fin boucle réponse non P question initiale
done
#######sortie, remise à niveau son et couleur
$con $mix $vol
tput setaf 0
echo
echo
exit