GNU/Linux >> Linux の 問題 >  >> Linux

Linux のコマンド ライン ツールを使用してマイク レベルを監視する

この解決策により、ディスクへの繰り返し書き込みが回避されます。最悪の場合、必要な 0.5 秒未満ではなく 1 秒かかりますが、試してみると十分に高速であることがわかりました。そこで、私が使用する 2 つのスクリプトを次に示します。

./検出:

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


Python スクリプトと 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

完了


Linux
  1. Linuxcronコマンドを使用したタスクのスケジューリング

  2. Linuxコマンドラインに関する8つのヒント

  3. GNUParallelを使用してLinuxコマンドラインでより多くのことを行う

  1. Linuxatコマンドでタスクをスケジュールする

  2. nmcliを使用してLinuxコマンドラインからネットワーク接続を管理する

  3. Linuxコマンドラインでのパイプの操作

  1. xclipを使用してLinuxコマンドラインでコピーして貼り付けます

  2. Linuxコマンドラインで牛を飼う

  3. Linuxコマンドラインにアクセスしてください