Comment puis-je rediriger le microphone d'un ordinateur pour l'écouter sur un autre ordinateur via ssh? Quel est le bon appareil ou quelle est la bonne ligne de commande?
Il y a quelques années, il était facile et amusant de rediriger le son d'un microphone distant vers un ordinateur local ou vice versa - c'était un téléphone facile. Il y a certainsinstructions pour cela, mais aucun d'entre eux ne semble fonctionner sur les nouveaux ordinateurs/distributions Linux. Je n'ai même pas de /dev/audio
sur mon ordinateur (Fedora 17).
Je pense que cela peut avoir quelque chose à voir avec le son Pulse. Ou n'ai-je pas besoin de l'audio Pulse pour ce simple téléphone? Quel est le bon appareil?
Je peux voir tous mes périphériques audio lorsque je démarre alsamixer
et appuie sur la touche F6. Mais je ne sais pas quels sont les appareils de mon /dev
arbre.
OK, je viens de le trouver, et ça marche toujours! Très drôle. Vous n'avez pas besoin d'applications sophistiquées, de messageries instantanées ou similaires. Avec cette commande, vous envoyez votre audio à l'hôte distant.
arecord -f cd -t raw | oggenc - -r | ssh <user>@<remotehost> mplayer -
Ou si vous préférez ffmpeg
ffmpeg -f alsa -ac 1 -i hw:3 -f ogg - \
| ssh <user>@<remotehost> mplayer - -idle -demuxer ogg
Source: http://shmerl.blogspot.de/2011/06/some-fun-with-audio-forwarding.html
La commande ci-dessus n'était que pour une seule direction. Pour l'autre direction, vous devez démarrer une autre session ssh. Donc, pour recevoir ce que l'autre utilisateur vous dit , utilisez
ssh <user>@<remotehost> 'arecord -f cd -t raw | oggenc - -r' | mplayer -
Ou si vous préférez ffmpeg
ssh <user>@<remotehost> ffmpeg -f alsa -ac 1 -i hw:3 -f ogg - \
| mplayer - -idle -demuxer ogg
où hw:3
est le même appareil que vous souhaitez enregistrer (trouvez-le avec arecord -l
; vous pouvez également utiliser un nom d'appareil, trouvez-le avec arecord -L
; dans de nombreux cas, vous pouvez simplement utiliser le périphérique répertorié avec la commande suivante: arecord -L | grep sysdefault
).
En 2018, sur mes systèmes Fedora Linux, ffmpeg
ne comprend pas de support alsa (il semble qu'il en soit de même sur les systèmes RaspberryPi avec Raspbian). Mais il existe une solution simple sans recompilation. Il suffit de diriger la sortie de un enregistrement (alsarecorder) à ffmpeg:
ssh <user>@<remotehost> 'arecord -f cd -D plughw:2 | ffmpeg -ac 1 -i - -f ogg -' \
| mplayer - -idle -demuxer ogg
Vous obtenez le périphérique d'entrée plughw:2
en trouvant votre appareil dans la sortie de la commande suivante:
arecord -l
Dans mon cas, je vois card0
et card2
(ma webcam qui a un microphone). J'ai donc écrit plughw:2
pour card2
.
Si vous n'avez pas ou aimez mplayer
mais ffplay
(qui fait partie de ffmpeg
), vous pouvez utiliser:
audio wave non compressé (bande passante élevée, utilisation très faible du processeur côté enregistrement)
ssh <user>@<remotehost> "arecord -f cd -D plughw:2" | ffplay -nodisp -
compressé avec flac (faible bande passante, faible utilisation du processeur côté enregistrement)
ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | flac - -o -" | ffplay -nodisp -
compressé avec ogg (bande passante très faible, utilisation élevée du processeur côté enregistrement)
ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | ffplay -nodisp -
La réponse d'Erik fonctionne bien, mais en l'utilisant telle quelle, en utilisant flac
ou oggenc
, il y a un retard important.
Une solution consiste à ajouter -cache 256
à la commande mplayer
, donc cela ressemblerait à ceci:
ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | mplayer -cache 256 -
Une autre chose à mentionner est que de nos jours, presque toutes les distributions modernes utilisent PulseAudio, qui prend le contrôle du périphérique matériel, utilisant donc plughw:2
échouera si PulseAudio est en cours d'exécution.
Généralement, default
devrait fonctionner correctement et utiliser PulseAudio, où vous pouvez utiliser pavucontrol
ou similaire pour sélectionner la source d'entrée souhaitée à l'aide de PulseAudio.
Cela rendrait la commande comme suit:
ssh <user>@<remotehost> "arecord -f cd | oggenc -" | mplayer -cache 256 -
MAIS: Cela introduit un décalage. Dans mon cas, c'est environ huit secondes. C'est terrible.
ssh <user>@<Host> "arecord -f S16_LE -r 36000" | aplay
C'est ça. Cela utilise à peine n'importe quel CPU (0,1% selon htop
). Il utilise ~ 60 Ko/s de bande passante pour moi.
Si vous voulez un son stéréo: ssh <user>@<Host> "arecord -f cd" | aplay
Utile uniquement si vous avez un microphone stéréo, augmente la bande passante à ~ 150 Ko/s pour moi. (Puisqu'il augmente également la fréquence d'échantillonnage à 44100Hz).
Plus d'informations sur le taux d'échantillonnage (-r
) et le débit binaire (affecté par -f
) peut être trouvé ici .
Fondamentalement: plus vous descendez, plus la qualité est mauvaise, mais plus la bande passante nécessaire est faible.
Cette solution est entièrement compatible avec PulseAudio, vous pouvez contrôler le périphérique de sortie, le volume et bien plus en utilisant pactl
ou pavucontrol
GUI application: