linux arecord: capture la sortie de la carte son plutôt que l'entrée microphone

20

J'essaie de capturer la sortie de la carte son et de l'encoder au format Vorbis ogg en utilisant la commande suivante:

arecord -f cd -t raw | oggenc - -r -o file.ogg

Cependant, l'entrée microphone de l'ordinateur est enregistrée plutôt que la sortie de la carte son.

La sortie de la commande arecord -lest

**** List of CAPTURE Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: CONEXANT Analog [CONEXANT Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

La sortie de la commande arecord -Lest contenue dans cette entrée pastebin .

La arecordpage de manuel indique que le périphérique d'entrée peut être sélectionné à l'aide de l' -Dindicateur, mais ne donne aucun exemple syntaxique.

Je voudrais savoir comment changer l'entrée pour arecorddu microphone à la carte son. Je ne suis pas intéressé par les alternatives basées sur l'interface graphique telles que Audacity. Merci.

Edit: j'utilise Debian 7.0 (stable) avec la arecordversion 1.0.25, la vorbis-toolsversion 1.4.0 et la version 1.0.24 du pilote ALSA.

user001
la source
Votre matériel a-t-il un contrôle de mixage pour router la sortie vers le périphérique de capture?
CL.
@CL. Le seul mélangeur pré-installé que je connaisse est alsamixer. Si je sélectionne la carte de bouclage dans alsamixer(touche F6 pour sélectionner la carte son), je reçois le message This sound device does not have any controls. Si je quitte la console de mixage et que je reviens, je trouve que la carte son est restaurée du bouclage à la carte par défaut. Tenter de suspendre ( ctrl-z) et d'arrière-plan ( bg) le alsamixerprocessus après la sélection loopbackne permet pas l'enregistrement réussi de l'audio via la arecordcommande.
user001
La sélection de carte dans alsamixern'affecte pas le reste du système; il change juste les contrôles qui sont affichés. Quels sont les contrôles de sélection d'enregistrement de l'appareil Conexant?
CL.
@CL. Pour mon appareil Conexant, j'ai un contrôle de lecture ( Master) et un contrôle de capture ( Capture) à l'intérieur alsamixer. La capture peut être activée et désactivée avec la barre d'espace à l'intérieur alsamixeret elle est activée par défaut. Veuillez me faire savoir si ce n'est pas ce que vous vouliez. Merci.
user001

Réponses:

6

Je suggère d'utiliser le pilote de bouclage ALSA. Pour le charger:

sudo modprobe snd-aloop

Cela devrait ajouter un nouveau périphérique de capture à la sortie de arecord -L.

Si vous n'avez qu'une seule carte son physique sur votre ordinateur, vous pouvez faire de la carte son de bouclage la valeur par défaut pour toutes les applications en créant un fichier .asoundrcdans votre dossier de départ avec le contenu suivant:

pcm.!default {
    type hw
    card 1
    device 0
}

Pendant que ce fichier est en place, toute sortie audio de toutes les applications doit aller vers l'adaptateur de bouclage plutôt que vers vos enceintes réelles. Spécifiez simplement le bon périphérique dans votre commande arecord et une fois que vous avez terminé, supprimez le .asoundrcfichier pour revenir à la normale.

beveradb
la source
Merci pour vos suggestions. Malgré la création .asoundrcdans mon répertoire personnel et le redémarrage de la session de l'émulateur de terminal, le son est toujours dirigé vers les haut-parleurs. La arecord -f cd -t raw | oggenc - -r -o file.oggcommande n'enregistre rien. L'émission arecord -lfournit la même liste que précédemment, mais avec deux lignes supplémentaires pour card 1: Loopback( devices 0, 1), chacune avec 8 sous-appareils ( #0-#7). De même, a arecord -Lajouté les trois lignes suivantes: sysdefault:CARD=Loopback [newline] Loopback, Loopback PCM [newline] Default Audio Device. Suite dans le commentaire suivant en raison de la limite de caractères.
user001
Attemping arecord -f cd -t raw --device=sysdefault | oggenc - -r -o file.oggenregistre un fichier audio vierge pendant la durée d'exécution de la commande (il ne tire pas les données audio du microphone comme auparavant). Malheureusement, sysdefaultest dégénéré car il est défini à la fois CARD=PCH(première ligne de arecord -L) et CARD=Loopback(dernière ligne de arecord -L). Merci pour toutes les suggestions de suivi que vous pouvez fournir.
user001
Le bouclage permet d'enregistrer uniquement ce qui est lu sur son appareil de lecture, pas sur la sortie de la carte son.
CL.
Désolé ma réponse n'a pas fonctionné - cela fonctionne sur ma configuration. Je recommande de jeter un œil à cette explication du fichier asoundrc: alsa-project.org/main/index.php/Asoundrc Je suis assez sûr que si vous essayez quelques choses et jouez avec différents appareils un peu plus, vous devriez faire fonctionner. Un peu compliqué, mais avez-vous un câble physique de 3,5 mm à> 3,5 mm? Si c'est le cas, vous pouvez toujours simplement connecter la prise de sortie de votre casque à la prise d'entrée micro / ligne.
beveradb
Si vous ne pouvez pas le faire fonctionner avec asoundrc, ces liens peuvent fournir plus d'informations pour vous aider à le comprendre: sabi.co.uk/Notes/linuxSoundALSA.html#tasksRecordPlay forum.vectorlinux.com/index.php?topic=7500.0 If vous ne pouvez toujours pas le faire fonctionner, vous pouvez passer à l'utilisation de PulseAudio au lieu d'ALSA. Cette réponse explique comment procéder à l'aide de PulseAudio: askubuntu.com/questions/171287/…
beveradb
6

des années plus tard, la lutte continue ... comment spécifier le périphérique d'enregistrement, voilà:

➜  ~ arecord -l                                                              
**** List of CAPTURE Hardware Devices ****                                   
card 0: PCH [HDA Intel PCH], device 0: CX20590 Analog [CX20590 Analog]       
  Subdevices: 1/1                                                            
  Subdevice #0: subdevice #0                                                 
card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]       
  Subdevices: 1/1                                                            
  Subdevice #0: subdevice #0     

