เปลี่ยนเส้นทางเสียง (ไมโครโฟน) ผ่าน ssh, วิธีการโทรศัพท์ผ่าน ssh?


47

ฉันจะเปลี่ยนไมโครโฟนของคอมพิวเตอร์เครื่องหนึ่งเพื่อฟังบนคอมพิวเตอร์เครื่องอื่นผ่าน ssh ได้อย่างไร อุปกรณ์ตัวไหนที่ถูกต้องหรือบรรทัดคำสั่งที่ถูกต้อง?

เมื่อหลายปีก่อนมันเป็นเรื่องง่ายและสนุกที่จะเปลี่ยนเส้นทางเสียงจากไมโครโฟนระยะไกลไปยังเครื่องคอมพิวเตอร์หรือในทางกลับกันมันเป็นโทรศัพท์ที่ง่าย มีคำแนะนำบางอย่าง สำหรับมัน แต่ดูเหมือนว่าไม่มีใครสามารถทำงานกับคอมพิวเตอร์ / ลินุกซ์รุ่นใหม่ได้ ฉันยังไม่มีคอมพิวเตอร์เลย (Fedora 17)/dev/audio

ฉันคิดว่ามันอาจมีบางอย่างเกี่ยวกับเสียงชีพจร หรือฉันไม่ต้องการเสียงชีพจรสำหรับโทรศัพท์ธรรมดานี้ อุปกรณ์ตัวไหนที่เหมาะสม?

ฉันสามารถเห็นอุปกรณ์เสียงทั้งหมดของฉันเมื่อฉันเริ่มalsamixerและกดปุ่ม F6 แต่ฉันไม่รู้ว่าอุปกรณ์ใดใน/devทรีของฉัน

คำตอบ:


53

ตกลงฉันเพิ่งพบมันและยังใช้งานได้! สนุกจริงๆ. คุณไม่ต้องการแอปพลิเคชั่นแฟนซี, ผู้ส่งข้อความด่วนหรือสิ่งที่คล้ายกัน ด้วยคำสั่งนี้คุณจะส่งเสียงไปยังรีโมตโฮสต์

arecord -f cd -t raw | oggenc - -r | ssh <user>@<remotehost> mplayer -

หรือถ้าคุณชอบ ffmpeg ดีกว่า

ffmpeg -f alsa -ac 1 -i hw:3 -f ogg - \
    | ssh <user>@<remotehost> mplayer - -idle -demuxer ogg

ที่มา: http://shmerl.blogspot.de/2011/06/some-fun-with-audio-forwarding.html


หากคุณต้องการโทรศัพท์จริง:

คำสั่งดังกล่าวเป็นเพียงทิศทางเดียวเท่านั้น สำหรับทิศทางอื่นคุณต้องเริ่มต้นเซสชัน ssh อื่น ดังนั้นเพื่อรับสิ่งที่ผู้ใช้รายอื่นพูดกับคุณใช้

ssh <user>@<remotehost> 'arecord -f cd -t raw | oggenc - -r' | mplayer -

หรือถ้าคุณชอบ ffmpeg ดีกว่า

ssh <user>@<remotehost> ffmpeg -f alsa -ac 1 -i hw:3 -f ogg - \
    | mplayer - -idle -demuxer ogg

ที่hw:3เป็น alsadevice ที่คุณต้องการที่จะบันทึก (พบว่ามันมีarecord -lคุณยังสามารถใช้ชื่ออุปกรณ์, พบนี้มีarecord -Lในหลาย ๆ กรณีคุณก็สามารถใช้อุปกรณ์ที่ระบุไว้ที่มีคำสั่งดังต่อไปนี้arecord -L | grep sysdefault)

ปรับปรุง

ในปี 2018 ในระบบ Fedora Linux ของฉันffmpegไม่มีการสนับสนุน alsa (ดูเหมือนว่าจะเหมือนกันในระบบ RaspberryPi กับ Raspbian) แต่มีวิธีง่ายๆโดยไม่ต้องคอมไพล์ใหม่ เพียงไพพ์เอาท์พุทของ arecord (alsarecorder) ไปยัง ffmpeg:

ssh <user>@<remotehost> 'arecord -f cd -D plughw:2 | ffmpeg -ac 1 -i - -f ogg -' \
    | mplayer - -idle -demuxer ogg

คุณได้รับอุปกรณ์อินพุตplughw:2โดยค้นหาอุปกรณ์ของคุณในผลลัพธ์ของคำสั่งต่อไปนี้:

