Add urgent flag for higher volume playback
Added optional 'urgent' boolean field to POST /notify requests. When urgent=true, audio is played at 1.5x volume with clipping protection for critical messages. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
5e50df4dac
commit
5f7dd68bf6
@ -53,6 +53,13 @@ class NotifyRequest(BaseModel):
|
||||
description="Enable/disable TTS playback (for debugging)",
|
||||
),
|
||||
]
|
||||
urgent: Annotated[
|
||||
bool,
|
||||
Field(
|
||||
default=False,
|
||||
description="Play at higher volume for critical messages",
|
||||
),
|
||||
]
|
||||
|
||||
@field_validator("message", mode="before")
|
||||
@classmethod
|
||||
|
||||
@ -10,6 +10,8 @@ import time
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Any
|
||||
|
||||
import numpy as np
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@ -27,6 +29,7 @@ class TTSRequest:
|
||||
voice: str
|
||||
rate: int
|
||||
voice_enabled: bool
|
||||
urgent: bool = False
|
||||
timestamp: float = field(default_factory=time.time)
|
||||
request_id: str | None = None
|
||||
|
||||
@ -180,6 +183,11 @@ class TTSQueueManager:
|
||||
self._stats.processed += 1
|
||||
return
|
||||
|
||||
# Apply volume boost for urgent messages
|
||||
if request.urgent:
|
||||
audio_data = np.clip(audio_data * 1.5, -1.0, 1.0).astype(np.float32)
|
||||
logger.debug("Applied urgent volume boost (1.5x)")
|
||||
|
||||
# Play audio
|
||||
self.audio_player.play(audio_data, self.tts_engine.get_sample_rate())
|
||||
|
||||
|
||||
@ -67,6 +67,7 @@ async def notify(request: NotifyRequest) -> NotifyResponse:
|
||||
voice=voice,
|
||||
rate=request.rate,
|
||||
voice_enabled=request.voice_enabled and settings.voice_enabled,
|
||||
urgent=request.urgent,
|
||||
)
|
||||
|
||||
# Enqueue request
|
||||
|
||||
@ -33,6 +33,7 @@ class TestNotifyRequest:
|
||||
assert request.voice is None # None = use server default
|
||||
assert request.rate == 170 # default rate
|
||||
assert request.voice_enabled is True # default enabled
|
||||
assert request.urgent is False # default not urgent
|
||||
|
||||
def test_valid_request_with_all_fields(self):
|
||||
"""
|
||||
@ -45,12 +46,14 @@ class TestNotifyRequest:
|
||||
voice="en_US-libritts-high",
|
||||
rate=200,
|
||||
voice_enabled=False,
|
||||
urgent=True,
|
||||
)
|
||||
|
||||
assert request.message == "Test message"
|
||||
assert request.voice == "en_US-libritts-high"
|
||||
assert request.rate == 200
|
||||
assert request.voice_enabled is False
|
||||
assert request.urgent is True
|
||||
|
||||
def test_message_is_required(self):
|
||||
"""
|
||||
|
||||
Loading…
Reference in New Issue
Block a user