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.
Files changed (80) hide show
  1. neverlib/.claude/settings.local.json +9 -0
  2. neverlib/Docs/audio_aug/test_volume.ipynb +416 -0
  3. neverlib/Docs/audio_aug_test/test_volume.ipynb +289 -0
  4. neverlib/Docs/filter/biquad.ipynb +129 -0
  5. neverlib/Docs/filter/filter_family.ipynb +450 -0
  6. neverlib/Docs/filter/highpass.ipynb +139 -0
  7. neverlib/Docs/filter/scipy_filter_family.ipynb +110 -0
  8. neverlib/Docs/vad/VAD_Energy.ipynb +167 -0
  9. neverlib/Docs/vad/VAD_Silero.ipynb +325 -0
  10. neverlib/Docs/vad/VAD_WebRTC.ipynb +189 -0
  11. neverlib/Docs/vad/VAD_funasr.ipynb +192 -0
  12. neverlib/Docs/vad/VAD_rvADfast.ipynb +162 -0
  13. neverlib/Docs/vad/VAD_statistics.ipynb +532 -0
  14. neverlib/Docs/vad/VAD_tenVAD.ipynb +292 -0
  15. neverlib/Docs/vad/VAD_vadlib.ipynb +168 -0
  16. neverlib/Docs/vad/VAD_whisper.ipynb +404 -0
  17. neverlib/QA/gen_init.py +117 -0
  18. neverlib/QA/get_fun.py +19 -0
  19. neverlib/__init__.py +21 -4
  20. neverlib/audio_aug/HarmonicDistortion.py +19 -13
  21. neverlib/audio_aug/__init__.py +30 -12
  22. neverlib/audio_aug/audio_aug.py +19 -14
  23. neverlib/audio_aug/clip_aug.py +15 -18
  24. neverlib/audio_aug/coder_aug.py +44 -24
  25. neverlib/audio_aug/coder_aug2.py +54 -37
  26. neverlib/audio_aug/loss_packet_aug.py +7 -7
  27. neverlib/audio_aug/quant_aug.py +19 -17
  28. neverlib/data/000_short_enhance.wav +0 -0
  29. neverlib/data/3956_speech.wav +0 -0
  30. neverlib/data/3956_sweep.wav +0 -0
  31. neverlib/data/vad_example.wav +0 -0
  32. neverlib/data/white.wav +0 -0
  33. neverlib/data/white_EQ.wav +0 -0
  34. neverlib/data/white_matched.wav +0 -0
  35. neverlib/data_analyze/__init__.py +25 -20
  36. neverlib/data_analyze/dataset_analyzer.py +109 -114
  37. neverlib/data_analyze/quality_metrics.py +87 -89
  38. neverlib/data_analyze/rms_distrubution.py +23 -42
  39. neverlib/data_analyze/spectral_analysis.py +43 -46
  40. neverlib/data_analyze/statistics.py +76 -76
  41. neverlib/data_analyze/temporal_features.py +15 -6
  42. neverlib/data_analyze/visualization.py +208 -144
  43. neverlib/filter/__init__.py +17 -20
  44. neverlib/filter/auto_eq/__init__.py +18 -35
  45. neverlib/filter/auto_eq/de_eq.py +0 -2
  46. neverlib/filter/common.py +24 -5
  47. neverlib/metrics/DNSMOS/bak_ovr.onnx +0 -0
  48. neverlib/metrics/DNSMOS/model_v8.onnx +0 -0
  49. neverlib/metrics/DNSMOS/sig.onnx +0 -0
  50. neverlib/metrics/DNSMOS/sig_bak_ovr.onnx +0 -0
  51. neverlib/metrics/__init__.py +23 -0
  52. neverlib/metrics/dnsmos.py +4 -15
  53. neverlib/metrics/pDNSMOS/sig_bak_ovr.onnx +0 -0
  54. neverlib/metrics/pesq_c/PESQ +0 -0
  55. neverlib/metrics/pesq_c/dsp.c +553 -0
  56. neverlib/metrics/pesq_c/dsp.h +138 -0
  57. neverlib/metrics/pesq_c/pesq.h +294 -0
  58. neverlib/metrics/pesq_c/pesqdsp.c +1047 -0
  59. neverlib/metrics/pesq_c/pesqio.c +392 -0
  60. neverlib/metrics/pesq_c/pesqmain.c +610 -0
  61. neverlib/metrics/pesq_c/pesqmod.c +1417 -0
  62. neverlib/metrics/pesq_c/pesqpar.h +297 -0
  63. neverlib/metrics/snr.py +5 -1
  64. neverlib/metrics/spec.py +31 -21
  65. neverlib/metrics/test_pesq.py +0 -4
  66. neverlib/tests/test_imports.py +17 -0
  67. neverlib/utils/__init__.py +26 -15
  68. neverlib/utils/audio_split.py +5 -1
  69. neverlib/utils/checkGPU.py +17 -9
  70. neverlib/utils/lazy_expose.py +29 -0
  71. neverlib/utils/utils.py +40 -12
  72. neverlib/vad/__init__.py +33 -25
  73. neverlib/vad/class_get_speech.py +1 -1
  74. neverlib/vad/class_vad.py +3 -3
  75. neverlib/vad/img.png +0 -0
  76. {neverlib-0.2.5.dist-info → neverlib-0.2.7.dist-info}/METADATA +20 -17
  77. {neverlib-0.2.5.dist-info → neverlib-0.2.7.dist-info}/RECORD +80 -37
  78. {neverlib-0.2.5.dist-info → neverlib-0.2.7.dist-info}/WHEEL +0 -0
  79. {neverlib-0.2.5.dist-info → neverlib-0.2.7.dist-info}/licenses/LICENSE +0 -0
  80. {neverlib-0.2.5.dist-info → neverlib-0.2.7.dist-info}/top_level.txt +0 -0
