Yang saya inginkan adalah sebagai berikut:
- Ketika saya mencolokkan headphone saya, saya ingin suara tidak dibisukan dan diatur ke tingkat volume tertentu.
- Ketika saya mencabut headphone saya, saya ingin suara dimatikan (atau diatur ke tingkat volume tertentu).
Mengatur level volume bukanlah masalah, tapi entah bagaimana saya perlu melakukan ini ketika melepas headphone, jadi saya mencari cara untuk mendapatkan pemberitahuan tentang peristiwa itu.
Saya dengan cepat menemukan bahwa /proc/asound/card0/codec#0
headphone terpasang atau tidak, jadi saya mencoba memantaunya menggunakan inotifywait
dan mengubah level volume berdasarkan notifikasi yang dimodifikasi . Sayangnya inotifywait
gagal karena proc bukan sistem file biasa.
Apakah ada cara lain untuk melakukan ini (mungkin melalui PulseAudio)?
Perangkat audio: Intel HDA , audio codec: Conexant CX20585 .
Untuk meringkas apa yang telah saya coba sejauh ini:
- Ear Candy: sama sekali tidak berjalan di sistem saya. Tampaknya menjadi proyek yang ditinggalkan?
- Kode yang diposting oleh Karl Bielefeldt mungkin berfungsi pada beberapa perangkat keras, tidak pada saya.
- Gagasan dari StephenPaulger gagal karena kurangnya saluran 'Speaker'.
- Termotivasi oleh aking1012 Saya membuatnya bekerja dengan meretas kode kernel (setelah menemukan kode indera jack dari codec), tapi itu solusi yang agak rumit.
Jadi, saya masih mencari cara mudah untuk melakukan ini.
sound
pulseaudio
headphones
htorque
sumber
sumber
Jawaban:
Untuk mengatur level volume dari konsol gunakan perintah amixer. Sebagai contoh:
Akan mengatur level Anda ke 0%
Saya tidak tahu bagaimana cara mengubahnya ketika Anda mencolokkan headphone Anda ... tapi mungkin seseorang dapat membantu Anda dengan itu
sumber
Selama UDS untuk Oneiric telah ada sesi tentang deteksi jack. Lihat cetak biru untuk detailnya. Kedengarannya seperti ini akan melakukan apa yang saya cari: tingkat volume yang berbeda untuk perangkat yang berbeda - tidak hanya pada setiap perangkat keras:
Pembaruan untuk 11.10
Ini sekarang harusnya berfungsi di Oneiric - sayangnya ThinkPad T510 saya tampaknya menjadi salah satu sistem yang saat ini tidak didukung.
Tindak lanjut lain dari David Henningsson:
Lebih lanjut di sini .
Pembaruan untuk 12,04
Sekarang bekerja dengan ThinkPad T510 saya (dan banyak model lainnya) di Ubuntu 12.04 (versi pengembangan).
sumber
Ear Candy memiliki beberapa fungsi untuk menangani pemasangan / pelepasan headphone.
sumber
Saya tidak tahu berapa banyak pengalaman pengkodean yang Anda miliki, tetapi Anda menyebutkannya
inotifywait
sehingga saya akan menganggap Anda setidaknya nyaman dengan skrip shell. Program C berikut, berdasarkan artikel ini , harus dapat mendeteksi headphone Anda dicolokkan atau dicabut, setelah itu Anda dapat melakukan tindakan apa pun yang Anda inginkan.Program ini mengambil satu argumen, yang seharusnya menjadi jalur ke perangkat acara masukan untuk headphone Anda. Ini
/dev/input/event7
untuk saya, tetapi Anda mungkin harus mencoba beberapa untuk menemukan yang ada di sistem Anda. Anda perlu izin baca di perangkat itu. Program akan mencetak nama perangkat, dan jenis, kode, dan nilai acara pertama sebelum keluar.sumber
event.value
memang diaktifkan ... tetapiread
operasi hanya kembali saat nilainya berubah ... mungkin Anda tahu cara membuatnya tidak memblokir? terima kasih!O_NONBLOCK
ketika Anda membuka perangkat, dan memeriksa nilai balik dariread
. Jika negatif, bacaan akan diblokir, atau beberapa kesalahan lain terjadi. Ada cara lain yang lebih rumit untuk melakukannya tanpa polling jika Anda memasukkan ini ke dalam program yang lebih besar.Periksa dmesg dan file log lainnya. Mungkin memasukkan / mengeluarkan fires beberapa pesan tertentu.
Kemudian, Anda bisa menggunakan daemon untuk mem-parsing file log itu dan mendeteksi peristiwa. Saya pikir Anda tahu apa yang harus dilakukan dari titik ini :)
sumber
Jika kamu melakukan
volume speaker akan dibisukan tetapi headphone akan terus bekerja. Mencabut headphone berarti tidak ada suara. Yang hampir seperti yang Anda inginkan ...
Namun ...
Jika Anda mengubah kontrol volume, pengaturan volume 'Speaker' akan diatur kembali. Ini karena pulseaudio mencoba menjadi pandai dengan mengatur volume (Lihat http://pulseaudio.org/wiki/PulseAudioStoleMyVolumes untuk informasi lebih lanjut). Kita bisa menghentikannya dari mengacaukan volume.
Buka /etc/pulse/default.pa
dan temukan garisnya
dan ubah ke
Mulai ulang pulseaudio.
Sekarang jika Anda membisukan volume speaker yang mengubah volume master tidak akan mempengaruhinya. Jadi headphone akan berfungsi tetapi speaker akan tetap diam.
sumber
Periksa soket ACPID untuk mengetahui perubahan, dapat dilakukan dengan bantuan skrip python atau C atau shell, ( kode Python untuk mengontrol putar plugin earphone dan berhenti di rhythmbox). Periksa perubahan voltase ACPID untuk mendeteksi plugin earphone dan plug earphone. Namun, penundaan beberapa detik dapat terjadi.
sumber
Pulseaudio memiliki modul yang dikirimkan secara default yang dirancang untuk mencapai hal ini:
http://pulseaudio.org/wiki/Modules#module-device-restore
sumber
Saya pikir Anda dapat mencapai apa yang Anda butuhkan menggunakan ini: https://bbs.archlinux.org/viewtopic.php?pid=1105458#p1105458
sumber