➜  ~ arecord -f S16_LE -r 44100 --device="hw:1,0" plik.wav                   
Recording WAVE 'plik.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono 
^C
Aborted by signal Interrupt...  

Ainsi, le format de la chaîne de périphérique est hw:<card>,<device>

format de l'identifiant de l'appareil

Maciej Jankowski
la source
6

J'ai eu le même problème et j'ai trouvé une autre solution ici . L'idée principale est d'utiliser pacat. Pour moi, cela fonctionne comme ceci:

1) trouver le moniteur:

$ pacmd list | grep "\.monitor"
name: <alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor>
name: <alsa_output.pci-0000_00_1b.0.analog-stereo.monitor>
        alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor/#0: Monitor of HDA NVidia Digital Stereo (HDMI)
        alsa_output.pci-0000_00_1b.0.analog-stereo.monitor/#2: Monitor of Built-in Audio Analog Stereo

2) Capturez l'audio dans un fichier:

$ pacat --record -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor > dump.raw

3) Convertissez le fichier en wav:

sox -t raw -r 44100 -e signed-integer -L -b 16 -c 2 dump.raw output.wav

C'est ça!

hochl
la source
3
Notez que vous pouvez utiliser à la parecplace de pacat --record. Vous pouvez également éviter l'utilisation soxet l'utilisation parec -d <monitor> --file-format=wav output.wav. Vous pouvez répertorier les formats de fichiers disponibles avec parec --list-file-formats.
Peque
3

Votre matériel ne prend pas en charge la capture de sa sortie; une fois que les données sont entrées dans le périphérique de lecture réel, elles ont disparu.

Vous devez utiliser un logiciel qui duplique les données audio avant de les écrire sur le matériel.

Je suggère d'utiliser PulseAudio; là, vous pouvez simplement sélectionner l'une de ses sorties comme source de capture: surveillance des sorties pavucontrol

CL.
la source
J'ai installé pavucontrolet essayé d'enregistrer en utilisant gnome-sound-recorder. Lorsque j'ouvre gnome-sound-recorderet commence à recoder ( Ctrl-R), le flux apparaît dans la fenêtre PulseAudio Volume Control. Cependant, le flux n'enregistre aucune donnée (la durée finale est 0:00). De plus, savez-vous comment effectuer l'enregistrement via la ligne de commande au lieu d'une interface graphique? Merci .
user001
1
  1. Accédez à PulseAudio Volume Control -> onglet Périphériques d'entrée. En bas, choisissez d'afficher "TOUS les périphériques d'entrée". Vérifiez si "Monitor of Internal Audio Analog Stereo" n'est pas mis en sourdine et le volume monte et descend lorsque vous lisez l'audio !!

  2. Utilisez l' enregistreur audio pour enregistrer la source audio = stéréo audio analogique interne (entrée audio). Voir capture d'écran ci-dessous.

entrez la description de l'image ici

Zid
la source