Spaces:
Sleeping
Sleeping
| """AudioContent value object for representing audio data with validation.""" | |
| from dataclasses import dataclass | |
| from typing import Optional | |
| class AudioContent: | |
| """Value object representing audio content with metadata and validation.""" | |
| data: bytes | |
| format: str | |
| sample_rate: int | |
| duration: float | |
| filename: Optional[str] = None | |
| def __post_init__(self): | |
| """Validate audio content after initialization.""" | |
| self._validate() | |
| def _validate(self): | |
| """Validate audio content properties.""" | |
| if not self.data: | |
| raise ValueError("Audio data cannot be empty") | |
| if not isinstance(self.data, bytes): | |
| raise TypeError("Audio data must be bytes") | |
| if self.format not in ['wav', 'mp3', 'flac', 'ogg']: | |
| raise ValueError(f"Unsupported audio format: {self.format}. Supported formats: wav, mp3, flac, ogg") | |
| if self.sample_rate <= 0: | |
| raise ValueError("Sample rate must be positive") | |
| if self.sample_rate < 8000 or self.sample_rate > 192000: | |
| raise ValueError("Sample rate must be between 8000 and 192000 Hz") | |
| if self.duration <= 0: | |
| raise ValueError("Duration must be positive") | |
| if self.duration > 3600: # 1 hour limit | |
| raise ValueError("Audio duration cannot exceed 1 hour") | |
| if self.filename is not None and not self.filename.strip(): | |
| raise ValueError("Filename cannot be empty string") | |
| def size_bytes(self) -> int: | |
| """Get the size of audio data in bytes.""" | |
| return len(self.data) | |
| def is_valid_format(self) -> bool: | |
| """Check if the audio format is valid.""" | |
| return self.format in ['wav', 'mp3', 'flac', 'ogg'] |