mirror of
https://github.com/bmadcode/BMAD-METHOD.git
synced 2025-12-29 16:14:59 +00:00
opencode moved agents back to agent folder
This commit is contained in:
95
.claude/hooks/replay-target-audio.sh
Executable file
95
.claude/hooks/replay-target-audio.sh
Executable file
@@ -0,0 +1,95 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# File: .claude/hooks/replay-target-audio.sh
|
||||
#
|
||||
# AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
||||
# Website: https://agentvibes.org
|
||||
# Repository: https://github.com/paulpreibisch/AgentVibes
|
||||
#
|
||||
# Co-created by Paul Preibisch with Claude AI
|
||||
# Copyright (c) 2025 Paul Preibisch
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# express or implied, including but not limited to the warranties of
|
||||
# merchantability, fitness for a particular purpose and noninfringement.
|
||||
# In no event shall the authors or copyright holders be liable for any claim,
|
||||
# damages or other liability, whether in an action of contract, tort or
|
||||
# otherwise, arising from, out of or in connection with the software or the
|
||||
# use or other dealings in the software.
|
||||
#
|
||||
# ---
|
||||
#
|
||||
# @fileoverview Replay Last Target Language Audio
|
||||
# @context Replays the most recent target language TTS for language learning
|
||||
# @architecture Simple audio replay with lock mechanism for sequential playback
|
||||
# @dependencies ffprobe, paplay/aplay/mpg123/mpv, .claude/last-target-audio.txt
|
||||
# @entrypoints Called by /agent-vibes:replay-target slash command
|
||||
# @patterns Sequential audio playback with lock file, duration-based lock release
|
||||
# @related play-tts-piper.sh, play-tts-elevenlabs.sh, learn-manager.sh
|
||||
#
|
||||
|
||||
# Fix locale warnings
|
||||
export LC_ALL=C
|
||||
|
||||
TARGET_AUDIO_FILE="${CLAUDE_PROJECT_DIR:-.}/.claude/last-target-audio.txt"
|
||||
|
||||
# Check if target audio tracking file exists
|
||||
if [ ! -f "$TARGET_AUDIO_FILE" ]; then
|
||||
echo "❌ No target language audio found."
|
||||
echo " Language learning mode may not be active."
|
||||
echo " Activate with: /agent-vibes:learn"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Read last target audio file path
|
||||
LAST_AUDIO=$(cat "$TARGET_AUDIO_FILE")
|
||||
|
||||
# Verify audio file exists
|
||||
if [ ! -f "$LAST_AUDIO" ]; then
|
||||
echo "❌ Audio file not found: $LAST_AUDIO"
|
||||
echo " The file may have been deleted or moved."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "🔁 Replaying target language audio..."
|
||||
|
||||
# Use lock file for sequential playback
|
||||
LOCK_FILE="/tmp/agentvibes-audio.lock"
|
||||
|
||||
# Wait for any current audio to finish (max 30 seconds)
|
||||
for i in {1..60}; do
|
||||
if [ ! -f "$LOCK_FILE" ]; then
|
||||
break
|
||||
fi
|
||||
sleep 0.5
|
||||
done
|
||||
|
||||
# Create lock
|
||||
touch "$LOCK_FILE"
|
||||
|
||||
# Get audio duration for proper lock timing
|
||||
DURATION=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$LAST_AUDIO" 2>/dev/null)
|
||||
DURATION=${DURATION%.*} # Round to integer
|
||||
DURATION=${DURATION:-1} # Default to 1 second if detection fails
|
||||
|
||||
# Play audio
|
||||
(paplay "$LAST_AUDIO" || aplay "$LAST_AUDIO" || mpg123 "$LAST_AUDIO" || mpv "$LAST_AUDIO") >/dev/null 2>&1 &
|
||||
PLAYER_PID=$!
|
||||
|
||||
# Wait for audio to finish, then release lock
|
||||
(sleep $DURATION; rm -f "$LOCK_FILE") &
|
||||
disown
|
||||
|
||||
echo "✅ Replay complete: $(basename "$LAST_AUDIO")"
|
||||
Reference in New Issue
Block a user