จะบอก Firefox ให้ใช้อุปกรณ์ ALSA อื่นได้อย่างไร


13

ฉันมีการ์ดเสียงออนบอร์ดและยังมีชุดหูฟังบลูทู ธ ที่เชื่อมต่อด้วย ฉันได้กำหนดค่าอุปกรณ์บลูทู ธ ใน/etc/asound.conf:

# cat /etc/asound.conf

pcm.bluetooth {
    type bluetooth
    device 12:34:56:78:9a:bc
    profile "auto"
}

ctl.bluetooth {
    type bluetooth
}

โดยค่าเริ่มต้นการ์ดออนบอร์ดจะใช้สำหรับเสียงทั้งหมด (เห็นได้ชัดว่าการ์ดออนบอร์ดที่เป็นค่าเริ่มต้นไม่จำเป็นต้องมีการระบุไว้ใน asound.conf)

เมื่อฉันต้องการให้แอปพลิเคชันใช้อุปกรณ์บลูทู ธ ของฉันฉันต้องระบุเช่น:

mplayer -ao alsa:device=bluetooth file.mp3

ไม่เป็นไรสำหรับฉัน แต่ฉันต้องการวิธีบอกเบราว์เซอร์ของฉันให้ใช้อุปกรณ์ Bluetooth alsa ด้วย

ฉันพบวิธีเริ่ม Chromium โดยใช้--alsa-output-deviceตัวเลือก commandline:

chromium --alsa-output-device=bluetooth

ฉันต้องการวิธีคล้ายกันเพื่อเริ่ม Firefox แต่ฉันไม่สามารถหาได้

ฉันจะบอก firefox ให้ใช้อุปกรณ์บลูทู ธ alsa โดยไม่ต้องแก้ไข/etc/asound.confหรือ~/.asoundrcทุกครั้งได้อย่างไร

UPDATE:

ฉันได้ปฏิบัติตามคำแนะนำของ @ lgeorget แล้วและ/etc/asound.confตอนนี้ฉันมีลักษณะเช่นนี้:

pcm.!default {
type plug
slave.pcm {
        @func getenv
        vars [ ALSAPCM ]
        default "hw:0,0"
    }
}

pcm.bluetooth {
    type bluetooth
    device 12:34:56:78:9a:bc
    profile "auto"
}

ctl.bluetooth {
    type bluetooth
}

