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