feat: Refactor audio utility functions and update sound services to use shared methods
This commit is contained in:
35
app/utils/audio.py
Normal file
35
app/utils/audio.py
Normal file
@@ -0,0 +1,35 @@
|
||||
"""Audio file utility functions shared across audio processing services."""
|
||||
|
||||
import hashlib
|
||||
from pathlib import Path
|
||||
|
||||
import ffmpeg # type: ignore[import-untyped]
|
||||
|
||||
from app.core.logging import get_logger
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
def get_file_hash(file_path: Path) -> str:
|
||||
"""Calculate SHA-256 hash of a file."""
|
||||
hash_sha256 = hashlib.sha256()
|
||||
with file_path.open("rb") as f:
|
||||
for chunk in iter(lambda: f.read(4096), b""):
|
||||
hash_sha256.update(chunk)
|
||||
return hash_sha256.hexdigest()
|
||||
|
||||
|
||||
def get_file_size(file_path: Path) -> int:
|
||||
"""Get file size in bytes."""
|
||||
return file_path.stat().st_size
|
||||
|
||||
|
||||
def get_audio_duration(file_path: Path) -> int:
|
||||
"""Get audio duration in milliseconds using ffmpeg."""
|
||||
try:
|
||||
probe = ffmpeg.probe(str(file_path))
|
||||
duration = float(probe["format"]["duration"])
|
||||
return int(duration * 1000) # Convert to milliseconds
|
||||
except Exception as e:
|
||||
logger.warning("Failed to get duration for %s: %s", file_path, e)
|
||||
return 0
|
||||
Reference in New Issue
Block a user