5 votes

Comment jouer du son depuis Termux lors de l'utilisation de Linux?

J'ai un problème avec le streaming audio, je ne peux pas écouter l'audio de Pulseaudio lorsque j'utilise VNC avec un environnement de bureau Linux.

Cependant, cela fonctionne si j'exporte le son vers XSDL. Mais le problème est que après avoir quitté l'application, le son ne fonctionne pas en arrière-plan.

Je sais que Pulseaudio ne prend en charge que les serveurs Xorg, donc comment diffuser de l'audio vers VNC ou toute autre application sur Android et l'exécuter en arrière-plan.

Je sais qu'il y a une application Simple Protocol Player qui écoute le son pulseaudio depuis le serveur Xorg, mais cela ne fonctionne pas pour moi et je ne connais pas la raison.

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é ?

3voto

Irfan Latif Points 16863

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

Travaillez-vous également sur Userland ? ... Ou seulement sur Termux

0 votes

@Maher_2000 J'ai testé LinuxDeploy et quelques autres applications mais pas UserLAnd. J'ai développé moi-même un environnement Linux dans chroot et namespaces, et je l'utilise via ssh et Termux.

0 votes

Malheureusement, j'ai essayé plusieurs fois de jouer le son sur un lecteur de protocole simple mais le son ne fonctionne pas et l'application me montre le message "impossible de diffuser en continu" et a aussi fait une erreur dans pulseaudio je ne sais pas quelle en est la raison et j'ai essayé sur Termux et Useland mais de toute façon merci de m'avoir aidé. Note : Je suis nouveau dans l'utilisation de Linux et j'utilise le traducteur de langues pour parler avec vous en anglais donc vous remarquerez que mon anglais n'est pas bon ou compréhensible pour vous.

1voto

C1a Points 89

Bonne nouvelle, j'ai pu extraire l'audio vers un lecteur de protocole simple en utilisant pulseaudio pour Android sur Termex mais le problème est que cette méthode ne fonctionne pas sur le pulseaudio officiel car il n'a pas les privilèges d'accès pour avoir le root seulement si vous avez le root sur votre système pouvez-vous extraire l'audio du lecteur Simple Protocol

AVERTISSEMENT : Si l'audio ne fonctionne pas, vérifiez le lien ci-dessous car il y a des notes que je n'ai pas mentionnées

sur Termux


Faites cette commande :

pactl list sources short

  • Visitez le lien ci-dessous pour découvrir l'utilité de cette commande avant de continuer à lire

Et :


Téléchargez l'application

Et :


echo -e "\n# Simple Protocol Player\n\nload-module module-simple-protocol-tcp source=OpenSL_ES_sink.monitor record=true port=12345 rate=44100" >> $PREFIX/etc/pulse/default.pa

Et Redémarrez Termux :


fermez toutes les fenêtres dans termux

Et :


pulseaudio -k

pulseaudio --start

ou seulement :


pulseaudio --start

maintenant installez sox :


apt install sox

Et Jouez un son :


play [file.mp3]

Pour plus d'informations, visitez Lien

0 votes

@IrfanLatif Ce n'est pas la peine de le placer comme meilleure réponse car cette méthode fonctionne uniquement sur Termux, qui ne peut pas être utilisé même à partir de l'environnement Linux installé sur Termux. Cela est dû aux développeurs de Termux qui ont personnalisé le package Pulseaudio qui fonctionne bien uniquement sur leur application mais ne fonctionne pas sur d'autres applications telles que Userland ou ne fonctionnera que s'ils ont accès à l'autorisation Root

1voto

mpg123 myFile.mp3 (pkg install mpg123) jouera un fichier mp3 dans Termux. Pour mettre en pause, appuyez sur ctrl+z. Pour reprendre, tapez % et appuyez sur entrée. Appuyez sur ctrl+c pendant la lecture pour quitter.

En plus de la commande play, que vous avez mentionnée, il y a aussi play-audio (pkg install play-audio).

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X