linux 如何在bash中创建脚本来检测麦克风是否静音?

ncecgwcz  于 2023-05-06  发布在  Linux
关注(0)|答案(1)|浏览(153)

我创建了这个不工作脚本,

#!/bin/bash

echo "Mic Check"
timeout 2 pacat -r ./testmic -d 2

FILENAME=./testmic
FILESIZE=$(stat -c%s "$FILENAME")

killall pacat

if (( $FILESIZE <= 100 )); then
    echo "Mic Muted..."
else
    echo "Mic not Muted..."
fi

我的耳机有一个静音按钮,但没有led来指示这一点=[我试图使用一个脚本来提醒我,当麦克风是开放的
我不知道这是不是最好的办法,但是...这个脚本创建了一个“testMic”文件,当我按下静音按钮时,文件被创建,里面什么都没有:

但当我不按静音,该文件是用音频代码创建:

我不太明白发生了什么,但$FILESIZE总是返回相同的值。有什么办法能让这更有效吗
tks guys
Edit 1:这段代码中的问题是,如果testMic文件是空的,或者里面有音频代码,$FILESIZE的值总是相同的。
Edit 2:我不想通过在系统中静音麦克风来解决问题,我想使用耳机本身的静音系统
Edit 3:我用这段代码解决了这个问题:

#!/bin/bash

echo "Mic Check"
timeout 2 pacat -r ./testmic -d 2

FILECONTENT=$(grep -L -z -e . testmic)

killall pacat

if [[ "$FILECONTENT" == "testmic" ]]; then
    echo "Mic Muted."
else
    echo "Mic not Muted."
fi
qf9go6mv

qf9go6mv1#

该文件可能只有在您杀死pacat之后才会写入磁盘。
如果这是一个正确的诊断,最小的修复是将stat移动到killall之后;但总的来说,更好的解决方案是只杀死正确的进程和avoid upper case for your private variables

#!/bin/bash

# Write diagnostics to standard error; include script name in message
echo "$0: Mic Check" >&2

pacat -r ./testmic -d 2 &
pacatid=$!

sleep 2
kill $pacatid

if grep -qz . testmic; then
    echo "$0: Mic not Muted." >&2
else
    echo "$0: Mic Muted." >&2
fi

您的脚本可能应该设置一个退出代码来反映结果,但我不清楚哪种情况应该算作成功。通常,exit 0表示成功,其他任何数字表示失败,但如果您没有任何其他信息要以机器可读的形式提供,则通常使用1。(此外,在这种情况下,可能会提供一个选项来抑制诊断输出。)
一个合适的工具也会避免在当前目录中丢弃随机文件;也许看看mktemp并设置一个trap来清理临时文件,以防出现错误。

相关问题