mirror of
https://github.com/zhenyan121/dotfiles.git
synced 2026-04-10 14:34:09 +08:00
feat: 上传我的配置
This commit is contained in:
65
.config/waybar/scripts/cava.sh
Executable file
65
.config/waybar/scripts/cava.sh
Executable file
@@ -0,0 +1,65 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 配置
|
||||
CHARS="▁▂▃▄▅▆▇█"
|
||||
BARS=10
|
||||
CONF="/tmp/waybar_cava_config"
|
||||
|
||||
# 初始化
|
||||
len=$((${#CHARS}-1))
|
||||
idle_char="${CHARS:0:1}"
|
||||
idle_output=$(printf "%0.s$idle_char" $(seq 1 $BARS))
|
||||
|
||||
# 生成 Cava 配置
|
||||
cat > "$CONF" <<EOF
|
||||
[general]
|
||||
bars = $BARS
|
||||
[input]
|
||||
method = pulse
|
||||
source = auto
|
||||
[output]
|
||||
method = raw
|
||||
raw_target = /dev/stdout
|
||||
data_format = ascii
|
||||
ascii_max_range = $len
|
||||
EOF
|
||||
|
||||
cleanup() {
|
||||
trap - EXIT INT TERM
|
||||
pkill -P $$ 2>/dev/null
|
||||
echo "$idle_output"
|
||||
exit 0
|
||||
}
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
# 核心检测:是否存在未暂停的音频流
|
||||
is_audio_active() {
|
||||
pactl list sink-inputs 2>/dev/null | grep -q "Corked: no"
|
||||
}
|
||||
|
||||
# 初始状态
|
||||
echo "$idle_output"
|
||||
|
||||
while true; do
|
||||
# 如果存在未静音的音频
|
||||
if is_audio_active; then
|
||||
if ! pgrep -P $$ -x cava >/dev/null; then
|
||||
# 这里的 sed 字典是根据你的 CHARS 动态生成的
|
||||
sed_dict="s/;//g;"
|
||||
for ((i=0; i<=${len}; i++)); do
|
||||
sed_dict="${sed_dict}s/$i/${CHARS:$i:1}/g;"
|
||||
done
|
||||
cava -p "$CONF" 2>/dev/null | sed -u "$sed_dict" &
|
||||
fi
|
||||
# 正在播放时,稍微降低检查频率减少 CPU 占用
|
||||
sleep 1
|
||||
else
|
||||
if pgrep -P $$ -x cava >/dev/null; then
|
||||
pkill -P $$ -x cava 2>/dev/null
|
||||
wait 2>/dev/null
|
||||
echo "$idle_output"
|
||||
fi
|
||||
# 没声音时,使用 subscribe 等待事件,被动唤醒,不产生任何循环开销
|
||||
timeout 5s pactl subscribe 2>/dev/null | grep --line-buffered "sink-input" | head -n 1 >/dev/null
|
||||
fi
|
||||
done
|
||||
Reference in New Issue
Block a user