Ghi âm thanh một phím trong Linux (lưu vào phát hành khóa)


9

Tôi muốn chạy một chương trình chỉ ghi lại âm thanh khi phím Điều khiển bên phải được giữ. Khi phát hành bàn phím, kết quả sẽ ghi vào đĩa như, vd yy-mm-dd hh:mm.ogg. Làm thế nào tôi có thể làm điều đó?

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

Kiểm soát phải được chụp như sau bởi xev cho các sự kiện khóa và khóa:

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, máy tính để bàn hiện tại của tôi là Xfce. Một khách hàng tiềm năng tôi đang theo dõi: http://www.thinkwiki.org/wiki/How_to_get_special_keys_to_work#bypassing_Xorg


Và chính xác những gì không hoạt động? Nếu bạn quản lý để halevtlàm việc, bạn chỉ cần bắt đầu ghi âm khi nhấn phím và tắt nó khi phát hành khóa ( SIGKILLtất nhiên không phải với ).
peterph

Chạy một cái gì đó như root (ví dụ như sử dụng sudo) sẽ là một vấn đề? Tôi không biết cách chụp tất cả các sự kiện trong môi trường X, nhưng tôi biết cách nắm bắt các sự kiện từ một thiết bị / dev / input / event (mà bạn sẽ cần quyền root)
brm

Câu trả lời:


1

Để bẫy các sự kiện, tôi giới thiệu xbindkeys, nó hoạt động độc lập với môi trường máy tính để bàn của bạn. Từ đó, bạn có thể kích hoạt một tập lệnh shell thực hiện mọi thứ. Các mẹo nhỏ là để làm điều này nhấn / phát hành logic. Một cách là xbindkeysđể kích hoạt một ứng dụng mà sau đó nó tự nghe để phát hành, nhưng các sự kiện xorg không đáng tin cậy và nó có thể không bao giờ thoát ra (chưa kể bạn cần mã hóa cho xlib).

Tập lệnh sẽ tốt hơn nhiều khi chỉ bắt đầu ghi (với độ dài tối đa "an toàn" được đặt) và viết id procees (PID) ở đâu đó trong hệ thống tệp. Sự kiện phát hành chỉ đọc PID này và sử dụng killđể dừng ghi âm. Điều này là an toàn vì arecordđược thiết kế để dừng ghi hợp lý trên tín hiệu kill.

Một bản phác thảo thô:

  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"

Bạn có thể chạy đầu ra arecord trực tiếp đến lamehoặc các thiết bị mã hóa khác để tránh các tệp lớn. Hoặc chuyển đổi sau khi sự kiện nút phát hành được gửi. Mã phát hành có thể là

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

Nếu bạn sẽ mã hóa khi phát hành, bạn cần lấy tên tệp ở đâu đó, có thể từ một tệp tạm thời khác.


7 dòng mã, mặc dù tôi nghĩ Thật đáng để học nó
Xsi

0

Tôi không biết nếu Xfce hỗ trợ các lệnh kích hoạt khi nhấn và nhả các nút, nhưng tôi dường như nhớ lại rằng FVWM2 hỗ trợ điều này. Sử dụng một tập lệnh để bắt đầu ghi và tập lệnh khác để dừng tập lệnh, điều này hoàn toàn có thể. arecordhoặc parecordcó thể thực hiện ghi âm thực tế.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.