101 lines
3.7 KiB
Bash
Executable File
101 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# File: .claude/hooks/play-tts.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 TTS Provider Router with Language Learning Support
|
|
# @context Routes TTS requests to active provider (ElevenLabs or Piper)
|
|
# @architecture Provider abstraction layer - single entry point for all TTS
|
|
# @dependencies provider-manager.sh, play-tts-elevenlabs.sh, play-tts-piper.sh, github-star-reminder.sh
|
|
# @entrypoints Called by hooks, slash commands, personality-manager.sh, and all TTS features
|
|
# @patterns Provider pattern - delegates to provider-specific implementations, auto-detects provider from voice name
|
|
# @related provider-manager.sh, play-tts-elevenlabs.sh, play-tts-piper.sh, learn-manager.sh
|
|
#
|
|
|
|
# Fix locale warnings
|
|
export LC_ALL=C
|
|
|
|
TEXT="$1"
|
|
VOICE_OVERRIDE="$2" # Optional: voice name or ID
|
|
|
|
# Get script directory
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
# Source provider manager to get active provider
|
|
source "$SCRIPT_DIR/provider-manager.sh"
|
|
|
|
# Get active provider
|
|
ACTIVE_PROVIDER=$(get_active_provider)
|
|
|
|
# Show GitHub star reminder (once per day)
|
|
"$SCRIPT_DIR/github-star-reminder.sh" 2>/dev/null || true
|
|
|
|
# @function detect_voice_provider
|
|
# @intent Auto-detect provider from voice name (for mixed-provider support)
|
|
# @why Allow ElevenLabs for main language + Piper for target language
|
|
# @param $1 voice name/ID
|
|
# @returns Provider name (elevenlabs or piper)
|
|
detect_voice_provider() {
|
|
local voice="$1"
|
|
# Piper voice names contain underscore and dash (e.g., es_ES-davefx-medium)
|
|
if [[ "$voice" == *"_"*"-"* ]]; then
|
|
echo "piper"
|
|
else
|
|
echo "$ACTIVE_PROVIDER"
|
|
fi
|
|
}
|
|
|
|
# Override provider if voice indicates different provider (mixed-provider mode)
|
|
if [[ -n "$VOICE_OVERRIDE" ]]; then
|
|
DETECTED_PROVIDER=$(detect_voice_provider "$VOICE_OVERRIDE")
|
|
if [[ "$DETECTED_PROVIDER" != "$ACTIVE_PROVIDER" ]]; then
|
|
ACTIVE_PROVIDER="$DETECTED_PROVIDER"
|
|
fi
|
|
fi
|
|
|
|
# Normal single-language mode - route to appropriate provider implementation
|
|
# Note: For learning mode, the output style will call this script TWICE:
|
|
# 1. First call with main language text and current voice
|
|
# 2. Second call with translated text and target voice
|
|
case "$ACTIVE_PROVIDER" in
|
|
elevenlabs)
|
|
exec "$SCRIPT_DIR/play-tts-elevenlabs.sh" "$TEXT" "$VOICE_OVERRIDE"
|
|
;;
|
|
piper)
|
|
exec "$SCRIPT_DIR/play-tts-piper.sh" "$TEXT" "$VOICE_OVERRIDE"
|
|
;;
|
|
*)
|
|
echo "❌ Unknown provider: $ACTIVE_PROVIDER"
|
|
echo " Run: /agent-vibes:provider list"
|
|
exit 1
|
|
;;
|
|
esac
|