Linux Arecord: Erfassen Sie die Soundkartenausgabe und nicht die Mikrofoneingabe

20

Ich versuche, die Soundkartenausgabe zu erfassen und sie mit dem folgenden Befehl im Vorbis-Ogg-Format zu codieren:

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

Der Mikrofoneingang des Computers wird jedoch anstelle des Soundkartenausgangs aufgezeichnet.

Die Ausgabe des Befehls arecord -list

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

Die Ausgabe des Befehls arecord -List in diesem Pastebin-Eintrag enthalten .

Die arecordManpage gibt an, dass das Eingabegerät über das -DFlag ausgewählt werden kann , enthält jedoch keine syntaktischen Beispiele.

Ich würde gerne wissen, wie man den Eingang arecordvom Mikrofon zur Soundkarte ändert . Ich interessiere mich nicht für GUI-basierte Alternativen wie Audacity. Vielen Dank.

Bearbeiten: Ich verwende Debian 7.0 (stabil) mit arecordVersion 1.0.25, vorbis-toolsVersion 1.4.0 und ALSA-Treiberversion 1.0.24.

user001
quelle
Verfügt Ihre Hardware über eine Mischpultsteuerung, um die Ausgabe zurück zum Aufnahmegerät zu leiten?
CL.
@CL. Der einzige vorinstallierte Mixer, der mir bekannt ist, ist alsamixer. Wenn ich die Loopback-Karte in alsamixer(F6-Taste zur Auswahl der Soundkarte) auswähle, erhalte ich die Nachricht This sound device does not have any controls. Wenn ich den Mixer verlasse und zurückkehre, stelle ich fest, dass die Soundkarte aus dem Loopback auf die Standardkarte zurückgesetzt wird. Der Versuch, den Vorgang nach der Auswahl anzuhalten ( ctrl-z) und im Hintergrund ( bg), ermöglicht keine erfolgreiche Audioaufnahme über den Befehl. alsamixerloopbackarecord
Benutzer001
Die Kartenauswahl alsamixerwirkt sich nicht auf den Rest des Systems aus. es ändert sich nur, welche Steuerelemente angezeigt werden. Was sind die Steuerelemente für die Aufnahmeauswahl des Conexant-Geräts?
CL.
@CL. Für mein Conexant-Gerät habe ich eine Wiedergabesteuerung ( Master) und eine Erfassungssteuerung ( Capture) alsamixer. Das Capture kann mit der Leertaste ein- und ausgeschaltet werden alsamixerund ist standardmäßig aktiviert. Bitte lassen Sie mich wissen, wenn dies nicht das ist, was Sie beabsichtigt haben. Vielen Dank.
Benutzer001

Antworten:

6

Ich würde vorschlagen, den ALSA-Loopback-Treiber zu verwenden. So laden Sie es:

sudo modprobe snd-aloop

Dadurch sollte der Ausgabe von ein neues Aufnahmegerät hinzugefügt werden arecord -L.

Wenn Sie nur eine physische Soundkarte in Ihrem Computer haben, können Sie die Loopback-Soundkarte zum Standard für alle Apps machen, indem Sie eine Datei .asoundrcin Ihrem Basisordner mit folgendem Inhalt erstellen :

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

Solange diese Datei vorhanden ist, sollte die Audioausgabe aller Anwendungen an den Loopback-Adapter und nicht an die tatsächlichen Lautsprecher gesendet werden. Geben Sie einfach das richtige Gerät in Ihrem Befehl arecord an. Wenn Sie fertig sind, entfernen Sie die .asoundrcDatei, um zum Normalzustand zurückzukehren.