arecord -l

ในกรณีของฉันฉันเห็นcard0และcard2(เว็บแคมของฉันมีไมโครโฟน) ดังนั้นฉันจึงเขียนสำหรับplughw:2card2

อัปเดต 2 (ไม่มี mplayer)

หากคุณไม่มีหรือชอบmplayerแต่ffplay(ซึ่งเป็นส่วนหนึ่งffmpeg) คุณสามารถใช้:

  • คลื่นเสียงที่ไม่บีบอัด (แบนด์วิดท์สูง, การใช้ cpu ต่ำมากในด้านการบันทึก)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2" | ffplay -nodisp -
    
  • บีบอัดด้วย flac (แบนด์วิดท์ต่ำ, การใช้ cpu ต่ำในด้านการบันทึก)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | flac - -o -" | ffplay -nodisp -
    
  • บีบอัดด้วย ogg (แบนด์วิดท์ต่ำมาก, การใช้ cpu สูงในด้านการบันทึก)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | ffplay -nodisp -
    

1
มีเหตุผลบางอย่างที่คุณกำลังทำcat - | mplayer -แทนที่จะเป็นเพียงแค่mplayer -?
Chris Down

เหตุผลก็คือ: ฉันเพิ่งคัดลอกคำสั่งจากแหล่งอ้างอิง อาจจะซ้ำซ้อน ฉันลบไปแล้วดูเหมือนว่าจะยังใช้งานได้ อาจมีกรณีที่จำเป็นและผู้เขียนรู้เกี่ยวกับมันโดยไม่บอกในโพสต์ของเขา?
erik

3

คำตอบของ Erik ทำงานได้ดี แต่ใช้อย่างที่มันเป็นอยู่ใช้flacหรือoggencมีความล่าช้าที่สำคัญ
วิธีการแก้ปัญหาคือการเพิ่ม-cache 256ไปยังmplayerคำสั่งจึงจะมีลักษณะดังต่อไปนี้:

ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | mplayer -cache 256 -

สิ่งที่จะกล่าวถึงก็คือปัจจุบันทุกวันนี้การกระจายที่ทันสมัยใช้ PulseAudio ซึ่งควบคุมอุปกรณ์ฮาร์ดแวร์ดังนั้นการใช้plughw:2จะล้มเหลวหาก PulseAudio ทำงานอยู่
โดยทั่วไปdefaultควรใช้งานได้ดีและใช้ PulseAudio ซึ่งคุณสามารถใช้pavucontrolหรือคล้ายกันเพื่อเลือกแหล่งสัญญาณเข้าที่คุณต้องการโดยใช้ PulseAudio

ที่จะทำให้คำสั่งดังต่อไปนี้:

ssh <user>@<remotehost> "arecord -f cd | oggenc -" | mplayer -cache 256 -

แต่:สิ่งนี้นำเสนอความล่าช้า ในกรณีของฉันมันประมาณแปดวินาที มันแย่มาก


การแก้ปัญหานั้นง่ายกว่าคำสั่งอื่น ๆ :

ssh <user>@<host> "arecord -f S16_LE -r 36000" | aplay

แค่นั้นแหละ. นี่ใช้ CPU แทบทุกชนิด (0.1% ตามhtop) กำลังใช้แบนด์วิดท์ ~ 60KB / s สำหรับฉัน

หากคุณต้องการเสียงสเตอริโอ: ssh <user>@<host> "arecord -f cd" | aplay
มีประโยชน์เฉพาะเมื่อคุณมีไมโครโฟนสเตอริโอเพิ่มแบนด์วิดท์เป็น ~ 150KB / s สำหรับฉัน (เนื่องจากมันเพิ่มอัตราการสุ่มตัวอย่างเป็น 44100Hz)

ข้อมูลเพิ่มเติมเกี่ยวกับอัตราการสุ่มตัวอย่าง ( -r) และอัตราบิต (ผลกระทบจาก-f) สามารถพบได้ที่นี่
โดยทั่วไป: ยิ่งคุณไปต่ำคุณภาพยิ่งแย่ลง แต่จำเป็นต้องใช้แบนด์วิดท์ที่ต่ำลง

โซลูชันนี้เข้ากันได้กับ PulseAudio อย่างสมบูรณ์คุณสามารถควบคุมอุปกรณ์เอาต์พุตปริมาณและอื่น ๆ โดยใช้pactlหรือpavucontrolแอปพลิเคชัน GUI:

pavucontrol

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