Мониторинг уровня микрофона с помощью инструмента командной строки в Linux

Я ищу инструмент, который скажет мне, менее чем за полсекунды, если микрофон поднимает какой-либо звук выше определенного порога. (Я планирую затем отключить главный канал с помощью другого инструмента командной строки, такого как amixer.)

19
задан Franck Dernoncourt
11.01.2023 5:03 Количество просмотров материала 2855
Распечатать страницу

3 ответа

это решение позволит избежать повторной записи на диск, и хотя в худшем случае это займет секунду вместо желаемого менее половины секунды, я обнаружил, что это достаточно быстро после попытки. Итак, вот два скрипта, которые я использую:

./ 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

для микрофона.

8
отвечен Christian Neverdal 2023-01-12 12:51

существует инструмент под названием pavumeter, который позволяет увидеть уровень микрофона, Откройте интерфейс захвата pavumeter,

затем отрегулируйте уровень записи звука с помощью pavucontrol, В pavucontrol, перейдите к устройствам ввода, и отрегулировать чувствительность микрофона.

2
отвечен haytham-med haytham 2023-01-12 15:08

просто версия без скрипта 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

сделал

0
отвечен R4v0 2023-01-12 17:25

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх