চুপচাপ শনাক্ত হওয়ার পরে শেষের রেকর্ডিং শেষ করুন


16

আমি এমন একটি স্ক্রিপ্ট লিখছি যা আমার কথা রেকর্ড করতে sox ব্যবহার করে। এখন রেকর্ডিং শুরু হওয়ার আগে শব্দটি সনাক্ত না করা পর্যন্ত আমার অপেক্ষা করা দরকার, এবং আমার তা বের হয়েছে। তবে একবার অন্তত 3 সেকেন্ডের জন্য চুপচাপ হয়ে যাওয়ার পরে আমার প্রস্থান করতে সোੈਕਸও দরকার । এখন যেমন আছে, আমি কথা শেষ করার পরে আমাকে ম্যানুয়ালি মেরে ফেলতে হবে, অন্যথায় সোপস কেবল আরও অপেক্ষা না করে অপেক্ষা করে আউটপুট ফাইলে সংযুক্ত করে (এটি আমি চাই না)। আমি এখন ব্যবহার করছি রেকর্ডিংয়ের জন্য আদেশটি এখানে:

rec /tmp/recording.flac rate 32k silence 1 0.1 3% -1 3.0 3%

আবার, কেবল স্পষ্ট করে বলতে গেলে, আমি কথা বলা শুরু না করা পর্যন্ত সক্সের অপেক্ষা করা উচিত এবং তারপরে আমি কথা বলা বন্ধ না করা পর্যন্ত রেকর্ড করব, তারপরে সক্স প্রোগ্রামটি ছেড়ে দেওয়া উচিত।

উত্তর:


13

আপনার আসল কমান্ড থেকে নেতিবাচক চিহ্নটি সরান:

rec /tmp/recording.flac rate 32k silence 1 0.1 3% 1 3.0 3%

"নীচে গণনা" নেতিবাচক হলে, নীরব কমান্ডটি ফাইলের মাঝামাঝি থেকে সমস্ত নীরবতা ছাঁটাবে। এটি ইতিবাচক হলে, এটি ফাইলের শেষ থেকে নীরবতা ছাঁটাই করে।


1
এটি যেটির সাথে আমি এল, তার চেয়ে অনেক বেশি সহজ সমাধান!
ইসহাক

3

আমি উপরের ধারণাগুলি আরও কিছু টুইট করলাম। এটি চিরকালের জন্য রেকর্ড করে, (প্রায়) এক সেকেন্ড নীরবতা না আসা পর্যন্ত সমস্ত শব্দ রেকর্ড করে। তারপর:

  • দুটি উপ-ডিরেক্টরি তৈরি হয়েছে তা নিশ্চিত করে En
  • রেকর্ডিংয়ের দুটি বর্ণালী গণনা করে - একটি স্বাভাবিক হওয়ার আগে এবং তার পরে একটি এবং ডেটস্ট্যাম্পড ফোল্ডারগুলিতে লেখেন।
  • একটি ফাইলে ডেটস্ট্যাম্পড ফোল্ডারে নর্মালাইজড একটিকে লিখে।
  • দুটি চিপ .ogg ফাইল (ভয়েস পরিচালিত সিবি রেডিওর মাধ্যমে ফিরে) সহ সাধারণীকরণ করা ফাইলটি পিছনে খেলুন

(খুব সামান্য সামান্য UHF / 2 মিটার ইকো রিপিটারের জন্য তৈরি করে)

#! / বিন / ব্যাশ
সত্য যদিও; করা
  পুনরায় বাফার.ওগ নীরবতা 1 0.1 5% 1 1.0 5%
  তারিখ = `তারিখ +% Y% m% d% H% M% S``
  DPATH = `তারিখ +% Y /% m /% d /` `
  mkdir -p ./spectro/$DPATH
  mkdir -p ./voice/$DPATH
  প্রতিধ্বনি ফাইলের নামটি ইকো করুন $ তারিখ
  sox বাফার.ওজি -এন স্পেকট্রামগ্রাম -x 300 -y 200 -z 100 -t $ DATE.ogg -o ./spectro/$DPATH/$DATE.png
  sox buffer.ogg normbuffer.ogg লাভ -n -2
  sox normbuffer.ogg -n বর্ণালী
  এমভি Normbuffer.ogg ./voice/$DPATH/$DATE.ogg
  pre.ogg ./voice/$DPATH/$DATE.ogg post.ogg খেলুন 
