first commit

This commit is contained in:
workD12
2026-09-11 19:47:15 +03:00
commit 32754a1fe2
56 changed files with 3836 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
"""Декодирование сжатого аудио (mp3/ogg/...) в float32.
Использует PyAV — ffmpeg-библиотеки вкомпилированы в пакет av
(он уже есть как зависимость faster-whisper), системный ffmpeg не нужен.
"""
from __future__ import annotations
import io
from typing import Tuple
import av
import numpy as np
def decode_audio_bytes(data: bytes) -> Tuple[np.ndarray, int]:
"""Байты аудиофайла → (float32 mono [-1..1], samplerate)."""
container = av.open(io.BytesIO(data))
try:
stream = container.streams.audio[0]
samplerate = int(stream.rate)
resampler = av.AudioResampler(format="flt", layout="mono")
pieces = []
for frame in container.decode(stream):
for out in resampler.resample(frame):
arr = out.to_ndarray()
if arr.ndim == 2: # (channels, samples) → mono
arr = arr[0] if arr.shape[0] == 1 else arr.mean(axis=0)
pieces.append(np.asarray(arr, dtype=np.float32))
finally:
container.close()
if not pieces:
return np.zeros(0, dtype=np.float32), samplerate
return np.concatenate(pieces), samplerate