neverlib 0.2.6__py3-none-any.whl → 0.2.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- neverlib/.claude/settings.local.json +9 -0
- neverlib/Docs/audio_aug/test_volume.ipynb +416 -0
- neverlib/Docs/audio_aug_test/test_volume.ipynb +289 -0
- neverlib/Docs/filter/biquad.ipynb +129 -0
- neverlib/Docs/filter/filter_family.ipynb +450 -0
- neverlib/Docs/filter/highpass.ipynb +139 -0
- neverlib/Docs/filter/scipy_filter_family.ipynb +110 -0
- neverlib/Docs/vad/VAD_Energy.ipynb +167 -0
- neverlib/Docs/vad/VAD_Silero.ipynb +325 -0
- neverlib/Docs/vad/VAD_WebRTC.ipynb +189 -0
- neverlib/Docs/vad/VAD_funasr.ipynb +192 -0
- neverlib/Docs/vad/VAD_rvADfast.ipynb +162 -0
- neverlib/Docs/vad/VAD_statistics.ipynb +532 -0
- neverlib/Docs/vad/VAD_tenVAD.ipynb +292 -0
- neverlib/Docs/vad/VAD_vadlib.ipynb +168 -0
- neverlib/Docs/vad/VAD_whisper.ipynb +404 -0
- neverlib/QA/gen_init.py +218 -0
- neverlib/QA/get_fun.py +19 -0
- neverlib/__init__.py +40 -4
- neverlib/audio_aug/HarmonicDistortion.py +19 -13
- neverlib/audio_aug/__init__.py +82 -12
- neverlib/audio_aug/audio_aug.py +19 -14
- neverlib/audio_aug/clip_aug.py +15 -18
- neverlib/audio_aug/coder_aug.py +44 -24
- neverlib/audio_aug/coder_aug2.py +54 -37
- neverlib/audio_aug/loss_packet_aug.py +7 -7
- neverlib/audio_aug/quant_aug.py +19 -17
- neverlib/data/000_short_enhance.wav +0 -0
- neverlib/data/3956_speech.wav +0 -0
- neverlib/data/3956_sweep.wav +0 -0
- neverlib/data/vad_example.wav +0 -0
- neverlib/data/white.wav +0 -0
- neverlib/data/white_EQ.wav +0 -0
- neverlib/data/white_matched.wav +0 -0
- neverlib/data_analyze/__init__.py +69 -20
- neverlib/data_analyze/dataset_analyzer.py +109 -114
- neverlib/data_analyze/quality_metrics.py +87 -89
- neverlib/data_analyze/rms_distrubution.py +23 -42
- neverlib/data_analyze/spectral_analysis.py +43 -46
- neverlib/data_analyze/statistics.py +76 -76
- neverlib/data_analyze/temporal_features.py +15 -6
- neverlib/data_analyze/visualization.py +208 -144
- neverlib/filter/__init__.py +40 -20
- neverlib/filter/auto_eq/__init__.py +50 -31
- neverlib/filter/auto_eq/de_eq.py +0 -2
- neverlib/filter/common.py +24 -5
- neverlib/metrics/DNSMOS/bak_ovr.onnx +0 -0
- neverlib/metrics/DNSMOS/model_v8.onnx +0 -0
- neverlib/metrics/DNSMOS/sig.onnx +0 -0
- neverlib/metrics/DNSMOS/sig_bak_ovr.onnx +0 -0
- neverlib/metrics/__init__.py +59 -0
- neverlib/metrics/dnsmos.py +4 -15
- neverlib/metrics/pDNSMOS/sig_bak_ovr.onnx +0 -0
- neverlib/metrics/pesq_c/PESQ +0 -0
- neverlib/metrics/pesq_c/dsp.c +553 -0
- neverlib/metrics/pesq_c/dsp.h +138 -0
- neverlib/metrics/pesq_c/pesq.h +294 -0
- neverlib/metrics/pesq_c/pesqdsp.c +1047 -0
- neverlib/metrics/pesq_c/pesqio.c +392 -0
- neverlib/metrics/pesq_c/pesqmain.c +610 -0
- neverlib/metrics/pesq_c/pesqmod.c +1417 -0
- neverlib/metrics/pesq_c/pesqpar.h +297 -0
- neverlib/metrics/snr.py +5 -1
- neverlib/metrics/spec.py +31 -21
- neverlib/metrics/test_pesq.py +0 -4
- neverlib/tests/__init__.py +33 -1
- neverlib/tests/test_imports.py +19 -0
- neverlib/utils/__init__.py +71 -15
- neverlib/utils/audio_split.py +6 -1
- neverlib/utils/checkGPU.py +17 -9
- neverlib/utils/lazy_expose.py +29 -0
- neverlib/utils/utils.py +55 -12
- neverlib/vad/PreProcess.py +66 -66
- neverlib/vad/__init__.py +71 -25
- neverlib/vad/class_get_speech.py +1 -1
- neverlib/vad/class_vad.py +3 -3
- neverlib/vad/img.png +0 -0
- {neverlib-0.2.6.dist-info → neverlib-0.2.8.dist-info}/METADATA +1 -1
- {neverlib-0.2.6.dist-info → neverlib-0.2.8.dist-info}/RECORD +82 -39
- {neverlib-0.2.6.dist-info → neverlib-0.2.8.dist-info}/WHEEL +0 -0
- {neverlib-0.2.6.dist-info → neverlib-0.2.8.dist-info}/licenses/LICENSE +0 -0
- {neverlib-0.2.6.dist-info → neverlib-0.2.8.dist-info}/top_level.txt +0 -0
neverlib/filter/__init__.py
CHANGED
|
@@ -1,20 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
from
|
|
9
|
-
|
|
10
|
-
from
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
# This file is auto-generated. Do NOT edit manually.
|
|
2
|
+
# Generated by neverlib.QA.gen_init
|
|
3
|
+
|
|
4
|
+
from typing import TYPE_CHECKING, Any
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
# 仅在类型检查时导入,提供IDE补全支持
|
|
8
|
+
from .biquad import BiquadFilter
|
|
9
|
+
from .common import HPFilter, HPFilter_torch, LPFilter
|
|
10
|
+
from .core import EQFilter, EQ_test, eq_process, eq_process_test
|
|
11
|
+
|
|
12
|
+
# 运行时使用懒加载
|
|
13
|
+
from lazy_loader import attach
|
|
14
|
+
|
|
15
|
+
__getattr__, __dir__, __all__ = attach(
|
|
16
|
+
__name__,
|
|
17
|
+
submodules=[
|
|
18
|
+
"biquad",
|
|
19
|
+
"common",
|
|
20
|
+
"core",
|
|
21
|
+
],
|
|
22
|
+
submod_attrs={
|
|
23
|
+
"biquad": ['BiquadFilter'],
|
|
24
|
+
"common": ['HPFilter', 'HPFilter_torch', 'LPFilter'],
|
|
25
|
+
"core": ['EQFilter', 'EQ_test', 'eq_process', 'eq_process_test'],
|
|
26
|
+
}
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
# 显式声明 __all__ 以便 IDE 识别
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
__all__ = [
|
|
32
|
+
'BiquadFilter',
|
|
33
|
+
'HPFilter',
|
|
34
|
+
'HPFilter_torch',
|
|
35
|
+
'LPFilter',
|
|
36
|
+
'EQFilter',
|
|
37
|
+
'EQ_test',
|
|
38
|
+
'eq_process',
|
|
39
|
+
'eq_process_test',
|
|
40
|
+
]
|
|
@@ -1,36 +1,55 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Date: 2025-08-19 21:26:54
|
|
4
|
-
Description:
|
|
5
|
-
AudoEQ - 自动EQ补偿模块
|
|
6
|
-
Author: 凌逆战 | Never
|
|
1
|
+
# This file is auto-generated. Do NOT edit manually.
|
|
2
|
+
# Generated by neverlib.QA.gen_init
|
|
7
3
|
|
|
8
|
-
|
|
9
|
-
- 频谱直接补偿 (auto_eq_spectral_direct)
|
|
10
|
-
- 差分进化优化 (auto_eq_de)
|
|
11
|
-
- 遗传算法基础版 (auto_eq_ga_basic)
|
|
12
|
-
- 遗传算法高级版 (auto_eq_ga_advanced)
|
|
13
|
-
'''
|
|
4
|
+
from typing import TYPE_CHECKING, Any
|
|
14
5
|
|
|
15
|
-
|
|
16
|
-
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
# 仅在类型检查时导入,提供IDE补全支持
|
|
8
|
+
from .de_eq import get_filter_function, match_frequency_response, plot_spectra_comparison
|
|
9
|
+
from .freq_eq import get_freq_eq
|
|
10
|
+
from .ga_eq_advanced import EQConfig, EQOptimizer, load_config_from_yaml, main
|
|
11
|
+
from .ga_eq_basic import custom_mutate, evaluate_individual, generate_active_gene, generate_dbgain_gene, generate_fc_gene, generate_q_gene, generate_type_gene, get_combined_eq_response_db, get_magnitude_spectrum_db, get_single_filter_freq_response_db_from_coeffs, individual_creator, main_ga
|
|
17
12
|
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
# get_filter_function,
|
|
21
|
-
# match_frequency_response,
|
|
22
|
-
# plot_spectra_comparison
|
|
23
|
-
# )
|
|
13
|
+
# 运行时使用懒加载
|
|
14
|
+
from lazy_loader import attach
|
|
24
15
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
16
|
+
__getattr__, __dir__, __all__ = attach(
|
|
17
|
+
__name__,
|
|
18
|
+
submodules=[
|
|
19
|
+
"de_eq",
|
|
20
|
+
"freq_eq",
|
|
21
|
+
"ga_eq_advanced",
|
|
22
|
+
"ga_eq_basic",
|
|
23
|
+
],
|
|
24
|
+
submod_attrs={
|
|
25
|
+
"de_eq": ['get_filter_function', 'match_frequency_response', 'plot_spectra_comparison'],
|
|
26
|
+
"freq_eq": ['get_freq_eq'],
|
|
27
|
+
"ga_eq_advanced": ['EQConfig', 'EQOptimizer', 'load_config_from_yaml', 'main'],
|
|
28
|
+
"ga_eq_basic": ['custom_mutate', 'evaluate_individual', 'generate_active_gene', 'generate_dbgain_gene', 'generate_fc_gene', 'generate_q_gene', 'generate_type_gene', 'get_combined_eq_response_db', 'get_magnitude_spectrum_db', 'get_single_filter_freq_response_db_from_coeffs', 'individual_creator', 'main_ga'],
|
|
29
|
+
}
|
|
30
|
+
)
|
|
34
31
|
|
|
35
|
-
#
|
|
36
|
-
|
|
32
|
+
# 显式声明 __all__ 以便 IDE 识别
|
|
33
|
+
if TYPE_CHECKING:
|
|
34
|
+
__all__ = [
|
|
35
|
+
'get_filter_function',
|
|
36
|
+
'match_frequency_response',
|
|
37
|
+
'plot_spectra_comparison',
|
|
38
|
+
'get_freq_eq',
|
|
39
|
+
'EQConfig',
|
|
40
|
+
'EQOptimizer',
|
|
41
|
+
'load_config_from_yaml',
|
|
42
|
+
'main',
|
|
43
|
+
'custom_mutate',
|
|
44
|
+
'evaluate_individual',
|
|
45
|
+
'generate_active_gene',
|
|
46
|
+
'generate_dbgain_gene',
|
|
47
|
+
'generate_fc_gene',
|
|
48
|
+
'generate_q_gene',
|
|
49
|
+
'generate_type_gene',
|
|
50
|
+
'get_combined_eq_response_db',
|
|
51
|
+
'get_magnitude_spectrum_db',
|
|
52
|
+
'get_single_filter_freq_response_db_from_coeffs',
|
|
53
|
+
'individual_creator',
|
|
54
|
+
'main_ga',
|
|
55
|
+
]
|
neverlib/filter/auto_eq/de_eq.py
CHANGED
neverlib/filter/common.py
CHANGED
|
@@ -3,10 +3,8 @@ Author: 凌逆战 | Never
|
|
|
3
3
|
Date: 2025-08-05 23:42:08
|
|
4
4
|
Description: 一些基础和通用的滤波器
|
|
5
5
|
'''
|
|
6
|
-
import torch
|
|
7
6
|
import numpy as np
|
|
8
7
|
from scipy import signal
|
|
9
|
-
import torchaudio.functional as F
|
|
10
8
|
|
|
11
9
|
|
|
12
10
|
def HPFilter(wav, sr=16000, order=6, cutoff=100):
|
|
@@ -17,7 +15,12 @@ def HPFilter(wav, sr=16000, order=6, cutoff=100):
|
|
|
17
15
|
:param cutoff: 截止频率
|
|
18
16
|
:return:
|
|
19
17
|
"""
|
|
20
|
-
b, a = signal.butter(order,
|
|
18
|
+
b, a = signal.butter(order,
|
|
19
|
+
cutoff,
|
|
20
|
+
btype='highpass',
|
|
21
|
+
analog=False,
|
|
22
|
+
output='ba',
|
|
23
|
+
fs=sr)
|
|
21
24
|
wav = signal.lfilter(b, a, wav, axis=0)
|
|
22
25
|
return wav.astype(np.float32)
|
|
23
26
|
|
|
@@ -30,16 +33,32 @@ def LPFilter(wav, sr=16000, order=6, cutoff=100):
|
|
|
30
33
|
:param cutoff: 截止频率
|
|
31
34
|
:return:
|
|
32
35
|
"""
|
|
33
|
-
b, a = signal.butter(order,
|
|
36
|
+
b, a = signal.butter(order,
|
|
37
|
+
cutoff,
|
|
38
|
+
btype='lowpass',
|
|
39
|
+
analog=False,
|
|
40
|
+
output='ba',
|
|
41
|
+
fs=sr)
|
|
34
42
|
wav = signal.lfilter(b, a, wav, axis=0)
|
|
35
43
|
return wav.astype(np.float32)
|
|
36
44
|
|
|
45
|
+
|
|
37
46
|
def HPFilter_torch(wav, sr=16000, order=6, cutoff=100):
|
|
38
47
|
"""
|
|
39
48
|
Args:
|
|
40
49
|
wav: (B,T)
|
|
41
50
|
"""
|
|
42
|
-
|
|
51
|
+
try:
|
|
52
|
+
import torch
|
|
53
|
+
import torchaudio.functional as F
|
|
54
|
+
except Exception as e:
|
|
55
|
+
raise ImportError("需要安装 torch 和 torchaudio 才能使用 HPFilter_torch") from e
|
|
56
|
+
b, a = signal.butter(order,
|
|
57
|
+
cutoff,
|
|
58
|
+
btype='highpass',
|
|
59
|
+
analog=False,
|
|
60
|
+
output='ba',
|
|
61
|
+
fs=sr)
|
|
43
62
|
|
|
44
63
|
# 将滤波器系数转换为 torch 张量
|
|
45
64
|
b = torch.tensor(b, dtype=torch.float32)
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# This file is auto-generated. Do NOT edit manually.
|
|
2
|
+
# Generated by neverlib.QA.gen_init
|
|
3
|
+
|
|
4
|
+
from typing import TYPE_CHECKING, Any
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
# 仅在类型检查时导入,提供IDE补全支持
|
|
8
|
+
from .dnsmos import ComputeScore
|
|
9
|
+
from .lpc_lsp import framing, lpc_lsp_distance, lpc_to_lsp
|
|
10
|
+
from .snr import get_snr, get_snr_from_noisy, psnr, seg_snr, si_sdr
|
|
11
|
+
from .spec import lsd, mcd, sd
|
|
12
|
+
from .test_pesq import mos2pesq, pesq2mos
|
|
13
|
+
from .time import dc_offset, mean_rms_amplitude, peak_amplitude, rms_amplitude
|
|
14
|
+
|
|
15
|
+
# 运行时使用懒加载
|
|
16
|
+
from lazy_loader import attach
|
|
17
|
+
|
|
18
|
+
__getattr__, __dir__, __all__ = attach(
|
|
19
|
+
__name__,
|
|
20
|
+
submodules=[
|
|
21
|
+
"dnsmos",
|
|
22
|
+
"lpc_lsp",
|
|
23
|
+
"snr",
|
|
24
|
+
"spec",
|
|
25
|
+
"test_pesq",
|
|
26
|
+
"time",
|
|
27
|
+
],
|
|
28
|
+
submod_attrs={
|
|
29
|
+
"dnsmos": ['ComputeScore'],
|
|
30
|
+
"lpc_lsp": ['framing', 'lpc_lsp_distance', 'lpc_to_lsp'],
|
|
31
|
+
"snr": ['get_snr', 'get_snr_from_noisy', 'psnr', 'seg_snr', 'si_sdr'],
|
|
32
|
+
"spec": ['lsd', 'mcd', 'sd'],
|
|
33
|
+
"test_pesq": ['mos2pesq', 'pesq2mos'],
|
|
34
|
+
"time": ['dc_offset', 'mean_rms_amplitude', 'peak_amplitude', 'rms_amplitude'],
|
|
35
|
+
}
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# 显式声明 __all__ 以便 IDE 识别
|
|
39
|
+
if TYPE_CHECKING:
|
|
40
|
+
__all__ = [
|
|
41
|
+
'ComputeScore',
|
|
42
|
+
'framing',
|
|
43
|
+
'lpc_lsp_distance',
|
|
44
|
+
'lpc_to_lsp',
|
|
45
|
+
'get_snr',
|
|
46
|
+
'get_snr_from_noisy',
|
|
47
|
+
'psnr',
|
|
48
|
+
'seg_snr',
|
|
49
|
+
'si_sdr',
|
|
50
|
+
'lsd',
|
|
51
|
+
'mcd',
|
|
52
|
+
'sd',
|
|
53
|
+
'mos2pesq',
|
|
54
|
+
'pesq2mos',
|
|
55
|
+
'dc_offset',
|
|
56
|
+
'mean_rms_amplitude',
|
|
57
|
+
'peak_amplitude',
|
|
58
|
+
'rms_amplitude',
|
|
59
|
+
]
|
neverlib/metrics/dnsmos.py
CHANGED
|
@@ -5,17 +5,10 @@ Description:
|
|
|
5
5
|
要计算个性化 MOS 分数(干扰说话者受到惩罚),请提供“-p”参数,例如:python dnsmos.py -t ./SampleClips -o sample.csv -p
|
|
6
6
|
要计算常规 MOS 分数,请省略“-p”参数。例如:python dnsmos.py -t ./SampleClips -o sample.csv
|
|
7
7
|
'''
|
|
8
|
-
import argparse
|
|
9
|
-
import concurrent.futures
|
|
10
|
-
import glob
|
|
11
|
-
import os
|
|
12
8
|
import librosa
|
|
13
9
|
import numpy as np
|
|
14
|
-
import onnxruntime
|
|
15
|
-
import pandas as pd
|
|
10
|
+
import onnxruntime
|
|
16
11
|
import soundfile as sf
|
|
17
|
-
from tqdm import tqdm
|
|
18
|
-
from neverlib.utils import get_path_list
|
|
19
12
|
|
|
20
13
|
|
|
21
14
|
class ComputeScore:
|
|
@@ -29,8 +22,8 @@ class ComputeScore:
|
|
|
29
22
|
else:
|
|
30
23
|
primary_model_path = "./DNSMOS/sig_bak_ovr.onnx"
|
|
31
24
|
|
|
32
|
-
self.onnx_sess =
|
|
33
|
-
self.p808_onnx_sess =
|
|
25
|
+
self.onnx_sess = onnxruntime.InferenceSession(primary_model_path)
|
|
26
|
+
self.p808_onnx_sess = onnxruntime.InferenceSession(p808_model_path)
|
|
34
27
|
|
|
35
28
|
def audio_melspec(self, audio, n_mels=120, frame_size=320, hop_length=160, to_db=True):
|
|
36
29
|
mel_spec = librosa.feature.melspectrogram(y=audio, sr=self.sr, n_fft=frame_size + 1, hop_length=hop_length, n_mels=n_mels)
|
|
@@ -102,7 +95,7 @@ class ComputeScore:
|
|
|
102
95
|
return out_dict
|
|
103
96
|
|
|
104
97
|
|
|
105
|
-
|
|
98
|
+
if __name__ == "__main__":
|
|
106
99
|
SAMPLING_RATE = 16000
|
|
107
100
|
INPUT_LENGTH = 9.01
|
|
108
101
|
is_personalized_MOS = False
|
|
@@ -111,7 +104,3 @@ def main():
|
|
|
111
104
|
compute_score = ComputeScore(is_personalized_MOS, SAMPLING_RATE, INPUT_LENGTH)
|
|
112
105
|
data = compute_score(testset_dir)
|
|
113
106
|
print(data)
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
if __name__ == "__main__":
|
|
117
|
-
main()
|
|
Binary file
|
|
Binary file
|