সম্পন্ন

2

আমি এক ধরণের নড়বড়ে উপায় পেয়েছি যে এই ধরণের সমস্যাটি সমাধান করে।

আমি লক্ষ্য করেছি যে যখন নীরবতা শনাক্ত করা যায়, তখন আরও শব্দ না শোনার আগে পর্যন্ত স্বাভাবিকভাবেই ফাইলটিতে আরও কিছু যুক্ত করা যায় না। তাই আমি স্থির করেছিলাম যে আমি চেষ্টা করতে পারি এবং এই সত্যটির সুবিধা নিতে পারি।

প্রথমত, আমি পটভূমিতে sox এর শব্দ রেকর্ডার শুরু করি:

rec /tmp/recording.flac rate 32k silence 1 0.1 3% -1 3.0 3% &

এরপরে আমি রেকর্ডিং প্রক্রিয়ার পিআইডি পেয়ে যাব: p=$!

তারপরে আমি রেকর্ডিংয়ের প্রক্রিয়াটি শুরু করে শেষ করতে দ্বিতীয়টি দিয়েছি এবং তারপরে ফাইলটি বড় হওয়া শুরু হওয়া পর্যন্ত অপেক্ষা করুন।

ঘুম 1
["$ var1"! = "$ var2"] অবধি; করা
    var1 = `du" /tmp/rec રેકોર્ડ.flac "` `
    ঘুম 1
    var2 = `du" /tmp/rec રેકોર્ડ.flac "` `
সম্পন্ন

এই লুপটি বিরতির পরে, এর অর্থ হ'ল শব্দটি সনাক্ত করা হয়েছে। সুতরাং এখন আমি ফাইলটিতে ডেটা যুক্ত হওয়া বন্ধ না হওয়া পর্যন্ত অপেক্ষা করার জন্য আরেকটি লুপ তৈরি করি (এটি একবার সোেক্স আবার নীরবতা সনাক্ত করে।

প্রতিধ্বনিত "শব্দ সনাক্ত করা"
["$ var1" == "$ var2"] অবধি; করা
    var1 = `du" /tmp/rec રેકોર્ડ.flac "` `
    ঘুম 0.5
    var2 = `du" /tmp/rec રેકોર્ડ.flac "` `
সম্পন্ন

এখন আমার কেবল প্রস্থান করা দরকার rec:

প্রতিধ্বনি "নিরবতা সনাক্ত করা"
হত্যা $ পি

এবং এটাই. এখানে সম্পূর্ণ স্ক্রিপ্ট:

rec /tmp/rec રેકોર્ડ.flac হার 32 কে নীরবতা 1 0.1 3% -1 3.0 3% &
পি = $!
ঘুম 1
["$ var1"! = "$ var2"] অবধি; করা
    var1 = `du" /tmp/rec રેકોર્ડ.flac "` `
    ঘুম 1
    var2 = `du" /tmp/rec રેકોર્ડ.flac "` `
সম্পন্ন
প্রতিধ্বনিত "শব্দ সনাক্ত করা"
["$ var1" == "$ var2"] অবধি; করা
    var1 = `du" /tmp/rec રેકોર્ડ.flac "` `
    ঘুম 0.5
    var2 = `du" /tmp/rec રેકોર્ડ.flac "` `
সম্পন্ন
প্রতিধ্বনি "নীরবতা সনাক্ত"
হত্যা $ পি

এখন আমি এটি করার জন্য আরও ভাল, আরও স্থিতিশীল উপায়ে পছন্দ করব তবে এটি আপাতত কাজ করতে হবে।


1

এটি চিরকাল শোনা যায়, কেবলমাত্র শেষ শব্দগুলি রেকর্ড করে যতক্ষণ না এটি এক সেকেন্ড নীরবতা শোনায়, তারপরে ফাইলটি লিখে, টাইমস্ট্যাম্প করে এবং পুনরায় আরম্ভ করে:

#!/bin/bash
/usr/bin/sox -t alsa default /home/default/working/recording.wav silence 1 0.1 5% 1 1.0 5%
DATE=$(date +%Y%m%d%H%M%S)
mv /home/default/working/recording.wav /home/default/waiting/$DATE.recording.wav
/home/default/startrecord.sh

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