লিনাক্সের একটি কমান্ড লাইন সরঞ্জাম দিয়ে মাইক্রোফোন স্তর পর্যবেক্ষণ করা হচ্ছে


17

আমি এমন একটি সরঞ্জাম খুঁজছি যা আমাকে বলবে, অর্ধ সেকেন্ডেরও কম সময়ে, যদি মাইক্রোফোন একটি নির্দিষ্ট প্রান্তিকের উপরে কোনও শব্দ তুলছে। (আমি তখন অ্যামিক্সারের মতো আরেকটি কমান্ড লাইন সরঞ্জাম দিয়ে মাস্টার চ্যানেলকে নিঃশব্দ করার পরিকল্পনা করছি))

উত্তর:


8

এই সমাধানটি বার বার ডিস্কে লেখা এড়াতে পারবে, এবং যদিও এটি সবচেয়ে খারাপ ক্ষেত্রে কাঙ্ক্ষিত অর্ধেক সেকেন্ডের চেয়ে এক সেকেন্ড সময় নেয়, আমি এটি চেষ্টা করার পরেও যথেষ্ট দ্রুত পেয়েছি। সুতরাং, আমি যে দুটি স্ক্রিপ্ট ব্যবহার করি তা এখানে:

./detect:

while true; do
    arecord -d 1 /dev/shm/tmp_rec.wav ; sox -t .wav /dev/shm/tmp_rec.wav -n stat 2>\
    &1 | grep "Maximum amplitude" | cut -d ':' -f 2 | ./check.py
    if [ $? -eq 0 ] ; then
         amixer set Master 0
    else
         amixer set Master 80
    fi
done

./check.py:

#!/usr/bin/env python
import sys

number = 0.0
thing="NO"

line = sys.stdin.readline()
thing = line.strip()
number = float(thing)

if number < 0.15:
    raise Exception,"Below threshold"

হার্ড মার্জিত, কিন্তু এটি কার্যকর।

দ্রষ্টব্য: আপনি যদি আরও ধীরে ধীরে জিনিস চান তবে এর মতো কিছু যুক্ত করুন:

   for i in `seq 0 80 | tac`; do
      amixer set Master $i
   done

নিঃশব্দ করার জন্য এবং

   for i in `seq 0 80`; do
      amixer set Master $i
   done

আনমুট করার জন্য।


7
একটি সামান্য আরও মার্জিত সমাধান, যা অর্ধ-দ্বিতীয় রেজোলিউশন সমর্থন করে এবং একটি অস্থায়ী ফাইলের প্রয়োজন হয় না: while true; do amixer set Master $(rec -n stat trim 0 .5 2>&1 | awk '/^Maximum amplitude/ { print $3 < .15 ? 80 : 0 }'); done
nandhp

1
পাইথনটি কিছুটা ওভারকিল, math-blog.com/2012/07/23/… ফলাফল = $ (AUDIODEV = hw: 1 rec -n স্ট্যাট ট্রিম 0 .5 2> & 1 | গ্রেপ "সর্বাধিক প্রশস্ততা" | গ্রেপ -o " [0-9] \ [0-9] * $ ")। প্রতিধ্বনি "$ ফলাফল> 0.01" | বিসি
কেভিনফ

1
কেবল মনে রাখবেন যে 'সর্বাধিক প্রশস্ততা' উচ্চতর শব্দের একমাত্র সূচক নয়। উচ্চ ফ্রিকোয়েন্সি (যেমন চশমা আঁকানো) সহ একটি শব্দ মানুষের কানের দ্বারা সত্যই উচ্চরূপ হিসাবে উপলব্ধি করা যেতে পারে তবে স্যাক্স '' সর্বোচ্চ প্রশস্ততা 'সর্বনিম্নের চেয়ে খুব আলাদা হবে না। সুতরাং কিছু ক্ষেত্রে এটি 'রাফ ফ্রিকোয়েন্সি' বিশ্লেষণ করাও বুদ্ধিমান হতে পারে।
ka3ak

2

পাইথন স্ক্রিপ্ট এবং TALKING_PERIOD ছাড়াই কেবল সংস্করণ, এটি DOWN_SOUND_PERC স্তরে কত সেকেন্ডে শব্দ হবে তা সেট আপ করে, তারপরে UP_SOUND_PERC স্তরে যায়।

#!/bin/bash

TALKING_PERIOD=16
UP_SOUND_PERC=65
DOWN_SOUND_PERC=45
counter=0
while true; do

echo "counter: " $counter

if [ "$counter" -eq 0 ]; then
    nmb=$(arecord -d 1 /dev/shm/tmp_rec.wav ; sox -t .wav /dev/shm/tmp_rec.wav -n stat 2>&1 | grep "Maximum amplitude" | cut -d ':' -f 2)

    echo "nmb: " $nmb

    if (( $(echo "$nmb > 0.3" |bc -l) )); then
        echo "ticho"
        amixer -D pulse sset Master 45%
        counter=$TALKING_PERIOD
    else
        echo "hlasno"
        amixer -D pulse sset Master 65%
    fi
fi

if [[ $counter -gt 0 ]]; then
        ((counter--))
fi

sleep 1

সম্পন্ন


0

পাভুমিটার নামে একটি সরঞ্জাম রয়েছে যা আপনাকে মাইক্রোফোন স্তর দেখতে দেয়, পাভামিটারের ক্যাপচার ইন্টারফেসটি খুলুন,

