FishAudioTTSService: Add normalize as InputParam, model_id as arg

This commit is contained in:
Mark Backman
2025-07-03 13:14:15 -07:00
parent 251ea756c8
commit ec09505f6b
2 changed files with 25 additions and 3 deletions

View File

@@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added ### Added
- Added `normalize` and `model_id` to `FishAudioTTSService`.
- Added `run_llm` field to `LLMMessagesAppendFrame` and `LLMMessagesUpdateFrame` - Added `run_llm` field to `LLMMessagesAppendFrame` and `LLMMessagesUpdateFrame`
frames. If true, a context frame will be pushed triggering the LLM to respond. frames. If true, a context frame will be pushed triggering the LLM to respond.
@@ -85,9 +87,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Deprecated ### Deprecated
- In `FishTTSService`, deprecated `model` and replaced with `reference_id`. - In `FishAudioTTSService`, deprecated `model` and replaced with
This change is to better align with Fish Audio's variable naming and to `reference_id`. This change is to better align with Fish Audio's variable
reduce confusion about what functionality the variable controls. naming and to reduce confusion about what functionality the variable
controls.
## [0.0.73] - 2025-06-26 ## [0.0.73] - 2025-06-26

View File

@@ -58,12 +58,14 @@ class FishAudioTTSService(InterruptibleTTSService):
Parameters: Parameters:
language: Language for synthesis. Defaults to English. language: Language for synthesis. Defaults to English.
latency: Latency mode ("normal" or "balanced"). Defaults to "normal". latency: Latency mode ("normal" or "balanced"). Defaults to "normal".
normalize: Whether to normalize audio output. Defaults to True.
prosody_speed: Speech speed multiplier (0.5-2.0). Defaults to 1.0. prosody_speed: Speech speed multiplier (0.5-2.0). Defaults to 1.0.
prosody_volume: Volume adjustment in dB. Defaults to 0. prosody_volume: Volume adjustment in dB. Defaults to 0.
""" """
language: Optional[Language] = Language.EN language: Optional[Language] = Language.EN
latency: Optional[str] = "normal" # "normal" or "balanced" latency: Optional[str] = "normal" # "normal" or "balanced"
normalize: Optional[bool] = True
prosody_speed: Optional[float] = 1.0 # Speech speed (0.5-2.0) prosody_speed: Optional[float] = 1.0 # Speech speed (0.5-2.0)
prosody_volume: Optional[int] = 0 # Volume adjustment in dB prosody_volume: Optional[int] = 0 # Volume adjustment in dB
@@ -73,6 +75,7 @@ class FishAudioTTSService(InterruptibleTTSService):
api_key: str, api_key: str,
reference_id: Optional[str] = None, # This is the voice ID reference_id: Optional[str] = None, # This is the voice ID
model: Optional[str] = None, # Deprecated model: Optional[str] = None, # Deprecated
model_id: str = "speech-1.5",
output_format: FishAudioOutputFormat = "pcm", output_format: FishAudioOutputFormat = "pcm",
sample_rate: Optional[int] = None, sample_rate: Optional[int] = None,
params: Optional[InputParams] = None, params: Optional[InputParams] = None,
@@ -89,6 +92,7 @@ class FishAudioTTSService(InterruptibleTTSService):
The `model` parameter is deprecated and will be removed in version 0.1.0. The `model` parameter is deprecated and will be removed in version 0.1.0.
Use `reference_id` instead to specify the voice model. Use `reference_id` instead to specify the voice model.
model_id: Specify which Fish Audio TTS model to use (e.g. "speech-1.5")
output_format: Audio output format. Defaults to "pcm". output_format: Audio output format. Defaults to "pcm".
sample_rate: Audio sample rate. If None, uses default. sample_rate: Audio sample rate. If None, uses default.
params: Additional input parameters for voice customization. params: Additional input parameters for voice customization.
@@ -134,6 +138,7 @@ class FishAudioTTSService(InterruptibleTTSService):
"sample_rate": 0, "sample_rate": 0,
"latency": params.latency, "latency": params.latency,
"format": output_format, "format": output_format,
"normalize": params.normalize,
"prosody": { "prosody": {
"speed": params.prosody_speed, "speed": params.prosody_speed,
"volume": params.prosody_volume, "volume": params.prosody_volume,
@@ -141,6 +146,8 @@ class FishAudioTTSService(InterruptibleTTSService):
"reference_id": reference_id, "reference_id": reference_id,
} }
self.set_model_name(model_id)
def can_generate_metrics(self) -> bool: def can_generate_metrics(self) -> bool:
"""Check if this service can generate processing metrics. """Check if this service can generate processing metrics.
@@ -149,6 +156,17 @@ class FishAudioTTSService(InterruptibleTTSService):
""" """
return True return True
async def set_model(self, model: str):
"""Set the TTS model and reconnect.
Args:
model: The model name to use for synthesis.
"""
await super().set_model(model)
logger.info(f"Switching TTS model to: [{model}]")
await self._disconnect()
await self._connect()
async def start(self, frame: StartFrame): async def start(self, frame: StartFrame):
"""Start the Fish Audio TTS service. """Start the Fish Audio TTS service.
@@ -197,6 +215,7 @@ class FishAudioTTSService(InterruptibleTTSService):
logger.debug("Connecting to Fish Audio") logger.debug("Connecting to Fish Audio")
headers = {"Authorization": f"Bearer {self._api_key}"} headers = {"Authorization": f"Bearer {self._api_key}"}
headers["model"] = self.model_name
self._websocket = await websockets.connect(self._base_url, extra_headers=headers) self._websocket = await websockets.connect(self._base_url, extra_headers=headers)
# Send initial start message with ormsgpack # Send initial start message with ormsgpack