Saya ingin menjalankan program yang merekam audio hanya ketika tombol Kontrol Kanan ditekan. Pada rilis keyboard hasilnya akan menulis ke disk, misalnya yy-mm-dd hh:mm.ogg
. Bagaimana saya bisa melakukan itu?
$ xmodmap -pke |grep -e Record
keycode 175 = XF86AudioRecord NoSymbol XF86AudioRecord
Kontrol Kanan ditangkap sebagai berikut oleh xev untuk peristiwa key down dan key up:
KeyPress event, serial 43, synthetic NO, window 0x1800001,
root 0x7f, subw 0x0, time 27689430, (-145,169), root:(476,366),
state 0x10, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 46, synthetic NO, window 0x1800001,
root 0x7f, subw 0x0, time 27689540, (-145,169), root:(476,366),
state 0x14, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
ClientMessage event, serial 46, synthetic YES, window 0x1800001,
message_type 0x112 (WM_PROTOCOLS), format 32, message 0x110 (WM_DELETE_WINDOW)
FWIW, desktop saya saat ini adalah Xfce
. Satu petunjuk yang saya ikuti: http://www.thinkwiki.org/wiki/How_to_get_special_keys_to_work#bypassing_Xorg
halevt
bekerja, Anda hanya perlu memulai rekaman Anda pada penekanan tombol dan membunuhnya pada rilis kunci (tidak denganSIGKILL
, tentu saja).Jawaban:
Untuk menjebak acara, saya sarankan
xbindkeys
, ia bekerja secara independen dari lingkungan desktop Anda. Dari sana, Anda dapat memicu skrip shell yang melakukan segalanya. Agak sulit adalah melakukan logika pers / rilis ini. Salah satu cara adalah untukxbindkeys
memicu aplikasi yang kemudian dengan sendirinya mendengarkan rilis, tetapi acara xorg tidak dapat diandalkan dan mungkin tidak pernah keluar (belum lagi Anda perlu kode untuk xlib).Jauh lebih baik bagi skrip untuk mulai merekam (dengan set panjang maksimum "aman") dan menulis id proses (PID) di suatu tempat di sistem file. Acara rilis baru saja membaca PID ini dan digunakan
kill
untuk menghentikan rekaman. Ini aman karenaarecord
dirancang untuk berhenti merekam dengan saksama saat mematikan sinyal.Sketsa kasar:
Anda dapat menjalankan output arecord langsung ke
lame
atau perangkat penyandian lain untuk menghindari file besar. Atau konversi setelah acara tombol rilis dikirim. Kode rilis bisa jadiJika Anda akan menyandikan saat rilis, Anda perlu mendapatkan nama file di suatu tempat, mungkin dari file sementara lainnya.
sumber
Saya tidak tahu apakah Xfce mendukung perintah pemicu saat pers dan pelepasan tombol, tetapi sepertinya saya ingat bahwa FVWM2 mendukung ini. Menggunakan satu skrip untuk memulai rekaman dan skrip lain untuk menghentikannya, ini harus sepenuhnya dimungkinkan.
arecord
atauparecord
harus dapat melakukan rekaman yang sebenarnya.sumber