beveradb
quelle
Vielen Dank für Ihre Anregungen. Trotz der Erstellung .asoundrcin meinem Ausgangsverzeichnis und des Neustarts der Terminalemulatorsitzung wird der Ton weiterhin an die Lautsprecher geleitet. Der arecord -f cd -t raw | oggenc - -r -o file.oggBefehl zeichnet nichts auf. Die Ausgabe arecord -lenthält dieselbe Liste wie zuvor, jedoch zwei zusätzliche Zeilen für card 1: Loopback( devices 0, 1) mit jeweils 8 Teilgeräten ( #0-#7). Ebenso arecord -Lhinzugefügt , um die folgenden drei Zeilen: sysdefault:CARD=Loopback [newline] Loopback, Loopback PCM [newline] Default Audio Device. Fortsetzung im nächsten Kommentar wegen Zeichenbeschränkung.
Benutzer001
Attemping arecord -f cd -t raw --device=sysdefault | oggenc - -r -o file.oggzeichnet eine leere Audiodatei für die Dauer der Befehlsausführung auf (es werden nicht wie zuvor Audiodaten vom Mikrofon abgerufen ). Leider sysdefaultist degeneriert, da definiert wird, dass es sowohl CARD=PCH(erste Zeile von arecord -L) als auch CARD=Loopback(letzte Zeile von arecord -L) ist. Vielen Dank für alle weiteren Vorschläge, die Sie machen können.
user001
Mit dem Loopback kann nur das aufgenommen werden, was auf dem Wiedergabegerät wiedergegeben wird, nicht auf dem Soundkartenausgang.
CL.
Entschuldigung, meine Antwort hat nicht funktioniert - es funktioniert in meinem Setup. Ich würde empfehlen, diese Erklärung der asoundrc-Datei zu lesen: alsa-project.org/main/index.php/Asoundrc Ich bin mir ziemlich sicher, dass Sie ein paar Dinge ausprobieren und ein bisschen mehr mit verschiedenen Geräten herumspielen sollten Bring es zum Laufen. Ein bisschen kludge, aber hast du zufällig ein physikalisches 3.5mm-> 3.5mm Kabel? In diesem Fall können Sie die Kopfhörerausgangsbuchse immer nur an die Mikrofon- / Line-In-Buchse anschließen.
Beveradb
Wenn es mit asoundrc nicht funktioniert, bieten diese Links möglicherweise weitere Informationen, um es herauszufinden: sabi.co.uk/Notes/linuxSoundALSA.html#tasksRecordPlay forum.vectorlinux.com/index.php?topic=7500.0 If Wenn Sie es immer noch nicht zum Laufen bringen, können Sie PulseAudio anstelle von ALSA verwenden. Diese Antwort erklärt, wie dies mit PulseAudio gemacht wird: askubuntu.com/questions/171287/…
beveradb
6

Jahre später geht der Kampf weiter ... wie man das Aufnahmegerät spezifiziert, siehe da:

➜  ~ 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...  

Das Format für die Gerätezeichenfolge lautet also hw:<card>,<device>

Format der Geräte-ID

Maciej Jankowski
quelle
6

Ich hatte das gleiche Problem und fand hier eine andere Lösung . Die Hauptidee ist zu verwenden pacat. Bei mir funktioniert es so:

1) Monitorgerät finden:

$ 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) Audio in Datei aufnehmen:

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

3) Datei konvertieren nach wav:

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

Das ist es!

hochl
quelle
3
Beachten Sie, dass Sie parecanstelle von verwenden können pacat --record. Sie können auch die Verwendung soxund Nutzung vermeiden parec -d <monitor> --file-format=wav output.wav. Mit können Sie verfügbare Dateiformate auflisten parec --list-file-formats.
Peque
3

Ihre Hardware unterstützt die Erfassung der Ausgabe nicht. Sobald die Daten in das eigentliche Wiedergabegerät eingegangen sind, sind sie verschwunden.

Sie müssen eine Software verwenden, die die Audiodaten dupliziert, bevor sie auf die Hardware geschrieben werden.

Ich würde vorschlagen, PulseAudio zu verwenden. Dort können Sie einfach einen seiner Ausgänge als Aufnahmequelle auswählen: Überwachung des Pavucontrol-Ausgangs

CL.
quelle
Ich habe die pavucontrolAufnahme mit installiert und versucht gnome-sound-recorder. Wenn ich öffne gnome-sound-recorderund mit dem Recodieren beginne ( Ctrl-R), wird der Stream im Fenster PulseAudio Volume Control angezeigt. Der Stream zeichnet jedoch keine Daten auf (die endgültige Länge ist 0:00). Kennen Sie sich auch damit aus, wie Sie die Aufzeichnung über die Befehlszeile anstelle einer grafischen Benutzeroberfläche durchführen können? Vielen Dank .
User001
1
  1. Gehen Sie zu PulseAudio Volume Control -> Input Devices Tab. Wählen Sie unten "ALLE Eingabegeräte". Überprüfen Sie, ob der "Monitor des internen Audio-Analog-Stereos" nicht stummgeschaltet ist und die Lautstärke beim Abspielen des Audios lauter und leiser wird !!

  2. Verwenden Sie den Audiorecorder , um Audioquelle = Internes Audio, analoges Stereo (Audioeingang) aufzunehmen. Siehe Screenshot unten.

Bildbeschreibung hier eingeben

Zid
quelle