การบันทึกเสียงปุ่มเดียวใน Linux (บันทึกในการเปิดตัวกุญแจ)


9

ฉันต้องการเรียกใช้โปรแกรมที่บันทึกเสียงเมื่อกดปุ่มควบคุมขวาค้างไว้เท่านั้น yy-mm-dd hh:mm.oggปล่อยให้เป็นอิสระแป้นพิมพ์ผลที่จะเขียนไปยังดิสก์เป็นเช่น ฉันจะทำอย่างไร

$ xmodmap -pke |grep -e Record
keycode 175 = XF86AudioRecord NoSymbol XF86AudioRecord

การควบคุมด้านขวาถูกจับโดย xev สำหรับการคีย์และการคีย์เหตุการณ์:

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 Xfceสก์ท็อปในปัจจุบันของฉันคือ โอกาสในการขายหนึ่งรายการที่ฉันติดตาม: http://www.thinkwiki.org/wiki/How_to_get_special_keys_to_work#bypassing_Xorg


และอะไรที่ไม่ได้ผล? หากคุณจัดการเพื่อให้halevtทำงานได้คุณควรจะต้องเริ่มการบันทึกของคุณบนปุ่มกดและฆ่ามันในการปล่อยปุ่ม (ไม่ใช่SIGKILLแน่นอน)
เตอร์

การรันบางสิ่งในฐานะรูท (เช่นใช้ sudo) เป็นปัญหาหรือไม่ ผมไม่ทราบว่าวิธีการจับภาพเหตุการณ์ทั้งหมดในสภาพแวดล้อม X แต่ฉันจะรู้วิธีการจับภาพเหตุการณ์ที่เกิดขึ้นจากอุปกรณ์ / dev / input / เหตุการณ์ (ซึ่งคุณจะต้องใช้สิทธิ์ root)
BRM

คำตอบ:


1

สำหรับการดักเหตุการณ์ฉันแนะนำxbindkeysอีกครั้งมันทำงานได้อย่างอิสระจากสภาพแวดล้อมเดสก์ทอปของคุณ จากตรงนั้นคุณสามารถเรียกเชลล์สคริปต์ที่ทำทุกอย่าง บิตที่ยุ่งยากคือการทำตรรกะกด / ปล่อยนี้ วิธีหนึ่งคือxbindkeysการทริกเกอร์แอปพลิเคชันที่รับฟังการเปิดตัว แต่เหตุการณ์ xorg นั้นไม่น่าเชื่อถือและอาจไม่เคยออก (ไม่ต้องพูดถึงคุณต้องใช้รหัสสำหรับ xlib)

จะดีกว่ามากสำหรับสคริปต์ที่จะเริ่มบันทึก (ด้วยชุดความยาวสูงสุด "ความปลอดภัย") และเขียนรหัส procees (PID) ที่ใดที่หนึ่งในระบบไฟล์ เหตุการณ์ที่เกิดขึ้นเพียงแค่อ่าน PID นี้และใช้killเพื่อหยุดการบันทึก สิ่งนี้มีความปลอดภัยเพราะarecordถูกออกแบบมาเพื่อหยุดการบันทึกอย่างสมเหตุสมผลบนสัญญาณฆ่า

ร่างหยาบ:

  if [ ! -f "~/.recordpid" ]; then
    echo "already running" >&2
    exit 1
  fi
  file="$(date '+recording-%m-%d-%H:%M:%S.wav')"
  nohup arecord -f cd --duration=3600 "~/clips/$file" &> /dev/null &
  echo "$!" > "~/.recordpid"

คุณสามารถเรียกใช้ arecord output โดยตรงlameหรืออุปกรณ์เข้ารหัสอื่น ๆ เพื่อหลีกเลี่ยงไฟล์ขนาดใหญ่ หรือแปลงหลังจากเหตุการณ์ปุ่มปล่อยถูกส่ง รหัสการเปิดตัวอาจเป็น

  if [ ! -f "~/.recordpid" ]; then
    pid="$(cat "~/.recordpid")"
    kill -l SIGTERM -- "$pid" &>/dev/null
    rm -f "~/.recordpid"
  fi

หากคุณจะเข้ารหัสในการเปิดตัวคุณจะต้องได้รับชื่อไฟล์บางแห่งอาจจะมาจากไฟล์ชั่วคราวอื่น


รหัส 7 บรรทัดถึงแม้ว่าฉันคิดว่ามันควรค่าแก่การเรียนรู้
Xsi

0

ฉันไม่รู้ว่า Xfce รองรับคำสั่งที่กระตุ้นการกดและปล่อยปุ่มหรือไม่ แต่ฉันจำได้ว่า FVWM2 สนับสนุนสิ่งนี้ การใช้สคริปต์หนึ่งสคริปต์เพื่อเริ่มการบันทึกและสคริปต์อื่นสำหรับหยุดมันจะเป็นไปได้อย่างสมบูรณ์ arecordหรือparecordควรจะสามารถทำการบันทึกจริงได้

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