mayhem-party-venue/server.sh

145 lines
3.4 KiB
Bash

# /bin/bash
main() {
set -eo pipefail
tty && read -p "git refresh? [yN] " a && test "$a" == "y" && (
git config --global credential.helper store
git submodule init
git pull --recurse-submodules --jobs=10
git submodule foreach git pull origin master
)
_tts
_mayhem_party
_discord
_stt
_dolphin
while read; do
pkill -SIGUSR1 -f mayhem-party
done
}
_cleanup() {
pkill -f larynx
pkill -f hotwords.py
pkill -f rust-whisper
pkill -f mayhem-party
}
cleanup() {
pkill -f server.sh
_cleanup
}
_cleanup
trap cleanup EXIT
log() {
echo "$(date) > $*" >&2
}
_discord() {
(
export HOME="$PWD/mnt.d/discord.d"
if ! snap list discord; then
sudo snap install discord
fi
(
exec snap run discord
) &> /tmp/mayhem-party.discord.log &
disown
)
}
_dolphin() {
echo
read -p "pls start dolphin"
echo
}
_mayhem_party() {
log mayhem-party
pushd ./git.d/mayhem-party.d
go build
popd
log launching mayhem-party
(
source ./config.d/mayhem-party.d/env.env
./git.d/mayhem-party.d/mayhem-party
) &
}
_tts() {
log launching tts
pushd ./git.d/tts.d/larynx.d/
chmod -R 777 ./mnt.d || true
bash ./run.sh
popd
}
_stt() {
log stt
(
export HOME="$PWD/mnt.d/stt.d"
mkdir -p "$HOME"
cd "$HOME"
bash ../../git.d/stt.d/rust-whisper.d/download_models.sh
if [ -n "$PIP" ]; then
pip3 install -r ../../git.d/stt.d/rust-whisper.d/requirements.txt
fi
local device=$(
pactl list \
| grep Monitor.Source \
| grep -v hdmi \
| awk "{print \$NF}" \
| head -n 1
)
if ! test -f /etc/asound.conf || ! grep "$device" /etc/asound.conf; then
(
echo "pcm.pulse_monitor {"
echo " type pulse"
echo " device $device"
echo "}"
echo "ctl.pulse_monitor {"
echo " type pulse"
echo " device $device"
echo "}"
) | sudo tee /etc/asound.conf
fi
if [ -n "$PACTL_RESET" ]; then
for i in $(pactl list short modules | grep secret | cut -f1); do
pactl unload-module $i
done
fi
name='my_secret_sink'
for i in 1 2; do
if ! pactl list | grep -q $name$i; then
pactl load-module module-null-sink sink_name=$name$i channels=1
pactl load-module module-remap-source master=$name$i.monitor source_name=shared-$name$i source_properties="device.description=shared-$name$i"
mic_name="$(pactl list | grep -A 100 Name:.$name$i.monitor | grep device.description.=. | head -n 1 | sed 's/.* = //' | tr -d '"') Monitor"
fi
done
echo
read -p "pavucontrol to change input to $name, ok? "
echo
log launching stt
(
export HOTWORDS=../../config.d/mayhem-party.d/v01-live.yaml@.users[].state.gm.alias,.gm.hotwords.KEYS
export MIC_TIMEOUT=2
export URL=http://localhost:17071/gm/rpc/broadcastSomeoneSaidAlias?message={{hotword}}
export HEADERS=say="Eye herd {{hotword}}"
export MIC_NAME="${MIC_NAME:-pulse_monitor}"
export MODEL=tiny.en
export P=2
while ! python3 ../../git.d/stt.d/rust-whisper.d/hotwords.py; do
sleep 5
done
) &
)
}
if [ "$0" == "$BASH_SOURCE" ]; then
main "$@"
fi