Spaces:
Sleeping
Sleeping
File size: 1,954 Bytes
0f34acb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | """
Модуль предобработки аудио: шумоподавление и нормализация громкости
"""
import os
import librosa
import noisereduce as nr
import numpy as np
from scipy.io import wavfile
def preprocess_audio(file_path: str, output_path: str = None) -> str:
"""
Шумоподавление и нормализация уровня громкости.
Args:
file_path: путь к исходному аудиофайлу
output_path: путь для сохранения обработанного файла
Returns:
путь к обработанному аудиофайлу
"""
print(f" Загрузка аудио: {file_path}")
audio, sr = librosa.load(file_path, sr=None)
# Шумоподавление (первые 0.5 секунды как профиль шума)
noise_sample = audio[:int(sr * 0.5)]
audio_denoised = nr.reduce_noise(
y=audio,
sr=sr,
y_noise=noise_sample,
prop_decrease=0.8
)
# Нормализация громкости (максимальная амплитуда = 0.9)
max_val = np.max(np.abs(audio_denoised))
if max_val > 0:
audio_normalized = audio_denoised / max_val * 0.9
else:
audio_normalized = audio_denoised
# Преобразование в int16 для сохранения
audio_int16 = (audio_normalized * 32767).astype(np.int16)
# Сохранение (правильная обработка расширения)
if output_path is None:
# Разделяем имя файла и расширение
base, ext = os.path.splitext(file_path)
output_path = f"{base}_processed.wav"
wavfile.write(output_path, sr, audio_int16)
print(f" Предобработка завершена: {output_path}")
return output_path |