Ich möchte ein Programm ausführen, das Audio nur aufzeichnet, wenn die rechte Steuertaste gedrückt gehalten wird. Bei der Tastaturfreigabe würde das Ergebnis auf die Festplatte schreiben, z yy-mm-dd hh:mm.ogg
. Wie könnte ich das machen?
$ xmodmap -pke |grep -e Record
keycode 175 = XF86AudioRecord NoSymbol XF86AudioRecord
Right Control wird von xev wie folgt für Ereignisse zum Herunterfahren und Hochfahren erfasst:
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, mein aktueller Desktop ist Xfce
. Ein Hinweis, dem ich folge: http://www.thinkwiki.org/wiki/How_to_get_special_keys_to_work#bypassing_Xorg
halevt
Arbeit zu machen, müssen Sie Ihre Aufnahme nur per Tastendruck starten und bei Tastenfreigabe beenden (SIGKILL
natürlich nicht mit ).Antworten:
Ich empfehle
xbindkeys
, die Ereignisse unabhängig von Ihrer Desktop-Umgebung abzufangen . Von dort aus können Sie ein Shell-Skript auslösen, das alles erledigt. Das Knifflige dabei ist, diese Press / Release-Logik auszuführen. Eine Möglichkeit bestehtxbindkeys
darin, eine Anwendung auszulösen, die dann selbst auf die Veröffentlichung wartet, aber xorg-Ereignisse sind unzuverlässig und werden möglicherweise nie beendet (ganz zu schweigen davon, dass Sie für xlib codieren müssen).Es ist viel besser, wenn das Skript einfach mit der Aufnahme beginnt (mit der festgelegten maximalen Sicherheitslänge) und die Prozess-ID (PID) irgendwo im Dateisystem schreibt. Das Release-Ereignis liest nur diese PID und
kill
stoppt die Aufzeichnung. Dies ist sicher, daarecord
die Aufzeichnung bei einem Kill-Signal vernünftig gestoppt werden soll.Eine grobe Skizze:
Sie können die Arecord-Ausgabe direkt auf
lame
oder anderen Codierungsgeräten ausführen , um große Dateien zu vermeiden. Oder konvertieren Sie, nachdem das Ereignis der Freigabetaste gesendet wurde. Der Release-Code könnte seinWenn Sie bei der Veröffentlichung codieren, müssen Sie den Dateinamen irgendwo abrufen, möglicherweise aus einer anderen temporären Datei.
quelle
Ich weiß nicht, ob Xfce das Auslösen von Befehlen beim Drücken und Loslassen von Tasten unterstützt, aber ich erinnere mich, dass FVWM2 dies unterstützt. Wenn Sie ein Skript zum Starten der Aufzeichnung und ein anderes Skript zum Stoppen der Aufzeichnung verwenden, sollte dies vollständig möglich sein.
arecord
oderparecord
sollte in der Lage sein, die eigentliche Aufnahme zu machen.quelle