neverlib 0.2.5__py3-none-any.whl → 0.2.7__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 +117 -0
- neverlib/QA/get_fun.py +19 -0
- neverlib/__init__.py +21 -4
- neverlib/audio_aug/HarmonicDistortion.py +19 -13
- neverlib/audio_aug/__init__.py +30 -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 +25 -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 +17 -20
- neverlib/filter/auto_eq/__init__.py +18 -35
- 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 +23 -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/test_imports.py +17 -0
- neverlib/utils/__init__.py +26 -15
- neverlib/utils/audio_split.py +5 -1
- neverlib/utils/checkGPU.py +17 -9
- neverlib/utils/lazy_expose.py +29 -0
- neverlib/utils/utils.py +40 -12
- neverlib/vad/__init__.py +33 -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.5.dist-info → neverlib-0.2.7.dist-info}/METADATA +20 -17
- {neverlib-0.2.5.dist-info → neverlib-0.2.7.dist-info}/RECORD +80 -37
- {neverlib-0.2.5.dist-info → neverlib-0.2.7.dist-info}/WHEEL +0 -0
- {neverlib-0.2.5.dist-info → neverlib-0.2.7.dist-info}/licenses/LICENSE +0 -0
- {neverlib-0.2.5.dist-info → neverlib-0.2.7.dist-info}/top_level.txt +0 -0
neverlib/filter/__init__.py
CHANGED
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"common": ["HPFilter", "LPFilter", "HPFilter_torch"],
|
|
19
|
-
},
|
|
20
|
-
)
|
|
1
|
+
# This file is auto-generated. Do NOT edit manually.
|
|
2
|
+
# Generated by neverlib.QA.gen_init
|
|
3
|
+
from lazy_loader import attach
|
|
4
|
+
|
|
5
|
+
__getattr__, __dir__, __all__ = attach(
|
|
6
|
+
__name__,
|
|
7
|
+
submodules=[
|
|
8
|
+
"biquad",
|
|
9
|
+
"common",
|
|
10
|
+
"core",
|
|
11
|
+
],
|
|
12
|
+
submod_attrs={
|
|
13
|
+
"biquad": ['BiquadFilter'],
|
|
14
|
+
"common": ['HPFilter', 'HPFilter_torch', 'LPFilter'],
|
|
15
|
+
"core": ['EQFilter', 'EQ_test', 'eq_process', 'eq_process_test'],
|
|
16
|
+
}
|
|
17
|
+
)
|
|
@@ -1,36 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
|
3
|
+
from lazy_loader import attach
|
|
7
4
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
# )
|
|
24
|
-
|
|
25
|
-
# 遗传算法基础版
|
|
26
|
-
# from .ga_eq_basic import (
|
|
27
|
-
# individual_creator,
|
|
28
|
-
# get_magnitude_spectrum_db,
|
|
29
|
-
# get_single_filter_freq_response_db_from_coeffs,
|
|
30
|
-
# get_combined_eq_response_db,
|
|
31
|
-
# evaluate_individual,
|
|
32
|
-
# custom_mutate,
|
|
33
|
-
# )
|
|
34
|
-
|
|
35
|
-
# 遗传算法高级版
|
|
36
|
-
# from .ga_eq_advanced import EQOptimizer
|
|
5
|
+
__getattr__, __dir__, __all__ = attach(
|
|
6
|
+
__name__,
|
|
7
|
+
submodules=[
|
|
8
|
+
"de_eq",
|
|
9
|
+
"freq_eq",
|
|
10
|
+
"ga_eq_advanced",
|
|
11
|
+
"ga_eq_basic",
|
|
12
|
+
],
|
|
13
|
+
submod_attrs={
|
|
14
|
+
"de_eq": ['get_filter_function', 'match_frequency_response', 'plot_spectra_comparison'],
|
|
15
|
+
"freq_eq": ['get_freq_eq'],
|
|
16
|
+
"ga_eq_advanced": ['EQConfig', 'EQOptimizer', 'load_config_from_yaml', 'main'],
|
|
17
|
+
"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'],
|
|
18
|
+
}
|
|
19
|
+
)
|
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,23 @@
|
|
|
1
|
+
# This file is auto-generated. Do NOT edit manually.
|
|
2
|
+
# Generated by neverlib.QA.gen_init
|
|
3
|
+
from lazy_loader import attach
|
|
4
|
+
|
|
5
|
+
__getattr__, __dir__, __all__ = attach(
|
|
6
|
+
__name__,
|
|
7
|
+
submodules=[
|
|
8
|
+
"dnsmos",
|
|
9
|
+
"lpc_lsp",
|
|
10
|
+
"snr",
|
|
11
|
+
"spec",
|
|
12
|
+
"test_pesq",
|
|
13
|
+
"time",
|
|
14
|
+
],
|
|
15
|
+
submod_attrs={
|
|
16
|
+
"dnsmos": ['ComputeScore', 'main'],
|
|
17
|
+
"lpc_lsp": ['framing', 'lpc_lsp_distance', 'lpc_to_lsp'],
|
|
18
|
+
"snr": ['get_snr', 'get_snr_from_noisy', 'psnr', 'seg_snr', 'si_sdr'],
|
|
19
|
+
"spec": ['lsd', 'mcd', 'sd'],
|
|
20
|
+
"test_pesq": ['mos2pesq', 'pesq2mos'],
|
|
21
|
+
"time": ['dc_offset', 'mean_rms_amplitude', 'peak_amplitude', 'rms_amplitude'],
|
|
22
|
+
}
|
|
23
|
+
)
|
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
|