linux arecord: จับเอาท์พุทการ์ดเสียงมากกว่าอินพุตไมโครโฟน


20

ฉันพยายามที่จะจับเอาท์พุทการ์ดเสียงและเข้ารหัสในรูปแบบ Vorbis ogg โดยใช้คำสั่งต่อไปนี้:

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

อย่างไรก็ตามอินพุตไมโครโฟนของคอมพิวเตอร์จะถูกบันทึกไว้แทนที่จะเป็นเอาต์พุตของการ์ดเสียง

ผลลัพธ์ของคำสั่งarecord -lคือ

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

เอาต์พุตของคำสั่งarecord -Lมีอยู่ในรายการ pastebinนี้

arecordหน้าคนแสดงให้เห็นว่าอุปกรณ์ป้อนข้อมูลสามารถเลือกใช้-Dธง แต่ให้ไม่มีการสร้างประโยคตัวอย่าง

ฉันต้องการทราบวิธีเปลี่ยนอินพุตarecordจากไมโครโฟนเป็นการ์ดเสียง ฉันไม่สนใจทางเลือกที่ใช้ GUI เช่น Audacity ขอบคุณ

แก้ไข: ฉันใช้ Debian 7.0 (เสถียร) พร้อมไดรเวอร์เวอร์ชันarecord1.0.25, vorbis-toolsเวอร์ชัน 1.4.0 และ ALSA เวอร์ชัน 1.0.24


ฮาร์ดแวร์ของคุณมีตัวควบคุมตัวปรับแต่งเสียงเพื่อกำหนดเส้นทางเอาต์พุตกลับไปยังอุปกรณ์จับภาพหรือไม่?
CL

@CL alsamixerผสมเท่านั้นที่ติดตั้งที่ฉันรู้คือ ถ้าผมเลือกบัตรย้อนกลับภายในalsamixer(คีย์ F6 เพื่อเลือกการ์ดเสียง) This sound device does not have any controlsผมได้รับข้อความ หากฉันออกจากมิกเซอร์และกลับมาฉันพบว่าการ์ดเสียงนั้นได้รับการกู้คืนจากลูปแบ็คไปเป็นการ์ดเริ่มต้น ความพยายามที่จะระงับ ( ctrl-z) และพื้นหลัง ( bg) alsamixerกระบวนการหลังจากการเลือกloopbackไม่เปิดใช้งานการบันทึกเสียงที่สำเร็จผ่านarecordคำสั่ง
user001

การเลือกการ์ดในalsamixerไม่ส่งผลกระทบต่อส่วนที่เหลือของระบบ มันแค่เปลี่ยนการควบคุมที่จะแสดง ตัวควบคุมการเลือกการบันทึกของอุปกรณ์ Conexant คืออะไร
CL

@CL สำหรับอุปกรณ์ Conexant ของฉันฉันมีหนึ่งในการควบคุมการเล่น ( Master) และการควบคุมการจับภาพ ( Capture) alsamixerภายใน การจับภาพสามารถสลับเปิดและปิดด้วยสเปซบาร์ภายในalsamixerและจะเปิดตามค่าเริ่มต้น โปรดแจ้งให้เราทราบหากนี่ไม่ใช่สิ่งที่คุณตั้งใจ ขอบคุณ
user001

คำตอบ:


6

ฉันขอแนะนำให้ใช้ไดรเวอร์ลูปแบ็กอัลซ่า ในการโหลด:

sudo modprobe snd-aloop

arecord -Lนี้ควรเพิ่มอุปกรณ์จับภาพใหม่เพื่อการส่งออกจาก

หากคุณมีการ์ดเสียงจริงหนึ่งตัวในคอมพิวเตอร์ของคุณคุณสามารถทำให้การ์ดเสียงวนรอบเป็นค่าเริ่มต้นสำหรับแอปทั้งหมดโดยสร้างไฟล์.asoundrcในโฟลเดอร์โฮมของคุณด้วยเนื้อหาต่อไปนี้:

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

ในขณะที่ไฟล์นี้มีอยู่เสียงออกจากแอพพลิเคชั่นทั้งหมดควรไปที่อะแดปเตอร์ย้อนกลับแทนที่จะเป็นลำโพงจริงของคุณ เพียงระบุอุปกรณ์ที่ถูกต้องในคำสั่ง arecord ของคุณและเมื่อเสร็จแล้วให้ลบ.asoundrcไฟล์เพื่อกลับไปเป็นปกติ


