Il y a deux possibilités que je connais, pour jouer du son à partir d'un environnement Linux sur un appareil Android :
- Jouer à travers les bibliothèques natives ALSA
- Diffuser via PulseAudio
- Rediriger vers le serveur X (sur une socket UNIX ou TCP)
- Diffuser sur IP (TCP ou UDP) par exemple lorsque vous utilisez VNC
La première méthode fonctionne nativement à travers les modules/drivers du noyau ALSA tandis que les deuxième et troisième fonctionnent à travers les bibliothèques PulseAudio
, c'est-à-dire différents modules et protocoles (le package pulseaudio
doit être installé sur Termux / la distribution Linux).
La plupart des OEM Android basent leur architecture sonore sur ALSA, bien que ce ne soit pas nécessaire :
"Vous pouvez utiliser Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS), ou un pilote personnalisé"
En cas de liste des périphériques du noyau ALSA dans /dev/snd/
qui peuvent être manipulés pour diriger le son vers la carte son. Un tutoriel complet peut être trouvé ici. Cela fonctionne, mais pas pour tous les formats audio. C'est parce que les pilotes ALSA chargés sur les appareils Android ne peuvent pas être contrôlés (du moins je n'ai pas pu) à travers des outils de l'espace utilisateur Linux standard de manière directe car ils ne sont pas compatibles (se référer aux modifications/ajouts dans le noyau Linux par Google/OEMs, aux HALs propriétaires à code source fermé dans l'espace utilisateur, et aux différences entre ALSA vs. TinyALSA). L'accès à /proc/asound/
n'est pas possible sans root, voir les détails dans cette réponse. Le projet ALSA est ici.
Il existe également des solutions plus personnalisées qui fonctionnent à la fois avec ALSA et PulseAudio telles que Music Player Daemon.
Lors de l'utilisation du serveur X :
XSDL Server
est la seule application serveur X bien développée pour Android que je connaisse, malheureusement plus développée. Elle a un serveur PulseAudio intégré avec module-cli-protocol-tcp
déjà chargé, écoutant sur le port standard 4712
par défaut. Une fois que la session X est lancée sur Linux, nous pouvons diriger le son des bibliothèques client PulseAudio Linux vers le serveur PulseAudio XDSL en définissant la variable d'environnement suivante sur Linux :
$ export PULSE_SERVER=tcp:127.0.0.1:4712
* 127.0.0.1 indique que Linux et XDSL sont exécutés sur le même appareil
Ou pour définir de manière permanente, éditez le fichier :
# /etc/pulse/client.conf ou ~/.config/pulse/client.conf
default-server = tcp:127.0.0.1:4712
Maintenant, tout lecteur multimédia fonctionnant dans cet environnement qui utilise les bibliothèques client PulseAudio, diffusera son audio vers l'application XDSL. Vous pouvez également rediriger l'affichage de la session X et le son vers un serveur X exécuté sur un PC mais cela nécessite une configuration plus compliquée.
Lors de l'utilisation de VNC :
Le protocole VNC ne prend pas en charge le son par défaut. Cependant, le serveur PulseAudio peut diffuser sur TCP/UDP en utilisant différents protocoles. Il existe des applications disponibles pour Android qui peuvent lire simple protocol
(par exemple, Simple Protocol Player) et real-time transport protocol
(par exemple, VLC). Pour cela, nous devons charger le module PulseAudio correspondant.
Pour configurer un démon PulseAudio local, commentez d'abord les lignes suivantes :
# /etc/pulse/default.pa
#ifexists module-console-kit.so
#load-module module-console-kit
#.endif
Sinon, le démon échouera au démarrage si /usr/lib/pulse*/modules/module-console-kit.so
existe mais que le package consolekit
n'est pas installé (ce qui est obsolète, remplacé par systemd-login
et n'est plus présent dans de nombreux dépôts Linux).
Assurez-vous que autospawn
est défini sur yes
afin que nous n'ayons pas besoin de démarrer manuellement le démon et qu'il démarre automatiquement avec l'environnement de bureau. Ce n'est pas nécessaire si nous démarrons le démon manuellement.
# /etc/pulse/client.conf
# Autospawn a PulseAudio server/daemon when needed
autospawn = yes
Maintenant, démarrez le démon pulseaudio et notez la valeur de la source, pour moi c'est auto_null.monitor
:
$ pulseaudio --start && pactl list | grep -A2 -i RUNNING
$ DISPLAY=:0 pulseaudio --start
Chargez le module simple-protocol :
$ DISPLAY=:0 pactl load-module module-simple-protocol-tcp rate=48000 format=s16le channels=2 source=auto_null.monitor record=true port=8000 listen=127.0.0.1
Ou pour définir de manière permanente, éditez le fichier :
$ echo 'load-module module-simple-protocol-tcp rate=48000 format=s16le channels=2 source=auto_null.monitor record=true port=8000 listen=127.0.0.1' >> /etc/pulse/default.pa
Les éléments suivants doivent être activés dans les paramètres de démarrage du DE, car certains programmes tels que emixer
sur l'environnement de bureau Enlightenment
ne fonctionnent que si le serveur PulseAudio dans le serveur X local est publié :
$ DISPLAY=:0 start-pulseaudio-x11
Démarrer l'application Simple Player et vérifier que le débit binaire (bitrate)
et le port
sont définis dans la commande précédente, i.e. 48000
et 8000
dans mon cas. N'utilisez pas listen=127.0.0.1
si vous souhaitez écouter sur un PC également.
J'ai testé les deux solutions basées sur PulseAudio sur ArchLinuxARM
et Ubuntu
, et elles fonctionnent sans accès root. Cependant, SELinux
peut restreindre l'accès à certaines ressources s'il est exécuté dans un contexte non root. De plus, pour obtenir un accès réseau et créer des sockets, vous devez être membre du groupe inet (3003) nécessairement. Toutes les applications ayant l'autorisation android.permission.INTERNET accordée sont membres de ce groupe.
0 votes
Quel est votre client, Linux ou Termux ? Sur quel ordinateur essayez-vous de faire fonctionner l'audio, le client ou le serveur ? Sur quel appareil PulseAudio est-il installé ?