feat: Implement sound normalization service and API endpoints
- Added SoundNormalizerService for normalizing audio files with support for one-pass and two-pass normalization methods. - Introduced API endpoints for normalizing all sounds and specific sounds by ID, including support for force normalization and handling of already normalized sounds. - Created comprehensive test suite for the sound normalizer service and its API endpoints, covering various scenarios including success, errors, and edge cases. - Refactored sound scanning service to utilize SHA-256 for file hashing instead of MD5 for improved security. - Enhanced logging and error handling throughout the sound normalization process.
This commit is contained in:
@@ -126,3 +126,26 @@ class SoundRepository:
|
||||
except Exception:
|
||||
logger.exception("Failed to get popular sounds")
|
||||
raise
|
||||
|
||||
async def get_unnormalized_sounds(self) -> list[Sound]:
|
||||
"""Get all sounds that haven't been normalized yet."""
|
||||
try:
|
||||
statement = select(Sound).where(Sound.is_normalized == False) # noqa: E712
|
||||
result = await self.session.exec(statement)
|
||||
return list(result.all())
|
||||
except Exception:
|
||||
logger.exception("Failed to get unnormalized sounds")
|
||||
raise
|
||||
|
||||
async def get_unnormalized_sounds_by_type(self, sound_type: str) -> list[Sound]:
|
||||
"""Get unnormalized sounds by type."""
|
||||
try:
|
||||
statement = select(Sound).where(
|
||||
Sound.type == sound_type,
|
||||
Sound.is_normalized == False, # noqa: E712
|
||||
)
|
||||
result = await self.session.exec(statement)
|
||||
return list(result.all())
|
||||
except Exception:
|
||||
logger.exception("Failed to get unnormalized sounds by type: %s", sound_type)
|
||||
raise
|
||||
|
||||
Reference in New Issue
Block a user