neverlib 0.2.7__py3-none-any.whl → 0.2.9__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 (430) hide show
  1. neverlib/QA/ImpactNoiseRejection.py +119 -0
  2. neverlib/QA/gen_init.py +107 -6
  3. neverlib/QA/impact_noise_rejection.png +0 -0
  4. neverlib/QA/out.pcm +0 -0
  5. neverlib/QA/out.wav +0 -0
  6. neverlib/__init__.py +19 -0
  7. neverlib/audio_aug/README.md +3 -0
  8. neverlib/audio_aug/__init__.py +2 -4
  9. neverlib/filter/core.py +8 -5
  10. neverlib/metrics/README.md +35 -0
  11. neverlib/metrics/__init__.py +1 -1
  12. neverlib/metrics/pesq_c/PESQ +0 -0
  13. neverlib/signal_gen/babble_noise_generate.py +113 -0
  14. neverlib/tests/__init__.py +16 -1
  15. neverlib/tests/test_imports.py +2 -0
  16. neverlib/utils/README.md +29 -0
  17. neverlib/utils/__init__.py +7 -6
  18. neverlib/utils/audio_split.py +21 -20
  19. neverlib/utils/checkGPU.py +52 -79
  20. neverlib/utils/floder.py +115 -0
  21. neverlib/utils/pcm.py +42 -0
  22. neverlib/utils/utils.py +3 -77
  23. neverlib/vad/PreProcess.py +66 -66
  24. {neverlib-0.2.7.dist-info → neverlib-0.2.9.dist-info}/METADATA +15 -1
  25. neverlib-0.2.9.dist-info/RECORD +119 -0
  26. neverlib/.claude/settings.local.json +0 -9
  27. neverlib/.history/Docs/audio_aug/del_20250827162530.py +0 -0
  28. neverlib/.history/Docs/audio_aug/del_20250827162540.py +0 -2
  29. neverlib/.history/Docs/audio_aug/del_20250827162541.py +0 -7
  30. neverlib/.history/Docs/audio_aug/del_20250827162606.py +0 -7
  31. neverlib/.history/Docs/audio_aug/del_20250827162637.py +0 -8
  32. neverlib/.history/Docs/audio_aug/del_20250827162645.py +0 -8
  33. neverlib/.history/Docs/audio_aug/del_20250827162723.py +0 -9
  34. neverlib/.history/Docs/audio_aug/del_20250827162739.py +0 -9
  35. neverlib/.history/Docs/audio_aug/test_snr_20250806011311.py +0 -0
  36. neverlib/.history/Docs/audio_aug/test_snr_20250806011331.py +0 -75
  37. neverlib/.history/Docs/audio_aug/test_snr_20250806011342.py +0 -57
  38. neverlib/.history/Docs/audio_aug/test_snr_20250806011352.py +0 -57
  39. neverlib/.history/Docs/audio_aug/test_snr_20250806011403.py +0 -57
  40. neverlib/.history/Docs/audio_aug/test_snr_20250806011413.py +0 -57
  41. neverlib/.history/Docs/audio_aug/test_snr_20250806011435.py +0 -55
  42. neverlib/.history/Docs/audio_aug/test_snr_20250827161751.py +0 -55
  43. neverlib/.history/Docs/audio_aug/test_snr_20250827161754.py +0 -55
  44. neverlib/.history/Docs/audio_aug/test_snr_20250827161833.py +0 -54
  45. neverlib/.history/Docs/audio_aug/test_snr_20250827162017.py +0 -56
  46. neverlib/.history/Docs/audio_aug/test_snr_20250827162021.py +0 -57
  47. neverlib/.history/Docs/audio_aug/test_snr_20250827162028.py +0 -57
  48. neverlib/.history/Docs/audio_aug/test_snr_20250827162033.py +0 -55
  49. neverlib/.history/Docs/audio_aug_test/del_20250827162738.py +0 -9
  50. neverlib/.history/Docs/audio_aug_test/del_20250827162819.py +0 -9
  51. neverlib/.history/Docs/audio_aug_test/del_20250827162830.py +0 -9
  52. neverlib/.history/Docs/audio_aug_test/del_20250827162846.py +0 -9
  53. neverlib/.history/Docs/audio_aug_test/del_20250827162851.py +0 -9
  54. neverlib/.history/Docs/audio_aug_test/del_20250827162903.py +0 -10
  55. neverlib/.history/Docs/audio_aug_test/del_20250827162921.py +0 -10
  56. neverlib/.history/Docs/audio_aug_test/del_20250827162926.py +0 -10
  57. neverlib/.history/Docs/audio_aug_test/del_20250827163030.py +0 -10
  58. neverlib/.history/Docs/audio_aug_test/del_20250827163032.py +0 -10
  59. neverlib/.history/Docs/vad/1_20250810032405.py +0 -0
  60. neverlib/.history/Docs/vad/1_20250810032417.py +0 -39
  61. neverlib/.history/QA/html2markdown_20250822234112.md +0 -0
  62. neverlib/.history/QA/html2markdown_20250822234140.py +0 -9
  63. neverlib/.history/QA/html2markdown_20250822234141.md +0 -9
  64. neverlib/.history/QA/html2markdown_20250822234159.py +0 -12
  65. neverlib/.history/QA/html2markdown_20250822234200.py +0 -17
  66. neverlib/.history/QA/html2markdown_20250822234236.py +0 -17
  67. neverlib/.history/QA/html2markdown_20250822234340.py +0 -14
  68. neverlib/.history/QA/html2markdown_20250822234522.py +0 -18
  69. neverlib/.history/QA/html2markdown_20250822234601.py +0 -20
  70. neverlib/.history/QA/html2markdown_20250822234615.py +0 -22
  71. neverlib/.history/QA/html2markdown_20250822234715.py +0 -28
  72. neverlib/.history/QA/html2markdown_20250822234720.py +0 -27
  73. neverlib/.history/QA/html2markdown_20250822234903.py +0 -27
  74. neverlib/.history/__init___20250805234212.py +0 -41
  75. neverlib/.history/__init___20250904102635.py +0 -39
  76. neverlib/.history/__init___20250904102836.py +0 -34
  77. neverlib/.history/__init___20250904102838.py +0 -39
  78. neverlib/.history/__init___20250904102851.py +0 -33
  79. neverlib/.history/audio_aug/audio_aug_20250806010451.py +0 -125
  80. neverlib/.history/audio_aug/audio_aug_20250806010750.py +0 -138
  81. neverlib/.history/audio_aug/audio_aug_20250806010759.py +0 -140
  82. neverlib/.history/audio_aug/audio_aug_20250806010803.py +0 -140
  83. neverlib/.history/audio_aug/audio_aug_20250806010809.py +0 -140
  84. neverlib/.history/audio_aug/audio_aug_20250806011108.py +0 -140
  85. neverlib/.history/audio_aug/audio_aug_20250826155913.py +0 -158
  86. neverlib/.history/audio_aug/audio_aug_20250826164159.py +0 -159
  87. neverlib/.history/audio_aug/audio_aug_20250826164217.py +0 -160
  88. neverlib/.history/audio_aug/audio_aug_20250826164408.py +0 -161
  89. neverlib/.history/audio_aug/audio_aug_20250826164423.py +0 -161
  90. neverlib/.history/audio_aug/audio_aug_20250826164529.py +0 -161
  91. neverlib/.history/audio_aug/audio_aug_20250826164824.py +0 -161
  92. neverlib/.history/audio_aug/audio_aug_20250826164932.py +0 -162
  93. neverlib/.history/audio_aug/audio_aug_20250826164947.py +0 -162
  94. neverlib/.history/audio_aug/audio_aug_20250826165403.py +0 -162
  95. neverlib/.history/audio_aug/audio_aug_20250826165421.py +0 -162
  96. neverlib/.history/audio_aug/audio_aug_20250826165509.py +0 -163
  97. neverlib/.history/audio_aug/audio_aug_20250826165702.py +0 -163
  98. neverlib/.history/audio_aug/audio_aug_20250826165732.py +0 -165
  99. neverlib/.history/audio_aug/audio_aug_20250826170041.py +0 -163
  100. neverlib/.history/audio_aug/audio_aug_20250826170105.py +0 -164
  101. neverlib/.history/audio_aug/audio_aug_20250826170154.py +0 -164
  102. neverlib/.history/audio_aug/audio_aug_20250826170220.py +0 -165
  103. neverlib/.history/audio_aug/audio_aug_20250826170221.py +0 -165
  104. neverlib/.history/audio_aug/audio_aug_20250826170228.py +0 -165
  105. neverlib/.history/audio_aug/audio_aug_20250826170231.py +0 -165
  106. neverlib/.history/audio_aug/audio_aug_20250826212001.py +0 -165
  107. neverlib/.history/audio_aug/audio_aug_20250826220038.py +0 -165
  108. neverlib/.history/audio_aug/audio_aug_20250826220133.py +0 -165
  109. neverlib/.history/audio_aug/audio_aug_20250826220148.py +0 -165
  110. neverlib/.history/audio_aug/audio_aug_20250826220154.py +0 -165
  111. neverlib/.history/audio_aug/audio_aug_20250826220156.py +0 -165
  112. neverlib/.history/audio_aug/audio_aug_20250826220314.py +0 -165
  113. neverlib/.history/audio_aug/audio_aug_20250826220343.py +0 -184
  114. neverlib/.history/audio_aug/audio_aug_20250826220345.py +0 -184
  115. neverlib/.history/audio_aug/audio_aug_20250826220349.py +0 -184
  116. neverlib/.history/audio_aug/audio_aug_20250826220429.py +0 -184
  117. neverlib/.history/audio_aug/audio_aug_20250826220447.py +0 -184
  118. neverlib/.history/audio_aug/audio_aug_20250826220601.py +0 -186
  119. neverlib/.history/audio_aug/audio_aug_20250826220638.py +0 -186
  120. neverlib/.history/audio_aug/audio_aug_20250826220641.py +0 -186
  121. neverlib/.history/audio_aug/audio_aug_20250826220647.py +0 -186
  122. neverlib/.history/audio_aug/audio_aug_20250826220653.py +0 -186
  123. neverlib/.history/audio_aug/audio_aug_20250826220655.py +0 -186
  124. neverlib/.history/audio_aug/audio_aug_20250826220731.py +0 -185
  125. neverlib/.history/audio_aug/audio_aug_20250826220739.py +0 -185
  126. neverlib/.history/audio_aug/audio_aug_20250826220747.py +0 -185
  127. neverlib/.history/audio_aug/audio_aug_20250826220801.py +0 -186
  128. neverlib/.history/audio_aug/audio_aug_20250826220822.py +0 -186
  129. neverlib/.history/audio_aug/audio_aug_20250826220901.py +0 -186
  130. neverlib/.history/audio_aug/audio_aug_20250826221107.py +0 -187
  131. neverlib/.history/audio_aug/audio_aug_20250826221310.py +0 -188
  132. neverlib/.history/audio_aug/audio_aug_20250826221353.py +0 -191
  133. neverlib/.history/audio_aug/audio_aug_20250826221821.py +0 -191
  134. neverlib/.history/audio_aug/audio_aug_20250826221838.py +0 -191
  135. neverlib/.history/audio_aug/audio_aug_20250826221906.py +0 -191
  136. neverlib/.history/audio_aug/audio_aug_20250826221930.py +0 -191
  137. neverlib/.history/audio_aug/audio_aug_20250826221939.py +0 -191
  138. neverlib/.history/audio_aug/audio_aug_20250826221955.py +0 -191
  139. neverlib/.history/audio_aug/audio_aug_20250826222008.py +0 -197
  140. neverlib/.history/audio_aug/audio_aug_20250826222017.py +0 -200
  141. neverlib/.history/audio_aug/audio_aug_20250826222046.py +0 -203
  142. neverlib/.history/audio_aug/audio_aug_20250826222105.py +0 -203
  143. neverlib/.history/audio_aug/audio_aug_20250826222206.py +0 -203
  144. neverlib/.history/audio_aug/audio_aug_20250826222302.py +0 -203
  145. neverlib/.history/audio_aug/audio_aug_20250826222336.py +0 -203
  146. neverlib/.history/audio_aug/audio_aug_20250826222455.py +0 -204
  147. neverlib/.history/audio_aug/audio_aug_20250826222526.py +0 -204
  148. neverlib/.history/audio_aug/audio_aug_20250826222541.py +0 -204
  149. neverlib/.history/audio_aug/audio_aug_20250826222624.py +0 -202
  150. neverlib/.history/audio_aug/audio_aug_20250826222714.py +0 -205
  151. neverlib/.history/audio_aug/audio_aug_20250826222820.py +0 -205
  152. neverlib/.history/audio_aug/audio_aug_20250826222827.py +0 -205
  153. neverlib/.history/audio_aug/audio_aug_20250826222927.py +0 -232
  154. neverlib/.history/audio_aug/audio_aug_20250826223009.py +0 -232
  155. neverlib/.history/audio_aug/audio_aug_20250826223054.py +0 -232
  156. neverlib/.history/audio_aug/audio_aug_20250826223225.py +0 -233
  157. neverlib/.history/audio_aug/audio_aug_20250826223344.py +0 -236
  158. neverlib/.history/audio_aug/audio_aug_20250826223356.py +0 -236
  159. neverlib/.history/audio_aug/audio_aug_20250826223955.py +0 -242
  160. neverlib/.history/audio_aug/audio_aug_20250826224210.py +0 -240
  161. neverlib/.history/audio_aug/audio_aug_20250826224250.py +0 -242
  162. neverlib/.history/audio_aug/audio_aug_20250826224323.py +0 -280
  163. neverlib/.history/audio_aug/audio_aug_20250826224452.py +0 -263
  164. neverlib/.history/audio_aug/audio_aug_20250826224455.py +0 -263
  165. neverlib/.history/audio_aug/audio_aug_20250826224502.py +0 -263
  166. neverlib/.history/audio_aug/audio_aug_20250826224528.py +0 -263
  167. neverlib/.history/audio_aug/audio_aug_20250826224658.py +0 -263
  168. neverlib/.history/audio_aug/audio_aug_20250826224833.py +0 -264
  169. neverlib/.history/audio_aug/audio_aug_20250826225013.py +0 -269
  170. neverlib/.history/audio_aug/audio_aug_20250826225050.py +0 -269
  171. neverlib/.history/audio_aug/audio_aug_20250826225241.py +0 -268
  172. neverlib/.history/audio_aug/audio_aug_20250826225315.py +0 -266
  173. neverlib/.history/audio_aug/audio_aug_20250826225404.py +0 -266
  174. neverlib/.history/audio_aug/audio_aug_20250826225502.py +0 -265
  175. neverlib/.history/audio_aug/audio_aug_20250826225950.py +0 -267
  176. neverlib/.history/audio_aug/audio_aug_20250826225959.py +0 -268
  177. neverlib/.history/audio_aug/audio_aug_20250826230222.py +0 -271
  178. neverlib/.history/audio_aug/audio_aug_20250826230248.py +0 -270
  179. neverlib/.history/audio_aug/audio_aug_20250826230638.py +0 -266
  180. neverlib/.history/audio_aug/audio_aug_20250826230755.py +0 -266
  181. neverlib/.history/audio_aug/audio_aug_20250826230941.py +0 -265
  182. neverlib/.history/audio_aug/audio_aug_20250826231054.py +0 -266
  183. neverlib/.history/audio_aug/audio_aug_20250826231117.py +0 -266
  184. neverlib/.history/audio_aug/audio_aug_20250826231219.py +0 -266
  185. neverlib/.history/audio_aug/audio_aug_20250826232330.py +0 -266
  186. neverlib/.history/audio_aug/audio_aug_20250826232352.py +0 -266
  187. neverlib/.history/audio_aug/audio_aug_20250827152748.py +0 -268
  188. neverlib/.history/audio_aug/audio_aug_20250827152806.py +0 -268
  189. neverlib/.history/audio_aug/audio_aug_20250827152808.py +0 -268
  190. neverlib/.history/audio_aug/audio_aug_20250827152917.py +0 -283
  191. neverlib/.history/audio_aug/audio_aug_20250827152929.py +0 -281
  192. neverlib/.history/audio_aug/audio_aug_20250827153100.py +0 -286
  193. neverlib/.history/audio_aug/audio_aug_20250827153102.py +0 -286
  194. neverlib/.history/audio_aug/audio_aug_20250827153301.py +0 -295
  195. neverlib/.history/audio_aug/audio_aug_20250827153331.py +0 -298
  196. neverlib/.history/audio_aug/audio_aug_20250827153525.py +0 -303
  197. neverlib/.history/audio_aug/audio_aug_20250827153533.py +0 -304
  198. neverlib/.history/audio_aug/audio_aug_20250827153541.py +0 -321
  199. neverlib/.history/audio_aug/audio_aug_20250827153805.py +0 -322
  200. neverlib/.history/audio_aug/audio_aug_20250827153832.py +0 -323
  201. neverlib/.history/audio_aug/audio_aug_20250827153836.py +0 -324
  202. neverlib/.history/audio_aug/audio_aug_20250827153846.py +0 -324
  203. neverlib/.history/audio_aug/audio_aug_20250827153859.py +0 -325
  204. neverlib/.history/audio_aug/audio_aug_20250827154453.py +0 -337
  205. neverlib/.history/audio_aug/audio_aug_20250827154513.py +0 -355
  206. neverlib/.history/audio_aug/audio_aug_20250827154538.py +0 -356
  207. neverlib/.history/audio_aug/audio_aug_20250827154541.py +0 -357
  208. neverlib/.history/audio_aug/audio_aug_20250827154612.py +0 -357
  209. neverlib/.history/audio_aug/audio_aug_20250827154657.py +0 -360
  210. neverlib/.history/audio_aug/audio_aug_20250827154708.py +0 -360
  211. neverlib/.history/audio_aug/audio_aug_20250827154728.py +0 -366
  212. neverlib/.history/audio_aug/audio_aug_20250827154755.py +0 -367
  213. neverlib/.history/audio_aug/audio_aug_20250827154800.py +0 -367
  214. neverlib/.history/audio_aug/audio_aug_20250827154917.py +0 -368
  215. neverlib/.history/audio_aug/audio_aug_20250827154928.py +0 -369
  216. neverlib/.history/audio_aug/audio_aug_20250827154932.py +0 -370
  217. neverlib/.history/audio_aug/audio_aug_20250827154947.py +0 -372
  218. neverlib/.history/audio_aug/audio_aug_20250827155015.py +0 -375
  219. neverlib/.history/audio_aug/audio_aug_20250827155106.py +0 -375
  220. neverlib/.history/audio_aug/audio_aug_20250827155114.py +0 -393
  221. neverlib/.history/audio_aug/audio_aug_20250827155207.py +0 -415
  222. neverlib/.history/audio_aug/audio_aug_20250827155300.py +0 -415
  223. neverlib/.history/audio_aug/audio_aug_20250827155321.py +0 -471
  224. neverlib/.history/audio_aug/audio_aug_20250827164703.py +0 -471
  225. neverlib/.history/audio_aug/audio_aug_20250827164749.py +0 -471
  226. neverlib/.history/audio_aug/audio_aug_20250827165252.py +0 -472
  227. neverlib/.history/audio_aug/audio_aug_20250827165334.py +0 -472
  228. neverlib/.history/audio_aug/audio_aug_20250827165404.py +0 -473
  229. neverlib/.history/audio_aug/audio_aug_20250827165610.py +0 -473
  230. neverlib/.history/audio_aug/audio_aug_20250827165805.py +0 -473
  231. neverlib/.history/audio_aug/audio_aug_20250827170056.py +0 -473
  232. neverlib/.history/audio_aug/audio_aug_20250827170106.py +0 -472
  233. neverlib/.history/audio_aug/audio_aug_20250827170143.py +0 -472
  234. neverlib/.history/audio_aug/audio_aug_20250827170216.py +0 -472
  235. neverlib/.history/audio_aug/audio_aug_20250827170218.py +0 -472
  236. neverlib/.history/audio_aug/audio_aug_20250827170314.py +0 -472
  237. neverlib/.history/audio_aug/audio_aug_20250827171500.py +0 -471
  238. neverlib/.history/audio_aug/audio_aug_20250827172347.py +0 -471
  239. neverlib/.history/audio_aug/audio_aug_20250827172558.py +0 -470
  240. neverlib/.history/audio_aug/audio_aug_20250827172559.py +0 -470
  241. neverlib/.history/audio_aug/audio_aug_20250827172801.py +0 -470
  242. neverlib/.history/audio_aug/audio_aug_20250827182522.py +0 -470
  243. neverlib/.history/audio_aug/audio_aug_20250827182526.py +0 -470
  244. neverlib/.history/audio_aug/audio_aug_20250827182626.py +0 -470
  245. neverlib/.history/audio_aug/audio_aug_20250827182715.py +0 -470
  246. neverlib/.history/audio_aug/audio_aug_20250904185444.py +0 -470
  247. neverlib/.history/audio_aug/audio_aug_20250904185538.py +0 -445
  248. neverlib/.history/dataAnalyze/__init___20250805234204.py +0 -87
  249. neverlib/.history/dataAnalyze/__init___20250806204125.py +0 -14
  250. neverlib/.history/dataAnalyze/__init___20250806204139.py +0 -14
  251. neverlib/.history/dataAnalyze/__init___20250806204159.py +0 -14
  252. neverlib/.history/data_analyze/__init___20250806204158.py +0 -14
  253. neverlib/.history/data_analyze/__init___20250827163248.py +0 -14
  254. neverlib/.history/filter/__init___20250820103351.py +0 -70
  255. neverlib/.history/filter/__init___20250821102348.py +0 -70
  256. neverlib/.history/filter/__init___20250821102405.py +0 -14
  257. neverlib/.history/filter/auto_eq/__init___20250819213121.py +0 -36
  258. neverlib/.history/filter/auto_eq/__init___20250821102241.py +0 -36
  259. neverlib/.history/filter/auto_eq/__init___20250821102259.py +0 -36
  260. neverlib/.history/filter/auto_eq/__init___20250821102307.py +0 -36
  261. neverlib/.history/filter/auto_eq/__init___20250821102310.py +0 -36
  262. neverlib/.history/filter/auto_eq/__init___20250821102318.py +0 -36
  263. neverlib/.history/filter/auto_eq/__init___20250821102507.py +0 -36
  264. neverlib/.history/filter/auto_eq/de_eq_20250820103848.py +0 -361
  265. neverlib/.history/filter/auto_eq/de_eq_20250821102422.py +0 -360
  266. neverlib/.history/filter/auto_eq/freq_eq_20250805234206.py +0 -75
  267. neverlib/.history/filter/auto_eq/freq_eq_20250820140732.py +0 -75
  268. neverlib/.history/filter/auto_eq/freq_eq_20250820140745.py +0 -75
  269. neverlib/.history/filter/auto_eq/freq_eq_20250820140816.py +0 -75
  270. neverlib/.history/filter/auto_eq/freq_eq_20250820140938.py +0 -77
  271. neverlib/.history/filter/auto_eq/freq_eq_20250820141003.py +0 -77
  272. neverlib/.history/filter/auto_eq/freq_eq_20250820141006.py +0 -77
  273. neverlib/.history/filter/auto_eq/freq_eq_20250820141019.py +0 -77
  274. neverlib/.history/filter/auto_eq/freq_eq_20250820141049.py +0 -77
  275. neverlib/.history/filter/auto_eq/freq_eq_20250820141211.py +0 -77
  276. neverlib/.history/filter/auto_eq/freq_eq_20250820141227.py +0 -77
  277. neverlib/.history/filter/auto_eq/freq_eq_20250820141311.py +0 -78
  278. neverlib/.history/filter/auto_eq/freq_eq_20250820141340.py +0 -78
  279. neverlib/.history/filter/auto_eq/freq_eq_20250820141712.py +0 -78
  280. neverlib/.history/filter/auto_eq/freq_eq_20250820141733.py +0 -78
  281. neverlib/.history/filter/auto_eq/freq_eq_20250820141755.py +0 -78
  282. neverlib/.history/filter/auto_eq/freq_eq_20250821102434.py +0 -76
  283. neverlib/.history/filter/auto_eq/freq_eq_20250821102500.py +0 -76
  284. neverlib/.history/filter/auto_eq/freq_eq_20250821102502.py +0 -76
  285. neverlib/.history/filter/auto_eq/freq_eq_20250821143140.py +0 -76
  286. neverlib/.history/filter/auto_eq/freq_eq_20250821153208.py +0 -76
  287. neverlib/.history/filter/auto_eq/freq_eq_20250821153214.py +0 -76
  288. neverlib/.history/filter/auto_eq/ga_eq_basic_20250820102957.py +0 -380
  289. neverlib/.history/filter/auto_eq/ga_eq_basic_20250820113054.py +0 -380
  290. neverlib/.history/filter/auto_eq/ga_eq_basic_20250820113150.py +0 -380
  291. neverlib/.history/filter/auto_eq/ga_eq_basic_20250820113520.py +0 -385
  292. neverlib/.history/filter/auto_eq/ga_eq_basic_20250820113525.py +0 -385
  293. neverlib/.history/filter/auto_eq/ga_eq_basic_20250821102212.py +0 -385
  294. neverlib/.history/filter/auto_eq/ga_eq_basic_20250901110521.py +0 -385
  295. neverlib/.history/filter/auto_eq/ga_eq_basic_20250901110652.py +0 -385
  296. neverlib/.history/filter/common_20250806002134.py +0 -37
  297. neverlib/.history/filter/common_20250821120448.py +0 -49
  298. neverlib/.history/filter/common_20250821120453.py +0 -49
  299. neverlib/.history/metrics/dnsmos_20250806001612.py +0 -160
  300. neverlib/.history/metrics/dnsmos_20250815180659.py +0 -160
  301. neverlib/.history/metrics/dnsmos_20250815180701.py +0 -158
  302. neverlib/.history/metrics/dnsmos_20250815181321.py +0 -154
  303. neverlib/.history/metrics/dnsmos_20250815181327.py +0 -154
  304. neverlib/.history/metrics/dnsmos_20250815181331.py +0 -154
  305. neverlib/.history/metrics/dnsmos_20250815181620.py +0 -154
  306. neverlib/.history/metrics/dnsmos_20250815181631.py +0 -154
  307. neverlib/.history/metrics/dnsmos_20250815181742.py +0 -154
  308. neverlib/.history/metrics/dnsmos_20250815181824.py +0 -153
  309. neverlib/.history/metrics/dnsmos_20250815181834.py +0 -153
  310. neverlib/.history/metrics/dnsmos_20250815181922.py +0 -153
  311. neverlib/.history/metrics/dnsmos_20250815182011.py +0 -147
  312. neverlib/.history/metrics/dnsmos_20250815182036.py +0 -144
  313. neverlib/.history/metrics/dnsmos_20250815182936.py +0 -143
  314. neverlib/.history/metrics/dnsmos_20250815182942.py +0 -143
  315. neverlib/.history/metrics/dnsmos_20250815183032.py +0 -137
  316. neverlib/.history/metrics/dnsmos_20250815183101.py +0 -144
  317. neverlib/.history/metrics/dnsmos_20250815183121.py +0 -144
  318. neverlib/.history/metrics/dnsmos_20250815183123.py +0 -143
  319. neverlib/.history/metrics/dnsmos_20250815183214.py +0 -143
  320. neverlib/.history/metrics/dnsmos_20250815183240.py +0 -143
  321. neverlib/.history/metrics/dnsmos_20250815183248.py +0 -144
  322. neverlib/.history/metrics/dnsmos_20250815183407.py +0 -142
  323. neverlib/.history/metrics/dnsmos_20250815183409.py +0 -142
  324. neverlib/.history/metrics/dnsmos_20250815183431.py +0 -142
  325. neverlib/.history/metrics/dnsmos_20250815183507.py +0 -140
  326. neverlib/.history/metrics/dnsmos_20250815183513.py +0 -139
  327. neverlib/.history/metrics/dnsmos_20250815183618.py +0 -139
  328. neverlib/.history/metrics/dnsmos_20250815183709.py +0 -140
  329. neverlib/.history/metrics/dnsmos_20250815183756.py +0 -137
  330. neverlib/.history/metrics/dnsmos_20250815183815.py +0 -128
  331. neverlib/.history/metrics/dnsmos_20250815183827.py +0 -129
  332. neverlib/.history/metrics/dnsmos_20250815183913.py +0 -117
  333. neverlib/.history/metrics/dnsmos_20250815183914.py +0 -117
  334. neverlib/.history/metrics/dnsmos_20250815184003.py +0 -118
  335. neverlib/.history/metrics/dnsmos_20250815184040.py +0 -118
  336. neverlib/.history/metrics/dnsmos_20250815184049.py +0 -118
  337. neverlib/.history/metrics/dnsmos_20250815184104.py +0 -117
  338. neverlib/.history/metrics/dnsmos_20250815184200.py +0 -117
  339. neverlib/.history/metrics/lpc_lsp_metric_20250816015944.py +0 -128
  340. neverlib/.history/metrics/lpc_lsp_metric_20250816020142.py +0 -128
  341. neverlib/.history/metrics/lpc_lsp_metric_20250816020156.py +0 -128
  342. neverlib/.history/metrics/lpc_lsp_metric_20250816020554.py +0 -130
  343. neverlib/.history/metrics/lpc_lsp_metric_20250816020600.py +0 -125
  344. neverlib/.history/metrics/lpc_lsp_metric_20250816020631.py +0 -120
  345. neverlib/.history/metrics/lpc_lsp_metric_20250816020746.py +0 -118
  346. neverlib/.history/metrics/lpc_me_20250816013111.py +0 -0
  347. neverlib/.history/metrics/lpc_me_20250816013129.py +0 -121
  348. neverlib/.history/metrics/lpc_me_20250816015430.py +0 -103
  349. neverlib/.history/metrics/lpc_me_20250816015535.py +0 -96
  350. neverlib/.history/metrics/lpc_me_20250816015542.py +0 -96
  351. neverlib/.history/metrics/lpc_me_20250816015636.py +0 -97
  352. neverlib/.history/metrics/lpc_me_20250816015658.py +0 -104
  353. neverlib/.history/metrics/lpc_me_20250816015703.py +0 -100
  354. neverlib/.history/metrics/lpc_me_20250816015945.py +0 -128
  355. neverlib/.history/metrics/snr_20250806010538.py +0 -177
  356. neverlib/.history/metrics/snr_20250806211634.py +0 -184
  357. neverlib/.history/metrics/snr_20250827224201.py +0 -182
  358. neverlib/.history/metrics/snr_20250827234019.py +0 -186
  359. neverlib/.history/metrics/snr_20250827234028.py +0 -186
  360. neverlib/.history/metrics/snr_20250827234030.py +0 -186
  361. neverlib/.history/metrics/spec_20250805234209.py +0 -45
  362. neverlib/.history/metrics/spec_20250816135530.py +0 -11
  363. neverlib/.history/metrics/spec_20250816135654.py +0 -16
  364. neverlib/.history/metrics/spec_20250816135736.py +0 -68
  365. neverlib/.history/metrics/spec_20250816135904.py +0 -75
  366. neverlib/.history/metrics/spec_20250816135921.py +0 -82
  367. neverlib/.history/metrics/spec_20250816140111.py +0 -82
  368. neverlib/.history/metrics/spec_20250816140543.py +0 -136
  369. neverlib/.history/metrics/spec_20250816140559.py +0 -172
  370. neverlib/.history/metrics/spec_20250816140602.py +0 -172
  371. neverlib/.history/metrics/spec_20250816140608.py +0 -172
  372. neverlib/.history/metrics/spec_20250816140654.py +0 -148
  373. neverlib/.history/metrics/spec_20250816140705.py +0 -144
  374. neverlib/.history/metrics/spec_20250816140755.py +0 -138
  375. neverlib/.history/metrics/spec_20250816140823.py +0 -170
  376. neverlib/.history/metrics/spec_20250816140832.py +0 -170
  377. neverlib/.history/metrics/spec_20250816140833.py +0 -170
  378. neverlib/.history/metrics/spec_20250816140922.py +0 -147
  379. neverlib/.history/metrics/spec_20250816141148.py +0 -107
  380. neverlib/.history/metrics/spec_20250816141219.py +0 -123
  381. neverlib/.history/metrics/spec_20250816141732.py +0 -178
  382. neverlib/.history/metrics/spec_20250816141740.py +0 -178
  383. neverlib/.history/metrics/spec_20250816142030.py +0 -178
  384. neverlib/.history/metrics/spec_20250816142107.py +0 -135
  385. neverlib/.history/metrics/spec_20250816142126.py +0 -135
  386. neverlib/.history/metrics/spec_20250816142410.py +0 -135
  387. neverlib/.history/metrics/spec_20250816142415.py +0 -136
  388. neverlib/.history/metrics/spec_metric_20250816135156.py +0 -0
  389. neverlib/.history/metrics/spec_metric_20250816135226.py +0 -5
  390. neverlib/.history/metrics/spec_metric_20250816135227.py +0 -10
  391. neverlib/.history/metrics/spec_metric_20250816135306.py +0 -15
  392. neverlib/.history/metrics/spec_metric_20250816135442.py +0 -31
  393. neverlib/.history/metrics/spec_metric_20250816135448.py +0 -31
  394. neverlib/.history/metrics/spec_metric_20250816135520.py +0 -29
  395. neverlib/.history/metrics/spec_metric_20250816135537.py +0 -63
  396. neverlib/.history/metrics/spec_metric_20250816135653.py +0 -65
  397. neverlib/.history/utils/audio_split_20250805234209.py +0 -268
  398. neverlib/.history/utils/audio_split_20250904185309.py +0 -268
  399. neverlib/.history/utils/utils_20250813165516.py +0 -330
  400. neverlib/.history/utils/utils_20250904181341.py +0 -328
  401. neverlib/.history/utils/utils_20250904185546.py +0 -352
  402. neverlib/.history/utils/utils_20250904185548.py +0 -353
  403. neverlib/.history/utils/utils_20250904185603.py +0 -353
  404. neverlib/.history/utils/utils_20250904185636.py +0 -353
  405. neverlib/.history/utils/utils_20250904185658.py +0 -358
  406. neverlib/.history/utils/utils_20250904190053.py +0 -359
  407. neverlib/.history/vad/PreProcess_20250805234211.py +0 -63
  408. neverlib/.history/vad/PreProcess_20250809232455.py +0 -63
  409. neverlib/.history/vad/PreProcess_20250816020725.py +0 -66
  410. neverlib/.history/vad/VAD_Silero_20250805234211.py +0 -50
  411. neverlib/.history/vad/VAD_Silero_20250809232456.py +0 -50
  412. neverlib/.history/vad/VAD_WebRTC_20250805234211.py +0 -61
  413. neverlib/.history/vad/VAD_WebRTC_20250809232456.py +0 -61
  414. neverlib/.history/vad/VAD_funasr_20250805234211.py +0 -54
  415. neverlib/.history/vad/VAD_funasr_20250809232456.py +0 -54
  416. neverlib/.history/vad/VAD_vadlib_20250805234211.py +0 -70
  417. neverlib/.history/vad/VAD_vadlib_20250809232455.py +0 -70
  418. neverlib/.history/vad/VAD_whisper_20250805234211.py +0 -55
  419. neverlib/.history/vad/VAD_whisper_20250809232456.py +0 -55
  420. neverlib/.specstory/.what-is-this.md +0 -69
  421. neverlib/.specstory/history/2025-08-05_17-06Z-/350/277/231/344/270/200/346/255/245/347/232/204/347/233/256/347/232/204/346/230/257/344/273/200/344/271/210.md +0 -424
  422. neverlib/.specstory/history/2025-08-22_02-10Z-/345/256/214/345/226/204/345/207/275/346/225/260/347/232/204/345/212/237/350/203/275/345/222/214/345/217/230/351/207/217/345/220/215/345/273/272/350/256/256.md +0 -247
  423. neverlib/.specstory/history/2025-08-26_11-54Z-oserror-missing-shared-object-file.md +0 -87
  424. neverlib/.specstory/history/2025-08-27_08-07Z-/345/256/214/345/226/204/346/265/213/350/257/225/346/226/207/346/241/243/347/232/204/350/256/250/350/256/272.md +0 -296
  425. neverlib/.specstory/history/2025-08-27_08-29Z-delete-python-file-command.md +0 -211
  426. neverlib/.specstory/history/2025-08-27_09-05Z-/345/234/250jupyter/344/270/255/346/222/255/346/224/276/351/237/263/351/242/221/347/232/204/344/273/243/347/240/201/344/277/256/346/224/271.md +0 -357
  427. neverlib-0.2.7.dist-info/RECORD +0 -510
  428. {neverlib-0.2.7.dist-info → neverlib-0.2.9.dist-info}/WHEEL +0 -0
  429. {neverlib-0.2.7.dist-info → neverlib-0.2.9.dist-info}/licenses/LICENSE +0 -0
  430. {neverlib-0.2.7.dist-info → neverlib-0.2.9.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,119 @@
1
+ """VPU 冲击声检测 + 可视化(轻量版)。"""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pathlib import Path
6
+ from typing import List, Tuple
7
+
8
+ import matplotlib.pyplot as plt
9
+ import numpy as np
10
+ import soundfile as sf
11
+
12
+ # 基本参数,可按需修改
13
+ AUDIO_PATH = Path(__file__).resolve().parent / "out.wav"
14
+ CHANNEL_INDEX = 4
15
+ DC_WINDOW_MS = 40.0
16
+ SHORT_MS = 6.0
17
+ LONG_MS = 60.0
18
+ RATIO_THRESHOLD = 3.0
19
+ MIN_DURATION_MS = 8.0
20
+ MIN_GAP_MS = 35.0
21
+
22
+
23
+ def moving_average(x: np.ndarray, window: int) -> np.ndarray:
24
+ if window <= 1:
25
+ return x
26
+ kernel = np.ones(window, dtype=np.float64) / window
27
+ return np.convolve(x, kernel, mode="same")
28
+
29
+
30
+ def preprocess(signal: np.ndarray, sr: int) -> np.ndarray:
31
+ dc_window = max(int(sr * DC_WINDOW_MS / 1000.0), 1)
32
+ return signal - moving_average(signal, dc_window)
33
+
34
+
35
+ def ratio_score(signal: np.ndarray, sr: int) -> np.ndarray:
36
+ short = max(int(sr * SHORT_MS / 1000.0), 1)
37
+ long = max(int(sr * LONG_MS / 1000.0), 1)
38
+ short_env = moving_average(np.abs(signal), short)
39
+ long_env = moving_average(np.abs(signal), long)
40
+ return short_env / np.maximum(long_env, 1e-6)
41
+
42
+
43
+ def detect_events(mask: np.ndarray, sr: int) -> List[Tuple[float, float]]:
44
+ min_samples = max(int(sr * MIN_DURATION_MS / 1000.0), 1)
45
+ gap_samples = max(int(sr * MIN_GAP_MS / 1000.0), 1)
46
+
47
+ events: List[Tuple[int, int]] = []
48
+ start = -1
49
+ for idx, active in enumerate(mask):
50
+ if active and start < 0:
51
+ start = idx
52
+ elif not active and start >= 0:
53
+ if idx - start >= min_samples:
54
+ events = _append_or_merge(events, start, idx, gap_samples)
55
+ start = -1
56
+
57
+ if start >= 0 and len(mask) - start >= min_samples:
58
+ events = _append_or_merge(events, start, len(mask), gap_samples)
59
+
60
+ return [(s / sr, e / sr) for s, e in events]
61
+
62
+
63
+ def _append_or_merge(events: List[Tuple[int, int]], start: int, end: int, gap: int) -> List[Tuple[int, int]]:
64
+ if events and start - events[-1][1] <= gap:
65
+ previous_start, _ = events[-1]
66
+ events[-1] = (previous_start, end)
67
+ else:
68
+ events.append((start, end))
69
+ return events
70
+
71
+
72
+ def plot_detection(time: np.ndarray, signal: np.ndarray, score: np.ndarray, events: List[Tuple[float, float]]) -> None:
73
+ fig, axes = plt.subplots(2, 1, figsize=(12, 6), sharex=True)
74
+
75
+ axes[0].plot(time, signal, color="steelblue", linewidth=0.8)
76
+ axes[0].set_ylabel("Amplitude")
77
+ axes[0].set_title("VPU 信号与冲击事件")
78
+
79
+ axes[1].plot(time, score, color="crimson", linewidth=0.8)
80
+ axes[1].axhline(RATIO_THRESHOLD, color="gray", linestyle="--", linewidth=0.8, label="阈值")
81
+ axes[1].set_ylabel("短/长包络比")
82
+ axes[1].set_xlabel("时间 (s)")
83
+ axes[1].legend(loc="upper right")
84
+
85
+ for axis in axes:
86
+ for start, end in events:
87
+ axis.axvspan(start, end, color="lime", alpha=0.25)
88
+ axis.grid(alpha=0.2)
89
+
90
+ fig.tight_layout()
91
+ plt.savefig('./impact_noise_rejection.png')
92
+
93
+
94
+ def main() -> None:
95
+ if not AUDIO_PATH.exists():
96
+ raise FileNotFoundError(f"找不到音频文件: {AUDIO_PATH}")
97
+
98
+ data, sr = sf.read(AUDIO_PATH, always_2d=True)
99
+ if CHANNEL_INDEX >= data.shape[1]:
100
+ raise ValueError(f"音频仅有 {data.shape[1]} 通道,无法访问 VPU 通道 {CHANNEL_INDEX}")
101
+
102
+ signal = data[:, CHANNEL_INDEX].astype(np.float64)
103
+ signal = preprocess(signal, sr)
104
+ score = ratio_score(signal, sr)
105
+ events = detect_events(score > RATIO_THRESHOLD, sr)
106
+
107
+ if events:
108
+ print("检测到的冲击事件:")
109
+ for start, end in events:
110
+ print(f" 起始 {start:.3f}s 结束 {end:.3f}s 持续 {(end-start)*1000:.1f}ms")
111
+ else:
112
+ print("未检测到明显的冲击事件。")
113
+
114
+ time_axis = np.arange(len(signal)) / sr
115
+ plot_detection(time_axis, signal, score, events)
116
+
117
+
118
+ if __name__ == "__main__":
119
+ main()
neverlib/QA/gen_init.py CHANGED
@@ -1,4 +1,5 @@
1
1
  # 自动生成指定包目录下的 __init__.py(懒加载格式:lazy_loader.attach)
2
+ # 并且支持IDE友好的 __init__.py 版本
2
3
 
3
4
  import ast
4
5
  from pathlib import Path
@@ -43,7 +44,7 @@ def _extract_exports_from_module(py_file: Path) -> List[str]:
43
44
  return sorted(exports)
44
45
 
45
46
 
46
- def generate_init_for_directory(package_dir: Path) -> Path:
47
+ def generate_init_for_directory(package_dir: Path, ide_friendly: bool = False) -> Path:
47
48
  """
48
49
  为指定目录生成懒加载版 __init__.py(覆盖写入)。
49
50
  - 仅扫描一级子模块(同级 .py 文件),忽略以下划线开头的模块与 __init__.py 本身。
@@ -55,6 +56,10 @@ def generate_init_for_directory(package_dir: Path) -> Path:
55
56
  submodules=["m1", "m2", ...],
56
57
  submod_attrs={"m1": ["A", "B"], ...}
57
58
  )
59
+
60
+ Args:
61
+ package_dir: 包目录路径
62
+ ide_friendly: 是否生成IDE友好版本(使用TYPE_CHECKING)
58
63
  """
59
64
  package_dir = package_dir.resolve()
60
65
  if not package_dir.is_dir():
@@ -76,6 +81,24 @@ def generate_init_for_directory(package_dir: Path) -> Path:
76
81
  lines: List[str] = []
77
82
  lines.append('# This file is auto-generated. Do NOT edit manually.')
78
83
  lines.append('# Generated by neverlib.QA.gen_init')
84
+
85
+ if ide_friendly:
86
+ lines.append('')
87
+ lines.append('from typing import TYPE_CHECKING, Any')
88
+ lines.append('')
89
+ lines.append('if TYPE_CHECKING:')
90
+ lines.append(' # 仅在类型检查时导入,提供IDE补全支持')
91
+
92
+ # 生成 TYPE_CHECKING 导入
93
+ for module_name in sorted(module_to_exports.keys()):
94
+ exports = module_to_exports[module_name]
95
+ if exports:
96
+ imports = ', '.join(exports)
97
+ lines.append(f' from .{module_name} import {imports}')
98
+
99
+ lines.append('')
100
+ lines.append('# 运行时使用懒加载')
101
+
79
102
  lines.append('from lazy_loader import attach')
80
103
  lines.append('')
81
104
  lines.append('__getattr__, __dir__, __all__ = attach(')
@@ -93,24 +116,102 @@ def generate_init_for_directory(package_dir: Path) -> Path:
93
116
  lines.append(')')
94
117
  lines.append('')
95
118
 
119
+ if ide_friendly:
120
+ # 生成显式的 __all__ 声明
121
+ lines.append('# 显式声明 __all__ 以便 IDE 识别')
122
+ lines.append('if TYPE_CHECKING:')
123
+ lines.append(' __all__ = [')
124
+
125
+ all_exports = []
126
+ for module_name in sorted(module_to_exports.keys()):
127
+ exports = module_to_exports[module_name]
128
+ for export in exports:
129
+ all_exports.append(f" '{export}',")
130
+
131
+ lines.extend(all_exports)
132
+ lines.append(' ]')
133
+
96
134
  init_file = package_dir / '__init__.py'
97
135
  init_file.write_text('\n'.join(lines), encoding='utf-8')
98
136
  return init_file
99
137
 
100
138
 
139
+ def generate_all_packages(root_dir: Path, ide_friendly: bool = False) -> List[Path]:
140
+ """
141
+ 为所有子包生成 __init__.py 文件
142
+
143
+ Args:
144
+ root_dir: 根目录路径
145
+ ide_friendly: 是否生成IDE友好版本
146
+
147
+ Returns:
148
+ 生成的文件路径列表
149
+ """
150
+ generated_files = []
151
+ processed_dirs = set() # 避免重复处理
152
+
153
+ # 查找所有包含 __init__.py 的包目录
154
+ for init_file in root_dir.rglob('__init__.py'):
155
+ package_dir = init_file.parent
156
+
157
+ # 跳过根目录和已处理的目录
158
+ if package_dir == root_dir or package_dir in processed_dirs:
159
+ continue
160
+
161
+ # 检查是否包含其他Python文件(不是只有__init__.py)
162
+ has_other_py_files = any(
163
+ f.name != '__init__.py' and f.suffix == '.py'
164
+ for f in package_dir.iterdir()
165
+ )
166
+
167
+ if has_other_py_files:
168
+ processed_dirs.add(package_dir)
169
+ try:
170
+ init_path = generate_init_for_directory(package_dir, ide_friendly=ide_friendly)
171
+ generated_files.append(init_path)
172
+ print(f'✅ 已生成: {init_path}')
173
+ except Exception as e:
174
+ print(f'❌ 生成失败 {package_dir}: {e}')
175
+
176
+ return generated_files
177
+
178
+
101
179
  def main():
102
180
  import argparse
103
181
 
104
182
  parser = argparse.ArgumentParser(description='为指定包目录自动生成 __init__.py')
105
183
  parser.add_argument('-p', '--package-dir', dest='package_dir',
106
- default='../../neverlib/vad',
107
184
  help='包目录路径,比如 /path/to/pkg 或 ./neverlib/utils')
185
+ parser.add_argument('--all', action='store_true',
186
+ help='为所有子包生成 __init__.py')
187
+ parser.add_argument('--ide-friendly', action='store_true',
188
+ help='生成IDE友好版本(使用TYPE_CHECKING)')
189
+ parser.add_argument('--backup', action='store_true',
190
+ help='备份原始文件')
108
191
  args = parser.parse_args()
109
192
 
110
- target_dir = Path(args.package_dir)
111
- init_path = generate_init_for_directory(target_dir)
112
- print(f'已生成: {init_path}')
113
- # python -m neverlib.QA.gen_init /data03/never/Desktop/neverlib/neverlib/utils
193
+ if args.all:
194
+ # 批量生成所有包
195
+ root_dir = Path(__file__).parent.parent # neverlib 目录
196
+ generated_files = generate_all_packages(root_dir, ide_friendly=args.ide_friendly)
197
+ else:
198
+ # 生成单个包
199
+ if not args.package_dir:
200
+ parser.error('请指定包目录路径 (-p) 或使用 --all 批量生成')
201
+
202
+ target_dir = Path(args.package_dir)
203
+
204
+ if args.backup and (target_dir / '__init__.py').exists():
205
+ backup_path = target_dir / '__init__.py.backup'
206
+ (target_dir / '__init__.py').rename(backup_path)
207
+ print(f"已备份原始文件到: {backup_path}")
208
+
209
+ init_path = generate_init_for_directory(target_dir, ide_friendly=args.ide_friendly)
210
+ print(f'已生成: {init_path}')
211
+ if args.ide_friendly:
212
+ print('✅ 已生成IDE友好版本(支持代码补全和类型检查)')
213
+ else:
214
+ print('ℹ️ 生成标准懒加载版本,如需IDE支持请使用 --ide-friendly 参数')
114
215
 
115
216
 
116
217
  if __name__ == '__main__':
Binary file
neverlib/QA/out.pcm ADDED
Binary file
neverlib/QA/out.wav ADDED
Binary file
neverlib/__init__.py CHANGED
@@ -37,6 +37,13 @@ try:
37
37
  except Exception:
38
38
  __version__ = "0.1.2" # 如果出错, 使用默认版本号
39
39
 
40
+ from typing import TYPE_CHECKING, Any
41
+
42
+
43
+ if TYPE_CHECKING:
44
+ from .utils import get_path_list
45
+ from .filter import HPFilter
46
+ from .audio_aug import volume_norm
40
47
 
41
48
  # 懒加载子包,减少初始导入开销
42
49
  from lazy_loader import attach
@@ -45,4 +52,16 @@ __getattr__, __dir__, __all__ = attach(
45
52
  __name__,
46
53
  submodules=["audio_aug", "data_analyze", "filter", "metrics", "utils", "vad", ],
47
54
  # 只导出子模块,不直接导出函数
55
+ submod_attrs={
56
+ "utils": ["get_path_list"],
57
+ "filter": ["HPFilter"],
58
+ "audio_aug": ["volume_norm"],
59
+ }
48
60
  )
61
+
62
+ if TYPE_CHECKING:
63
+ __all__ = [
64
+ "get_path_list",
65
+ "HPFilter",
66
+ "volume_norm",
67
+ ]
@@ -0,0 +1,3 @@
1
+ https://github.com/iver56/audiomentations
2
+ https://github.com/gfdb/wav2aug
3
+ https://github.com/documentation-ai/DocumentationAI-Docs
@@ -6,6 +6,7 @@ __getattr__, __dir__, __all__ = attach(
6
6
  __name__,
7
7
  submodules=[
8
8
  "HarmonicDistortion",
9
+ "TFDrop",
9
10
  "TFMask",
10
11
  "audio_aug",
11
12
  "clip_aug",
@@ -17,10 +18,7 @@ __getattr__, __dir__, __all__ = attach(
17
18
  submod_attrs={
18
19
  "HarmonicDistortion": ['apply_harmonic_distortion', 'apply_pedalboard_distortion'],
19
20
  "TFMask": ['FreqMask', 'TimeMask'],
20
- "audio_aug": ['add_reverb', 'get_snr_use_vad', 'limiter', 'measure_loudness', 'snr_aug_Interpolation',
21
- 'snr_aug_changeClean', 'snr_aug_changeNoise', 'snr_aug_vad_Interpolation',
22
- 'snr_diff_changeClean', 'snr_diff_changeNoise', 'volume_aug', 'volume_aug_dbrms',
23
- 'volume_aug_linmax', 'volume_aug_lufs', 'volume_convert', 'volume_norm'],
21
+ "audio_aug": ['add_reverb', 'get_snr_use_vad', 'limiter', 'measure_loudness', 'snr_aug_Interpolation', 'snr_aug_changeClean', 'snr_aug_changeNoise', 'snr_aug_vad_Interpolation', 'snr_diff_changeClean', 'snr_diff_changeNoise', 'volume_aug', 'volume_aug_dbrms', 'volume_aug_linmax', 'volume_aug_lufs', 'volume_convert', 'volume_norm'],
24
22
  "clip_aug": ['clipping_aug'],
25
23
  "coder_aug": ['aac_aug_save', 'amr_nb_aug', 'amr_wb_aug', 'flac_aug', 'flac_encode_save', 'mp3_aug', 'opus_aug_save', 'vorbis_aug'],
26
24
  "coder_aug2": ['apply_codec_distortion', 'check_codec_available'],
neverlib/filter/core.py CHANGED
@@ -322,9 +322,8 @@ def EQ_test():
322
322
  from scipy import signal
323
323
 
324
324
  fs = 16000
325
-
326
- # b, a = LowshelfFilter(1500, 15, Q=0.5)
327
- b, a = PeakingFilter(1500, 5, Q=0.5)
325
+ eq = EQFilter(fs)
326
+ b, a = eq.LowshelfFilter(4000, 6, Q=0.7)
328
327
  print(b)
329
328
  print(a)
330
329
 
@@ -335,5 +334,9 @@ def EQ_test():
335
334
  plt.ylabel('Amplitude [dB]')
336
335
  plt.grid(which='both', axis='both') # 显示网格
337
336
  # 画红色的垂直线, 标记截止频率
338
- plt.xscale('log') # x轴对数化
339
- plt.show()
337
+ # plt.xscale('log') # x轴对数化
338
+ plt.savefig('./lowshelf_freq_response.png')
339
+
340
+
341
+ if __name__ == "__main__":
342
+ EQ_test()
@@ -0,0 +1,35 @@
1
+ https://github.com/ftshijt/speech_evaluation?tab=readme-ov-file
2
+ https://github.com/Amir-Ivry/MAPSS-measures
3
+ https://github.com/espnet/espnet/blob/f517b63fe5defb865e2067b11c2dfc516150868d/utils/eval-source-separation.py#L361
4
+
5
+
6
+
7
+
8
+
9
+ F0 Correlation
10
+
11
+ F0 Root Mean Square Error
12
+ sdr
13
+ isr
14
+ sir
15
+ sar
16
+ perm
17
+
18
+
19
+ Convolutional scale-invariant signal-to-distortion ratio (CI-SDR) [x]
20
+ Scale-invariant signal-to-noise ratio (SI-SNR) [x]
21
+ Speech BERT Score
22
+ Discrete Speech BLEU Score [x]
23
+ Discrete Speech Token Edit Distance
24
+
25
+
26
+
27
+
28
+ STOI
29
+ ESTOI
30
+ PESQ
31
+
32
+
33
+ 音频特征:
34
+ https://github.com/libAudioFlux/audioFlux
35
+ https://github.com/csteinmetz1/pyloudnorm
@@ -13,7 +13,7 @@ __getattr__, __dir__, __all__ = attach(
13
13
  "time",
14
14
  ],
15
15
  submod_attrs={
16
- "dnsmos": ['ComputeScore', 'main'],
16
+ "dnsmos": ['ComputeScore'],
17
17
  "lpc_lsp": ['framing', 'lpc_lsp_distance', 'lpc_to_lsp'],
18
18
  "snr": ['get_snr', 'get_snr_from_noisy', 'psnr', 'seg_snr', 'si_sdr'],
19
19
  "spec": ['lsd', 'mcd', 'sd'],
File without changes
@@ -0,0 +1,113 @@
1
+ # -*- coding:utf-8 -*-
2
+ # Author:凌逆战 | Never
3
+ # Date: 2024/6/14
4
+ """
5
+ babble噪声生成
6
+ """
7
+ import os
8
+ import torch
9
+ import random
10
+ import numpy as np
11
+ import soundfile as sf
12
+ import pickle
13
+
14
+ from neverlib.utils import get_path_list
15
+ from vad import EnergyVAD
16
+ from utils.audio_aug import volume_aug, add_reverb
17
+ from joblib import Parallel, delayed
18
+ from multiprocessing import Pool
19
+
20
+ vad = EnergyVAD(
21
+ sample_rate=16000,
22
+ frame_length=25, # in milliseconds
23
+ frame_shift=20, # in milliseconds
24
+ energy_threshold=0.05, # you may need to adjust this value
25
+ pre_emphasis=0.95,
26
+ ) # default values are used here
27
+
28
+
29
+ def get_one_babble(speech_path_list, rir_path_list):
30
+ sub_len = 0
31
+ sub_list = []
32
+ while sub_len < sentence_len:
33
+ speech_path = random.choice(speech_path_list)
34
+ rir_path = random.choice(rir_path_list)
35
+ # 加rir
36
+ with open(rir_path, 'rb') as f:
37
+ # arrayCoor (2,3) (num_mic, 3(x,y,z))
38
+ # sPos (4,3) (num_source, 3(x,y,z))
39
+ [arrayCoor, sPos, sAziPth, rir, L, rt, c, mtype, n, fs] = pickle.load(f)
40
+ rir = np.array(rir) # (souece, mic, T) (4, 3, 2668)
41
+ rir_idx = np.random.randint(0, rir.shape[0]) # 随机选择一个source
42
+ sPos = sPos[rir_idx] # (3,) (x,y,z)
43
+ DistMic2Source_1 = np.sqrt(np.sum((arrayCoor[0] - sPos) ** 2))
44
+ DistMic2Source_2 = np.sqrt(np.sum((arrayCoor[1] - sPos) ** 2))
45
+ if DistMic2Source_1 < 2 or DistMic2Source_2 < 2:
46
+ continue
47
+ rir = rir[rir_idx]
48
+
49
+ wav, _ = sf.read(speech_path, dtype='float32', always_2d=True)
50
+ assert wav.shape[-1] == 1, f"音频应该为单通道"
51
+ if len(wav) > sentence_len:
52
+ idx = random.randint(0, len(wav) - sentence_len)
53
+ wav = wav[idx:idx + sentence_len]
54
+
55
+ wav = wav / np.abs(wav).max() # 归一化
56
+ wav = vad.apply_vad(wav.T).T
57
+
58
+ wav = add_reverb(wav, rir, add_rir_ratio=1) # 双麦wav
59
+ # 音量增强
60
+ rms = np.sqrt(np.mean(wav ** 2))
61
+ wav *= random.uniform(0.5, 1.0) / rms
62
+
63
+ sub_len += len(wav)
64
+ sub_list.append(wav)
65
+
66
+ sub_babble = np.concatenate(sub_list, axis=0)
67
+ if sub_len >= sentence_len:
68
+ sub_babble = sub_babble[:sentence_len]
69
+ return sub_babble
70
+
71
+
72
+ def babble_noise_generate(i, speech_path_list, rir_path_list):
73
+ source_num = random.randint(15, 25)
74
+ babble_noise = np.zeros((sentence_len, 2))
75
+ for _ in range(source_num):
76
+ sub_babble = get_one_babble(speech_path_list, rir_path_list)
77
+ babble_noise += sub_babble
78
+
79
+ babble_path = os.path.join(target_dir, f"babble_noise_{i}.wav")
80
+ print(babble_path)
81
+ babble_noise = babble_noise / np.max(np.abs(babble_noise)) * 0.5
82
+ sf.write(babble_path, babble_noise, sr)
83
+
84
+
85
+ if __name__ == "__main__":
86
+ speech_dir = "/data/never/kws_data/BigDataset/speech"
87
+ rir_dir = "/data/never/RIR/2mic_Line_r50mm_fs16k_4source_t60mix08_maxdist8m_2w"
88
+ target_dir = "/data/never/SE_dataset/babble_noise10"
89
+ # if os.path.exists(target_dir):
90
+ # os.system(f"rm -rf {target_dir}")
91
+ # os.makedirs(target_dir, exist_ok=True)
92
+ # else:
93
+ # os.makedirs(target_dir, exist_ok=True)
94
+ speech_path_list = get_path_list(speech_dir, "*.wav")
95
+ rir_path_list = get_path_list(rir_dir, "*.rir")
96
+
97
+ sentence_num = 20000
98
+ sr = 16000
99
+ volume_range = [0.5, 1.0]
100
+ sentence_len = sr * 10
101
+ # for i in range(10):
102
+ # babble_noise_generate(i, speech_path_list, rir_path_list)
103
+
104
+ # 多核并行处理
105
+ # Parallel(n_jobs=-1)(delayed(babble_noise_generate)(i, speech_path_list, rir_path_list) for i in range(sentence_num))
106
+
107
+ pool = Pool(32) # 创建进程池, 一定要放在 事件函数之后, 不然会保错
108
+
109
+ for i in range(sentence_num):
110
+ r = pool.apply_async(func=babble_noise_generate, args=(i, speech_path_list, rir_path_list,))
111
+
112
+ pool.close() # 关闭进程池
113
+ pool.join() # 回收进程池
@@ -1 +1,16 @@
1
- # 测试包初始化文件
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
+ "test_imports",
9
+ "test_preprocess",
10
+ "test_vad",
11
+ ],
12
+ submod_attrs={
13
+ "test_preprocess": ['test_NS_shape', 'test_pre_emphasis'],
14
+ "test_vad": ['test_vad2nad'],
15
+ }
16
+ )
@@ -8,6 +8,8 @@ Description: 测试neverlib导入功能
8
8
  import sys
9
9
  import os
10
10
  import time
11
+ from neverlib.utils import get_path_list
12
+ from neverlib.data_analyze.dataset_analyzer import AudioFileInfo
11
13
 
12
14
  # 确保当前目录在Python路径中,以便导入neverlib
13
15
  # sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
@@ -0,0 +1,29 @@
1
+ prsync
2
+ 来源:https://github.com/nathanhaigh/parallel-rsync
3
+ 用法
4
+ 如果您的命令如下所示:rsync
5
+
6
+ ```bash
7
+ rsync \
8
+ --times --recursive --progress \
9
+ --exclude "raw_reads" --exclude ".snakemake" \
10
+ user@example.com:/my_remote_dir/ /my_local_dir/
11
+ ```
12
+ 只需替换此脚本的可执行文件:rsync
13
+ ```bash
14
+ ./prsync \
15
+ --times --recursive --progress \
16
+ --exclude "raw_reads" --exclude ".snakemake" \
17
+ user@example.com:/my_remote_dir/ /my_local_dir/
18
+ ```
19
+
20
+ 并行作业数
21
+ 默认情况下,脚本将为计算机上的每个处理器使用 1 个并行作业。 这是由确定的,如果失败,我们将回退到并行作业来传输文件。
22
+ 可以通过使用作为脚本的第一个命令行参数来覆盖此行为:```nproc 10 --parallel```
23
+ ```bash
24
+ ./prsync \
25
+ --parallel=20 \
26
+ --times --recursive --progress \
27
+ --exclude "raw_reads" --exclude ".snakemake" \
28
+ user@example.com:/my_remote_dir/ /my_local_dir/
29
+ ```
@@ -7,20 +7,21 @@ __getattr__, __dir__, __all__ = attach(
7
7
  submodules=[
8
8
  "audio_split",
9
9
  "checkGPU",
10
+ "floder",
10
11
  "lazy_expose",
11
12
  "lazy_module",
12
13
  "message",
14
+ "pcm",
13
15
  "utils",
14
16
  ],
15
17
  submod_attrs={
16
- "audio_split": ['audio_split_VADfunasr', 'audio_split_VADsilero', 'audio_split_ffmpeg',
17
- 'audio_split_np', 'audio_split_pydub', 'audio_split_random', 'audio_split_sox'],
18
- "checkGPU": ['get_gpu_utilization', 'is_gpu_idle', 'monitor_gpu_utilization'],
18
+ "audio_split": ['audio_split_VADfunasr', 'audio_split_VADsilero', 'audio_split_ffmpeg', 'audio_split_np', 'audio_split_pydub', 'audio_split_random', 'audio_split_sox'],
19
+ "checkGPU": ['get_gpu_utilization', 'get_gpu_utilization2', 'monitor_gpu_utilization'],
20
+ "floder": ['change_path', 'del_empty_folders', 'get_leaf_folders', 'rename_files_and_folders'],
19
21
  "lazy_expose": ['attach_and_expose_all'],
20
22
  "lazy_module": ['LazyModule'],
21
23
  "message": ['send_QQEmail', 'send_QQEmail_with_images'],
22
- "utils": ['EPS', 'DatasetSubfloderSplit', 'TrainValSplit', 'TrainValTestSplit', 'del_empty_folders',
23
- 'get_audio_segments', 'get_file_time', 'get_leaf_folders', 'get_path_list', 'pcm2wav',
24
- 'rename_files_and_folders', 'save_weight_histogram', 'wav2pcm'],
24
+ "pcm": ['pcm2wav', 'read_pcm', 'wav2pcm'],
25
+ "utils": ['DatasetSubfloderSplit', 'TrainValSplit', 'TrainValTestSplit', 'get_audio_segments', 'get_file_time', 'get_path_list', 'save_weight_histogram'],
25
26
  }
26
27
  )