เมื่อฉันเริ่มใช้ firefox ALSAPCM=bluetooth firefoxฉันจะได้ยินเสียงในชุดหูฟังบลูทู ธ ของฉัน แต่ firefox ทำงานที่ CPU 100% (ใน 4 คอร์ของฉัน) และวิดีโอ youtube เล่นที่ความเร็ว 10 เท่า (และเสียงนั้นสอดคล้องกัน (อ่านไม่ออก) ฉันไม่ เข้าใจสิ่งที่เกิดขึ้นเมื่อฉันเริ่ม Firefox โดยไม่ต้องALSAPCM=bluetoothทุกอย่างก็โอเคและเล่นเสียงบนอุปกรณ์เริ่มต้น


ว้าวผู้ใช้ที่มีป้ายทองคำ 21 เม็ดและมีเพียง 28 ตัวแทน! คุณทำได้อย่างไร?
Dmitry Grigoryev

4
@Dmitry Grigoryev - ฉันใช้จ่ายทุกอย่างในโปรดปราน ...
มาร์ติน Vegter

คำตอบ:


9

เห็นได้ชัดว่าไม่มีตัวเลือกสำหรับ firefox แต่คุณสามารถจัดการเอาต์พุต ALSA ผ่านตัวแปรสภาพแวดล้อม

ลองตัวอย่างเช่น:

ALSA_PCM_CARD=bluetooth firefox

หรือหากวิธีนี้ใช้ไม่ได้ให้ลองใช้สคริปต์. asoundrc ของคุณสักเล็กน้อย

pcm.!default {
type plug
slave.pcm {
        @func getenv
        vars [ ALSAPCM ]
        default "hw:hdmi"
    }
}

(แทนที่ "hw: hdmi" ด้วย pcm ปกติของคุณ) จากนั้นหากคุณต้องการให้โปรแกรมใช้ PCM เฉพาะให้ใช้:

ALSAPCM=bluetooth firefox

แหล่งที่มา:


วิธีแรกไม่ได้ผล เมื่อฉันลองวิธีที่สองฉันจะได้ยินเสียงในชุดหูฟังบลูทู ธ ของฉัน แต่firefoxทำงานที่ CPU 100% (ใน 4 คอร์ของฉัน) และวิดีโอ youtube เล่นที่ความเร็ว 10 เท่า ฉันไม่เข้าใจว่าเกิดอะไรขึ้น เมื่อฉันเริ่ม Firefox โดยไม่ต้องALSAPCM=bluetoothทุกอย่างก็โอเคและเสียงเล่นบนอุปกรณ์เริ่มต้นของอัลซา
Martin Vegter

มีตัวแปรสภาพแวดล้อม ALSA ที่แตกต่างกัน (ดูลิงก์ไปยังวิกิ Archlinux) บางทีอาจใช้งานได้ ฉันประหลาดใจจริงๆเกี่ยวกับปัญหาของ CPU ฉันไม่เห็นสิ่งที่อาจทำให้เกิด
lgeorget

1
โหลด CPU น่าจะเกิดจากข้อเท็จจริงที่ว่าวิดีโอและเสียงกำลังเล่นและสตรีมด้วยความเร็ว 10 เท่า ความลึกลับคือเหตุผลที่ALSAPCM=bluetoothเปลี่ยนความเร็ววิดีโอเป็น 10 เท่า
Martin Vegter

@MartinVegter ดีฉันคัดลอกคำจำกัดความของ pcm.! เริ่มต้นในโพสต์ของฉันจาก wiki มันอาจไม่เหมาะสำหรับกรณีเฉพาะของคุณ โดยเฉพาะอย่างยิ่ง "ปลั๊กชนิด" และ "ทาส" ส่วน
lgeorget

0

ดูเหมือนว่าชาติของข้อผิดพลาดนี้ มีวิธีแก้ไขปัญหาบางอย่างที่แนะนำ แต่ดูเหมือนว่าเฉพาะเจาะจงของ Intel

ลองใช้ pulseaudio หากใช้งานได้คุณสามารถเปลี่ยนเส้นทางโปรแกรม ALSA ของคุณไปยัง pulseaudio ได้ดังต่อไปนี้asound.conf:

pcm.pulse {
    type pulse
}
ctl.pulse {
    type pulse
}
pcm.!default {
    type pulse
}
ctl.!default {
    type pulse
}

หากไม่ได้ช่วยให้ลองเพิ่มrate 44100หรือrate 48000ไปที่ส่วนของคุณpcm.bluetooth asound.confบางที ALSA อาจรู้สึกได้

คุณอาจลองใช้Html5 Youtube Video Speed ​​Controllerแต่ฉันสงสัยว่ามันจะช่วยได้


ขอบคุณ แต่ฉันไม่สนใจโซลูชันที่ใช้ pulseaudio
Martin Vegter

ขอโทษ คุณสามารถลองใช้พารามิเตอร์อัตรานั้นได้หรือไม่
Dmitry Grigoryev

กับพารามิเตอร์อัตรา (ทั้งกับ 44100 และ 48000) ALSA lib audio/pcm_bluetooth.c:1449:(bluetooth_parse_config) Invalid type for rateผมได้รับข้อผิดพลาดต่อไปนี้: ดูเหมือนว่าบลูทู ธ ไม่รองรับrateพารามิเตอร์
Martin Vegter

0

หมายเหตุ: เวอร์ชัน Firefox ปัจจุบันดูเหมือนจะไม่สนใจ ~ / .asound.conf ด้วยเหตุผลที่ไม่ทราบสาเหตุ

หากคุณไม่ใช้ pulseaudio (ส่วนใหญ่จะเป็นเลเยอร์ที่ไม่จำเป็นเหนือ alsa แม้ว่า distros ส่วนใหญ่จะติดตั้ง) ในกรณีส่วนใหญ่คุณจะต้องเลือกเอาต์พุตเสียงเริ่มต้นเป็นแบบอื่น

สิ่งนี้สามารถทำได้ด้วยสิ่งต่อไปนี้.asound.confในบ้านของคุณ:

pcm.!default {
    type hw
    card N
}

ctl.!default {
    type hw           
    card N
}

แทนที่Nด้วยจำนวนเต็มขนาดเล็ก 0 สำหรับการ์ดเสียงแรกของคุณ (ซึ่งเป็นค่าเริ่มต้น) 1 สำหรับวินาทีของคุณและอื่น ๆ

!ใน!defaultไม่ปฏิเสธที่นี่แล้ว! มันคือการแทนที่ของทั่วโลกก่อนหน้านี้ (กำหนดทั้งระบบ) alsa.conf

การกำหนดค่าที่ยุ่งยากมากขึ้นสามารถอ่านได้ที่นี่

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