তারপরে পাভুকন্ট্রোল ব্যবহার করে ক্যাপচার শব্দের স্তরটি সামঞ্জস্য করুন, পাভুকন্ট্রলে ইনপুট ডিভাইসে যান এবং মাইক্রোফোনের সংবেদনশীলতা সামঞ্জস্য করুন।

সম্পাদনা: R4v0 দ্বারা বাশ স্ক্রিপ্টে, কোডের অভ্যন্তরে সম্পন্ন হয়।

সম্পাদনা 2: আমি যখনই শব্দ করলাম তখনই আমি ভলিউম বাড়াতে চেয়েছিলাম, তাই আমি কেবল কথার চেয়ে কম হওয়ার চেয়ে বেশি সম্পাদনা করেছি

    if (( $(echo "$nmb < 0.3" |bc -l) )); then

5
"কমান্ড লাইন সরঞ্জাম"
ডেল্টারে

0

আশেপাশের শব্দ স্তর অনুযায়ী ভলিউম বাড়ানোর জন্য আমি বাশ স্ক্রিপ্টটি পরিবর্তন করেছি।

আপনি ন্যূনতম_ভলিউম পরিবর্তন করতে পারেন, সর্বোচ্চ_ভোলিউম [মান শতাংশে] আছে]

To_Do: বর্ধিতকরণ এখনও পরীক্ষা করা হয়নি। sox এবং বিসি ইনস্টল করা প্রয়োজন।

#!/bin/bash

minimum_volume=20
maximum_volume=60
increment=10

counter=0
while true; do

# echo "counter: " $counter


nmb=$(arecord -d 1 /dev/shm/tmp_rec.wav ; sox -t .wav /dev/shm/tmp_rec.wav -n stat 2>&1 | grep "Maximum amplitude" | cut -d ':' -f 2)
echo "nmb: " $nmb

    if (( $(echo "$nmb <= 0.1" |bc -l) )); then
    amixer -D pulse sset Master $minimum_volume%
    else 
        if (( $(echo "$nmb <= 0.2" |bc -l) )); then
        amixer -D pulse sset Master $(($minimum_volume+ $increment))%
        else
            if (( $(echo "$nmb <= 0.3" |bc -l) )); then
            amixer -D pulse sset Master $(($minimum_volume+ $increment+ $increment))%
                else
                    if (( $(echo "$nmb <= 0.4" |bc -l) & maximum_volume>=40)); then
                    amixer -D pulse sset Master $(($minimum_volume+ $increment+ $increment+ $increment))%
                    else
                        if (( $(echo "$nmb <= 0.5" |bc -l) & maximum_volume>=50)); then
                        amixer -D pulse sset Master $(($minimum_volume+ $increment+ $increment+ $increment+ $increment))%
                        else
                            if (( $(echo "$nmb <= 0.6" |bc -l) & maximum_volume>=60)); then
                            amixer -D pulse sset Master $(($minimum_volume+ $increment+ $increment+ $increment+ $increment+ $increment))%  
                            else
                                if (( $(echo "$nmb <= 0.7" |bc -l) & maximum_volume>=70)); then
                                amixer -D pulse sset Master $(($minimum_volume+ $increment+ $increment+ $increment+ $increment+ $increment+ $increment))%
                                else
                                    if (( $(echo "$nmb <= 0.8" |bc -l) & maximum_volume>=80)); then
                                    amixer -D pulse sset Master $(($minimum_volume+ $increment+ $increment+ $increment+ $increment+ $increment+ $increment+ $increment))%
                                    else
                                        if (( $(echo "$nmb <= 0.9" |bc -l) & maximum_volume>=90)); then
                                        amixer -D pulse sset Master $(($minimum_volume+ $increment+ $increment+ $increment+ $increment+ $increment+ $increment+ $increment+ $increment))%
                                        else
                                            amixer -D pulse sset Master $(($maximum_volume+ $minimum_volume))%
                                        fi
                                    fi
                                fi
                            fi
                        fi
                    fi
                fi
            fi
        fi

sleep 1
done

এবং আপনার কোড সম্পাদককে ইউনিক্সে এন্ড-অফ-লাইন সেট করুন।
হাইথাম-মেড হাইথাম

আমি কি এটি ব্যবহার করতে পারি 1. একটি শব্দ স্তর শুনতে, ২. একটি অডিও ফাইল প্লেতে 'বিবর্ণ', ৩. মিনিটের পরে সময়সীমা, ৪. বিবর্ণ 'এবং অডিও বন্ধ করুন, ৫. যদি শব্দ স্তর আবার মিলিত হয় তবে পূর্ববর্তী পয়েন্টে অডিও ফাইলটি কি বলেছে? ফেইড ইন ফাংশন কার্যকারিতা আমার পক্ষে পুনরায় শুরু অংশ হিসাবে গুরুত্বপূর্ণ নয়। এটি কার্যকর করা সহজ হবে? আমি যদি সম্ভব হয় তবে কীভাবে ব্যাশ এবং স্ট্যান্ডার্ড ইউটিলিটিগুলি ব্যবহার করে একটি স্বয়ংক্রিয় সাদা শয়েজ জেনারেটর তৈরি করব তা নির্ধারণ করার চেষ্টা করছি। আমি প্রায় আমার নিজের পোস্ট তৈরি করেছি তবে আমি যে সমাধানটি সন্ধান করছি তার পক্ষে এটি আংশিক উপায় বলে মনে হচ্ছে।
বেসিকঅবজেক্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.