লিনাক্সে একক কী অডিও ক্যাপচার (কী রিলিজে সংরক্ষণ করুন)


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_sp خصوصی_keys_to_work# বাইপাসিং_অর্ক্স


এবং ঠিক কি কাজ করে না? যদি আপনি halevtকাজ শুরু করে থাকেন তবে আপনার কিপ্রেসে আপনার রেকর্ডিং শুরু করা উচিত এবং কী রিলিজ ( SIGKILLঅবশ্যই নয়) এর সাথে এটি হত্যা করা উচিত ।
পিটার্ফ

রুট হিসাবে কিছু চালানো (যেমন sudo ব্যবহার করে) সমস্যা হবে? এক্স পরিবেশে সমস্ত ইভেন্ট কীভাবে ক্যাপচার করতে হয় তা আমি জানি না, তবে আমি কীভাবে একটি
ডিভ

উত্তর:


1

ইভেন্টগুলি ফাঁদে ফেলার জন্য, আমি সুপারিশ করি xbindkeys, এটি আপনার ডেস্কটপ পরিবেশ থেকে স্বাধীনভাবে কাজ করে। সেখান থেকে, আপনি একটি শেল স্ক্রিপ্ট ট্রিগার করতে পারেন যা সবকিছু করে। জটিল কিছু হ'ল এই প্রেস / রিলিজ লজিকটি করা। একটি উপায় হ'ল xbindkeysকোনও অ্যাপ্লিকেশন ট্রিগার করা যা তারপরে নিজেই মুক্তির জন্য শোনে তবে xorg ইভেন্টগুলি অবিশ্বাস্য এবং এটি কখনই প্রস্থান করতে পারে না (xlib এর জন্য আপনার কোডিং করার দরকার নেই)।

স্ক্রিপ্টটির জন্য কেবল "সুরক্ষা" সর্বাধিক দৈর্ঘ্যের সেট সহ) রেকর্ডিং শুরু করা এবং ফাইল সিস্টেমের কোথাও প্রসেস আইডি (পিআইডি) লিখতে আরও অনেক ভাল। প্রকাশের ইভেন্টটি কেবল এই পিআইডিটি পড়ে এবং 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"

lameবড় ফাইলগুলি এড়ানোর জন্য আপনি সরাসরি আর্কিড আউটপুট বা অন্যান্য এনকোডিং ডিভাইস চালাতে পারেন । বা রিলিজ বোতাম ইভেন্ট প্রেরণের পরে রূপান্তর করুন। প্রকাশের কোডটি হতে পারে

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

আপনি যদি রিলিজটিতে এনকোড করে রাখেন তবে আপনার অন্য কোনও ফাইলের নাম সম্ভবত অন্য কোনও অস্থায়ী ফাইল থেকে নেওয়া দরকার।


কোডের 7 টি লাইন, যদিও আমি মনে করি এটি এটি শেখার জন্য উপযুক্ত
এক্সসি

0

আমি জানি না যে এক্সফেস বোতামগুলির প্রেস এবং রিলিজে ট্রিগার কমান্ড সমর্থন করে কিনা, তবে আমি মনে করি মনে হয় এফভিডাব্লুএম 2 এটি সমর্থন করে। রেকর্ডিং শুরু করার জন্য একটি স্ক্রিপ্ট এবং এটি বন্ধ করার জন্য অন্য স্ক্রিপ্ট ব্যবহার করে এটি পুরোপুরি সম্ভব হওয়া উচিত। arecordবা parecordপ্রকৃত রেকর্ডিং করতে সক্ষম হওয়া উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.