ขอบคุณสำหรับคำแนะนำของคุณ แม้จะสร้าง.asoundrcในโฮมไดเร็กตอรี่ของฉันและรีสตาร์ทเซสชันเทอร์มินัลอีมูเลเตอร์, เสียงยังคงถูกนำไปยังลำโพง arecord -f cd -t raw | oggenc - -r -o file.oggบันทึกคำสั่งอะไร การออกarecord -lให้รายการเหมือนเดิม แต่มีสองบรรทัดเพิ่มเติมสำหรับcard 1: Loopback( devices 0, 1) แต่ละรายการมี 8 subevices ( #0-#7) ในทำนองเดียวกันarecord -Lเพิ่มสามบรรทัดต่อไปนี้: sysdefault:CARD=Loopback [newline] Loopback, Loopback PCM [newline] Default Audio Device. ดำเนินการต่อในความคิดเห็นถัดไปเนื่องจากขีด จำกัด อักขระ
user001

การพยายามarecord -f cd -t raw --device=sysdefault | oggenc - -r -o file.oggบันทึกไฟล์เสียงเปล่าในช่วงเวลาที่คำสั่งถูกดำเนินการ (ซึ่งไม่ได้ดึงข้อมูลเสียงจากไมโครโฟนเหมือนก่อนหน้านี้) น่าเสียดายที่sysdefaultแย่ลงเพราะมันถูกกำหนดให้เป็นทั้งCARD=PCH(บรรทัดแรกของarecord -L) และCARD=Loopback(บรรทัดสุดท้ายของarecord -L) ขอบคุณสำหรับคำแนะนำการติดตามที่คุณสามารถให้ได้
user001

ลูปแบ็คอนุญาตให้บันทึกเฉพาะสิ่งที่เล่นไปยังอุปกรณ์เล่นของมันไม่ใช่ไปยังเอาต์พุตการ์ดเสียง
CL

ขออภัยคำตอบของฉันไม่ทำงาน - ใช้งานได้กับการตั้งค่าของฉัน ฉันขอแนะนำให้ดูที่คำอธิบายของไฟล์ asoundrc นี้: alsa-project.org/main/index.php/Asoundrc ฉันค่อนข้างแน่ใจว่าถ้าคุณลองทำบางสิ่งและเล่นกับอุปกรณ์อื่น ๆ อีกมากคุณควร ทำให้มันทำงาน kludge นิดหน่อย แต่คุณมีสาย 3.5 มม. จริง -> 3.5 มม. หรือไม่? หากเป็นเช่นนั้นคุณสามารถเชื่อมต่อแจ็คเอาต์พุตหูฟังของคุณเข้ากับแจ็คไมโครโฟน / สายเข้าได้เสมอ
beveradb

หากคุณไม่สามารถทำงานร่วมกับ asoundrc ลิงก์เหล่านี้อาจให้ข้อมูลเพิ่มเติมเพื่อช่วยในการค้นหา: sabi.co.uk/Notes/linuxSoundALSA.html#tasksRecordPlay forum.vectorlinux.com/index.php?topic=7500.0 หาก คุณยังไม่สามารถใช้งานได้คุณสามารถเปลี่ยนไปใช้ PulseAudio แทน ALSA คำตอบนี้อธิบายวิธีการใช้ PulseAudio: askubuntu.com/questions/171287/…
beveradb

6

หลายปีต่อมาการต่อสู้ยังดำเนินต่อไป ... จะระบุอุปกรณ์บันทึกได้อย่างไรและดูเถิด:

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

ดังนั้นรูปแบบสำหรับสตริงอุปกรณ์คือ hw:<card>,<device>

รูปแบบของรหัสอุปกรณ์


6

ฉันมีปัญหาเดียวกันและพบวิธีอื่นที่นี่ pacatแนวคิดหลักคือการใช้งาน สำหรับฉันมันใช้งานได้เช่นนี้:

1) ค้นหาอุปกรณ์ตรวจสอบ:

$ 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) จับเสียงเป็นไฟล์:

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

3) แปลงไฟล์เป็นwav:

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

แค่นั้นแหละ!


3
โปรดทราบว่าคุณสามารถใช้แทนparec pacat --recordคุณยังสามารถหลีกเลี่ยงการใช้งานsoxและใช้งานparec -d <monitor> --file-format=wav output.wavได้ parec --list-file-formatsคุณสามารถแสดงรายการรูปแบบไฟล์ที่สามารถใช้ได้กับ
Peque

3

ฮาร์ดแวร์ของคุณไม่รองรับการจับสัญญาณออก เมื่อข้อมูลเข้าสู่อุปกรณ์การเล่นจริงมันก็จะหายไป

คุณต้องใช้ซอฟต์แวร์บางตัวที่ทำซ้ำข้อมูลเสียงก่อนที่จะถูกเขียนลงในฮาร์ดแวร์

ฉันขอแนะนำให้ใช้ PulseAudio; ที่นั่นคุณสามารถเลือกหนึ่งในเอาท์พุทของมันเป็นแหล่งดักจับได้ การตรวจสอบผลลัพธ์ pavucontrol


ผมติดตั้งและการบันทึกพยายามใช้pavucontrol gnome-sound-recorderเมื่อฉันเปิดgnome-sound-recorderและเริ่มการบันทึกใหม่ ( Ctrl-R) กระแสจะปรากฏขึ้นในหน้าต่างการควบคุมระดับเสียงของ PulseAudio สตรีมไม่ได้บันทึกข้อมูลใด ๆ จริง ๆ (ความยาวสุดท้ายคือ 0:00) นอกจากนี้คุณคุ้นเคยกับวิธีการบันทึกผ่านบรรทัดคำสั่งแทน GUI หรือไม่ ขอบคุณ
user001

1
  1. ไปที่ PulseAudio Volume Control -> แท็บอุปกรณ์อินพุต ที่ด้านล่างให้เลือกแสดง "อุปกรณ์อินพุตทั้งหมด" ตรวจสอบว่า "Monitor of Internal Audio Analog Stereo" ไม่ได้ถูกปิดเสียงและระดับเสียงขึ้นหรือลงในขณะที่คุณเล่นเสียง !!

  2. ใช้ตัวบันทึกเสียงเพื่อบันทึกแหล่งกำเนิดเสียง = สเตอริโอระบบเสียงอนาล็อกภายใน (อินพุตเสียง) ดูภาพหน้าจอด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.