Bagaimana cara mengubah volume master di PulseAudio secara terprogram?

1

Anda dapat mengubah volume master di dalam terminal itu sendiri dengan menggunakan perintah yang ditunjukkan di bawah ini.

amixer -D pulse sset Master 5%+

Namun, ketika saya mencoba menjalankan kode berikut dengan Python , kesalahan berikut akan ditampilkan.

No protocol specified
xcb_connection_has_error() returned true
ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Connection refused

amixer: Mixer attach pulse error: Connection refused

Dan di sini adalah kode yang menghasilkan kesalahan di atas.

os.system("amixer -D pulse sset Master 5%+")

Bagaimana seseorang mengatasi kesalahan itu?

Ghatak Sena
sumber
Kesalahan "tidak dapat terhubung" dapat berarti: pulseaudio tidak berjalan atau ada masalah izin. "pactl" mungkin lebih tepat untuk mengendalikan pulseaudio. Coba tentukan output apa yang ingin Anda kendalikan dengan menjalankan: "pactl list sinks". Tinjau output dari perintah itu untuk menentukan nomor wastafel. Kemudian jalankan sesuatu seperti "pactl set-sink-volue 3 + 5%" (di mana "3" adalah wastafel # di mesin saya untuk "Built-in Audio Analog Stereo"). Satu hal yang perlu diperhatikan: angka-angka wastafel dapat berubah di seluruh reboot, jadi ada baiknya untuk meneliti bagaimana mencapai hal yang sama dengan nama-nama wastafel daripada angka-angka wastafel.
joat
Saya telah mencoba pactl juga tetapi mendapatkan kesalahan yang sama. @ Joat
Ghatak Sena
Pulseaudio sedang berjalan? Apakah Anda (atau skrip Anda) menjalankan pactl / amixer sebagai pengguna yang masuk (bukan root)? Hanya itu yang bisa saya pikirkan.
joat
Tentu saja itu bekerja di terminal tetapi masalah utama saya adalah tidak bekerja dengan kode Python. @ Joat
Ghatak Sena
Itu harus menjadi masalah izin. 'import os; os.system ("pactl set-sink-mute 3 1")' berfungsi jika saya menjalankannya di terminal atau dalam skrip. Ketika Anda menjalankan amixer, apakah Anda harus memilih kartu suara sebelum melakukan hal lain?
joat

Jawaban:

0

Akhirnya, saya mendapatkan solusi untuk masalah saya sendiri yang ditunjukkan di bawah ini

    import subprocess
    proc = subprocess.Popen('/usr/bin/amixer sset Master 5%', shell=True, stdout=subprocess.PIPE)
    proc.wait()
Ghatak Sena
sumber