@@ -1,20 +1,17 @@
1
- '''
2
- Author: 凌逆战 | Never
3
- Date: 2025-03-17 19:23:33
4
- Description:
5
- '''
6
- """
7
- 节省路径
8
- from neverlib.filter import common
9
- 如果没有用户必须完整路径
10
- from neverlib.filter.common import *
11
- """
12
- from lazy_loader import attach
13
-
14
- __getattr__, __dir__, __all__ = attach(
15
- __name__,
16
- submodules=["common", "core", "biquad"],
17
- submod_attrs={
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
- Author: 凌逆战 | Never
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
3
+ from lazy_loader import attach
7
4
 
8
- 该模块提供多种自动EQ补偿方法:
9
- - 频谱直接补偿 (auto_eq_spectral_direct)
10
- - 差分进化优化 (auto_eq_de)
11
- - 遗传算法基础版 (auto_eq_ga_basic)
12
- - 遗传算法高级版 (auto_eq_ga_advanced)
13
- '''
14
-
15
- # 频谱直接补偿方法
16
- from .freq_eq import get_freq_eq
17
-
18
- # 差分进化优化方法
19
- # from .de_eq import (
20
- # get_filter_function,
21
- # match_frequency_response,
22
- # plot_spectra_comparison
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
+ )
@@ -2,8 +2,6 @@
2
2
  # Author: AI Assistant based on User's Demand
3
3
  # Date: 2023-10-27 (Using Differential Evolution)
4
4
  # Modified: 2025-01-05 (Adapted for new filters.py structure)
5
- import sys
6
- sys.path.append("..")
7
5
  import numpy as np
8
6
  import librosa
9
7
  import soundfile as sf
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, cutoff, btype='highpass', analog=False, output='ba', fs=sr)
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, cutoff, btype='lowpass', analog=False, output='ba', fs=sr)
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
- b, a = signal.butter(order, cutoff, btype='highpass', analog=False, output='ba', fs=sr)
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
+ )
@@ -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 as ort
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 = ort.InferenceSession(primary_model_path)
33
- self.p808_onnx_sess = ort.InferenceSession(p808_model_path)
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
- def main():
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