""" Модуль предобработки аудио: шумоподавление и нормализация громкости """ 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