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.
- neverlib/QA/ImpactNoiseRejection.py +119 -0
- neverlib/QA/gen_init.py +107 -6
- neverlib/QA/impact_noise_rejection.png +0 -0
- neverlib/QA/out.pcm +0 -0
- neverlib/QA/out.wav +0 -0
- neverlib/__init__.py +19 -0
- neverlib/audio_aug/README.md +3 -0
- neverlib/audio_aug/__init__.py +2 -4
- neverlib/filter/core.py +8 -5
- neverlib/metrics/README.md +35 -0
- neverlib/metrics/__init__.py +1 -1
- neverlib/metrics/pesq_c/PESQ +0 -0
- neverlib/signal_gen/babble_noise_generate.py +113 -0
- neverlib/tests/__init__.py +16 -1
- neverlib/tests/test_imports.py +2 -0
- neverlib/utils/README.md +29 -0
- neverlib/utils/__init__.py +7 -6
- neverlib/utils/audio_split.py +21 -20
- neverlib/utils/checkGPU.py +52 -79
- neverlib/utils/floder.py +115 -0
- neverlib/utils/pcm.py +42 -0
- neverlib/utils/utils.py +3 -77
- neverlib/vad/PreProcess.py +66 -66
- {neverlib-0.2.7.dist-info → neverlib-0.2.9.dist-info}/METADATA +15 -1
- neverlib-0.2.9.dist-info/RECORD +119 -0
- neverlib/.claude/settings.local.json +0 -9
- neverlib/.history/Docs/audio_aug/del_20250827162530.py +0 -0
- neverlib/.history/Docs/audio_aug/del_20250827162540.py +0 -2
- neverlib/.history/Docs/audio_aug/del_20250827162541.py +0 -7
- neverlib/.history/Docs/audio_aug/del_20250827162606.py +0 -7
- neverlib/.history/Docs/audio_aug/del_20250827162637.py +0 -8
- neverlib/.history/Docs/audio_aug/del_20250827162645.py +0 -8
- neverlib/.history/Docs/audio_aug/del_20250827162723.py +0 -9
- neverlib/.history/Docs/audio_aug/del_20250827162739.py +0 -9
- neverlib/.history/Docs/audio_aug/test_snr_20250806011311.py +0 -0
- neverlib/.history/Docs/audio_aug/test_snr_20250806011331.py +0 -75
- neverlib/.history/Docs/audio_aug/test_snr_20250806011342.py +0 -57
- neverlib/.history/Docs/audio_aug/test_snr_20250806011352.py +0 -57
- neverlib/.history/Docs/audio_aug/test_snr_20250806011403.py +0 -57
- neverlib/.history/Docs/audio_aug/test_snr_20250806011413.py +0 -57
- neverlib/.history/Docs/audio_aug/test_snr_20250806011435.py +0 -55
- neverlib/.history/Docs/audio_aug/test_snr_20250827161751.py +0 -55
- neverlib/.history/Docs/audio_aug/test_snr_20250827161754.py +0 -55
- neverlib/.history/Docs/audio_aug/test_snr_20250827161833.py +0 -54
- neverlib/.history/Docs/audio_aug/test_snr_20250827162017.py +0 -56
- neverlib/.history/Docs/audio_aug/test_snr_20250827162021.py +0 -57
- neverlib/.history/Docs/audio_aug/test_snr_20250827162028.py +0 -57
- neverlib/.history/Docs/audio_aug/test_snr_20250827162033.py +0 -55
- neverlib/.history/Docs/audio_aug_test/del_20250827162738.py +0 -9
- neverlib/.history/Docs/audio_aug_test/del_20250827162819.py +0 -9
- neverlib/.history/Docs/audio_aug_test/del_20250827162830.py +0 -9
- neverlib/.history/Docs/audio_aug_test/del_20250827162846.py +0 -9
- neverlib/.history/Docs/audio_aug_test/del_20250827162851.py +0 -9
- neverlib/.history/Docs/audio_aug_test/del_20250827162903.py +0 -10
- neverlib/.history/Docs/audio_aug_test/del_20250827162921.py +0 -10
- neverlib/.history/Docs/audio_aug_test/del_20250827162926.py +0 -10
- neverlib/.history/Docs/audio_aug_test/del_20250827163030.py +0 -10
- neverlib/.history/Docs/audio_aug_test/del_20250827163032.py +0 -10
- neverlib/.history/Docs/vad/1_20250810032405.py +0 -0
- neverlib/.history/Docs/vad/1_20250810032417.py +0 -39
- neverlib/.history/QA/html2markdown_20250822234112.md +0 -0
- neverlib/.history/QA/html2markdown_20250822234140.py +0 -9
- neverlib/.history/QA/html2markdown_20250822234141.md +0 -9
- neverlib/.history/QA/html2markdown_20250822234159.py +0 -12
- neverlib/.history/QA/html2markdown_20250822234200.py +0 -17
- neverlib/.history/QA/html2markdown_20250822234236.py +0 -17
- neverlib/.history/QA/html2markdown_20250822234340.py +0 -14
- neverlib/.history/QA/html2markdown_20250822234522.py +0 -18
- neverlib/.history/QA/html2markdown_20250822234601.py +0 -20
- neverlib/.history/QA/html2markdown_20250822234615.py +0 -22
- neverlib/.history/QA/html2markdown_20250822234715.py +0 -28
- neverlib/.history/QA/html2markdown_20250822234720.py +0 -27
- neverlib/.history/QA/html2markdown_20250822234903.py +0 -27
- neverlib/.history/__init___20250805234212.py +0 -41
- neverlib/.history/__init___20250904102635.py +0 -39
- neverlib/.history/__init___20250904102836.py +0 -34
- neverlib/.history/__init___20250904102838.py +0 -39
- neverlib/.history/__init___20250904102851.py +0 -33
- neverlib/.history/audio_aug/audio_aug_20250806010451.py +0 -125
- neverlib/.history/audio_aug/audio_aug_20250806010750.py +0 -138
- neverlib/.history/audio_aug/audio_aug_20250806010759.py +0 -140
- neverlib/.history/audio_aug/audio_aug_20250806010803.py +0 -140
- neverlib/.history/audio_aug/audio_aug_20250806010809.py +0 -140
- neverlib/.history/audio_aug/audio_aug_20250806011108.py +0 -140
- neverlib/.history/audio_aug/audio_aug_20250826155913.py +0 -158
- neverlib/.history/audio_aug/audio_aug_20250826164159.py +0 -159
- neverlib/.history/audio_aug/audio_aug_20250826164217.py +0 -160
- neverlib/.history/audio_aug/audio_aug_20250826164408.py +0 -161
- neverlib/.history/audio_aug/audio_aug_20250826164423.py +0 -161
- neverlib/.history/audio_aug/audio_aug_20250826164529.py +0 -161
- neverlib/.history/audio_aug/audio_aug_20250826164824.py +0 -161
- neverlib/.history/audio_aug/audio_aug_20250826164932.py +0 -162
- neverlib/.history/audio_aug/audio_aug_20250826164947.py +0 -162
- neverlib/.history/audio_aug/audio_aug_20250826165403.py +0 -162
- neverlib/.history/audio_aug/audio_aug_20250826165421.py +0 -162
- neverlib/.history/audio_aug/audio_aug_20250826165509.py +0 -163
- neverlib/.history/audio_aug/audio_aug_20250826165702.py +0 -163
- neverlib/.history/audio_aug/audio_aug_20250826165732.py +0 -165
- neverlib/.history/audio_aug/audio_aug_20250826170041.py +0 -163
- neverlib/.history/audio_aug/audio_aug_20250826170105.py +0 -164
- neverlib/.history/audio_aug/audio_aug_20250826170154.py +0 -164
- neverlib/.history/audio_aug/audio_aug_20250826170220.py +0 -165
- neverlib/.history/audio_aug/audio_aug_20250826170221.py +0 -165
- neverlib/.history/audio_aug/audio_aug_20250826170228.py +0 -165
- neverlib/.history/audio_aug/audio_aug_20250826170231.py +0 -165
- neverlib/.history/audio_aug/audio_aug_20250826212001.py +0 -165
- neverlib/.history/audio_aug/audio_aug_20250826220038.py +0 -165
- neverlib/.history/audio_aug/audio_aug_20250826220133.py +0 -165
- neverlib/.history/audio_aug/audio_aug_20250826220148.py +0 -165
- neverlib/.history/audio_aug/audio_aug_20250826220154.py +0 -165
- neverlib/.history/audio_aug/audio_aug_20250826220156.py +0 -165
- neverlib/.history/audio_aug/audio_aug_20250826220314.py +0 -165
- neverlib/.history/audio_aug/audio_aug_20250826220343.py +0 -184
- neverlib/.history/audio_aug/audio_aug_20250826220345.py +0 -184
- neverlib/.history/audio_aug/audio_aug_20250826220349.py +0 -184
- neverlib/.history/audio_aug/audio_aug_20250826220429.py +0 -184
- neverlib/.history/audio_aug/audio_aug_20250826220447.py +0 -184
- neverlib/.history/audio_aug/audio_aug_20250826220601.py +0 -186
- neverlib/.history/audio_aug/audio_aug_20250826220638.py +0 -186
- neverlib/.history/audio_aug/audio_aug_20250826220641.py +0 -186
- neverlib/.history/audio_aug/audio_aug_20250826220647.py +0 -186
- neverlib/.history/audio_aug/audio_aug_20250826220653.py +0 -186
- neverlib/.history/audio_aug/audio_aug_20250826220655.py +0 -186
- neverlib/.history/audio_aug/audio_aug_20250826220731.py +0 -185
- neverlib/.history/audio_aug/audio_aug_20250826220739.py +0 -185
- neverlib/.history/audio_aug/audio_aug_20250826220747.py +0 -185
- neverlib/.history/audio_aug/audio_aug_20250826220801.py +0 -186
- neverlib/.history/audio_aug/audio_aug_20250826220822.py +0 -186
- neverlib/.history/audio_aug/audio_aug_20250826220901.py +0 -186
- neverlib/.history/audio_aug/audio_aug_20250826221107.py +0 -187
- neverlib/.history/audio_aug/audio_aug_20250826221310.py +0 -188
- neverlib/.history/audio_aug/audio_aug_20250826221353.py +0 -191
- neverlib/.history/audio_aug/audio_aug_20250826221821.py +0 -191
- neverlib/.history/audio_aug/audio_aug_20250826221838.py +0 -191
- neverlib/.history/audio_aug/audio_aug_20250826221906.py +0 -191
- neverlib/.history/audio_aug/audio_aug_20250826221930.py +0 -191
- neverlib/.history/audio_aug/audio_aug_20250826221939.py +0 -191
- neverlib/.history/audio_aug/audio_aug_20250826221955.py +0 -191
- neverlib/.history/audio_aug/audio_aug_20250826222008.py +0 -197
- neverlib/.history/audio_aug/audio_aug_20250826222017.py +0 -200
- neverlib/.history/audio_aug/audio_aug_20250826222046.py +0 -203
- neverlib/.history/audio_aug/audio_aug_20250826222105.py +0 -203
- neverlib/.history/audio_aug/audio_aug_20250826222206.py +0 -203
- neverlib/.history/audio_aug/audio_aug_20250826222302.py +0 -203
- neverlib/.history/audio_aug/audio_aug_20250826222336.py +0 -203
- neverlib/.history/audio_aug/audio_aug_20250826222455.py +0 -204
- neverlib/.history/audio_aug/audio_aug_20250826222526.py +0 -204
- neverlib/.history/audio_aug/audio_aug_20250826222541.py +0 -204
- neverlib/.history/audio_aug/audio_aug_20250826222624.py +0 -202
- neverlib/.history/audio_aug/audio_aug_20250826222714.py +0 -205
- neverlib/.history/audio_aug/audio_aug_20250826222820.py +0 -205
- neverlib/.history/audio_aug/audio_aug_20250826222827.py +0 -205
- neverlib/.history/audio_aug/audio_aug_20250826222927.py +0 -232
- neverlib/.history/audio_aug/audio_aug_20250826223009.py +0 -232
- neverlib/.history/audio_aug/audio_aug_20250826223054.py +0 -232
- neverlib/.history/audio_aug/audio_aug_20250826223225.py +0 -233
- neverlib/.history/audio_aug/audio_aug_20250826223344.py +0 -236
- neverlib/.history/audio_aug/audio_aug_20250826223356.py +0 -236
- neverlib/.history/audio_aug/audio_aug_20250826223955.py +0 -242
- neverlib/.history/audio_aug/audio_aug_20250826224210.py +0 -240
- neverlib/.history/audio_aug/audio_aug_20250826224250.py +0 -242
- neverlib/.history/audio_aug/audio_aug_20250826224323.py +0 -280
- neverlib/.history/audio_aug/audio_aug_20250826224452.py +0 -263
- neverlib/.history/audio_aug/audio_aug_20250826224455.py +0 -263
- neverlib/.history/audio_aug/audio_aug_20250826224502.py +0 -263
- neverlib/.history/audio_aug/audio_aug_20250826224528.py +0 -263
- neverlib/.history/audio_aug/audio_aug_20250826224658.py +0 -263
- neverlib/.history/audio_aug/audio_aug_20250826224833.py +0 -264
- neverlib/.history/audio_aug/audio_aug_20250826225013.py +0 -269
- neverlib/.history/audio_aug/audio_aug_20250826225050.py +0 -269
- neverlib/.history/audio_aug/audio_aug_20250826225241.py +0 -268
- neverlib/.history/audio_aug/audio_aug_20250826225315.py +0 -266
- neverlib/.history/audio_aug/audio_aug_20250826225404.py +0 -266
- neverlib/.history/audio_aug/audio_aug_20250826225502.py +0 -265
- neverlib/.history/audio_aug/audio_aug_20250826225950.py +0 -267
- neverlib/.history/audio_aug/audio_aug_20250826225959.py +0 -268
- neverlib/.history/audio_aug/audio_aug_20250826230222.py +0 -271
- neverlib/.history/audio_aug/audio_aug_20250826230248.py +0 -270
- neverlib/.history/audio_aug/audio_aug_20250826230638.py +0 -266
- neverlib/.history/audio_aug/audio_aug_20250826230755.py +0 -266
- neverlib/.history/audio_aug/audio_aug_20250826230941.py +0 -265
- neverlib/.history/audio_aug/audio_aug_20250826231054.py +0 -266
- neverlib/.history/audio_aug/audio_aug_20250826231117.py +0 -266
- neverlib/.history/audio_aug/audio_aug_20250826231219.py +0 -266
- neverlib/.history/audio_aug/audio_aug_20250826232330.py +0 -266
- neverlib/.history/audio_aug/audio_aug_20250826232352.py +0 -266
- neverlib/.history/audio_aug/audio_aug_20250827152748.py +0 -268
- neverlib/.history/audio_aug/audio_aug_20250827152806.py +0 -268
- neverlib/.history/audio_aug/audio_aug_20250827152808.py +0 -268
- neverlib/.history/audio_aug/audio_aug_20250827152917.py +0 -283
- neverlib/.history/audio_aug/audio_aug_20250827152929.py +0 -281
- neverlib/.history/audio_aug/audio_aug_20250827153100.py +0 -286
- neverlib/.history/audio_aug/audio_aug_20250827153102.py +0 -286
- neverlib/.history/audio_aug/audio_aug_20250827153301.py +0 -295
- neverlib/.history/audio_aug/audio_aug_20250827153331.py +0 -298
- neverlib/.history/audio_aug/audio_aug_20250827153525.py +0 -303
- neverlib/.history/audio_aug/audio_aug_20250827153533.py +0 -304
- neverlib/.history/audio_aug/audio_aug_20250827153541.py +0 -321
- neverlib/.history/audio_aug/audio_aug_20250827153805.py +0 -322
- neverlib/.history/audio_aug/audio_aug_20250827153832.py +0 -323
- neverlib/.history/audio_aug/audio_aug_20250827153836.py +0 -324
- neverlib/.history/audio_aug/audio_aug_20250827153846.py +0 -324
- neverlib/.history/audio_aug/audio_aug_20250827153859.py +0 -325
- neverlib/.history/audio_aug/audio_aug_20250827154453.py +0 -337
- neverlib/.history/audio_aug/audio_aug_20250827154513.py +0 -355
- neverlib/.history/audio_aug/audio_aug_20250827154538.py +0 -356
- neverlib/.history/audio_aug/audio_aug_20250827154541.py +0 -357
- neverlib/.history/audio_aug/audio_aug_20250827154612.py +0 -357
- neverlib/.history/audio_aug/audio_aug_20250827154657.py +0 -360
- neverlib/.history/audio_aug/audio_aug_20250827154708.py +0 -360
- neverlib/.history/audio_aug/audio_aug_20250827154728.py +0 -366
- neverlib/.history/audio_aug/audio_aug_20250827154755.py +0 -367
- neverlib/.history/audio_aug/audio_aug_20250827154800.py +0 -367
- neverlib/.history/audio_aug/audio_aug_20250827154917.py +0 -368
- neverlib/.history/audio_aug/audio_aug_20250827154928.py +0 -369
- neverlib/.history/audio_aug/audio_aug_20250827154932.py +0 -370
- neverlib/.history/audio_aug/audio_aug_20250827154947.py +0 -372
- neverlib/.history/audio_aug/audio_aug_20250827155015.py +0 -375
- neverlib/.history/audio_aug/audio_aug_20250827155106.py +0 -375
- neverlib/.history/audio_aug/audio_aug_20250827155114.py +0 -393
- neverlib/.history/audio_aug/audio_aug_20250827155207.py +0 -415
- neverlib/.history/audio_aug/audio_aug_20250827155300.py +0 -415
- neverlib/.history/audio_aug/audio_aug_20250827155321.py +0 -471
- neverlib/.history/audio_aug/audio_aug_20250827164703.py +0 -471
- neverlib/.history/audio_aug/audio_aug_20250827164749.py +0 -471
- neverlib/.history/audio_aug/audio_aug_20250827165252.py +0 -472
- neverlib/.history/audio_aug/audio_aug_20250827165334.py +0 -472
- neverlib/.history/audio_aug/audio_aug_20250827165404.py +0 -473
- neverlib/.history/audio_aug/audio_aug_20250827165610.py +0 -473
- neverlib/.history/audio_aug/audio_aug_20250827165805.py +0 -473
- neverlib/.history/audio_aug/audio_aug_20250827170056.py +0 -473
- neverlib/.history/audio_aug/audio_aug_20250827170106.py +0 -472
- neverlib/.history/audio_aug/audio_aug_20250827170143.py +0 -472
- neverlib/.history/audio_aug/audio_aug_20250827170216.py +0 -472
- neverlib/.history/audio_aug/audio_aug_20250827170218.py +0 -472
- neverlib/.history/audio_aug/audio_aug_20250827170314.py +0 -472
- neverlib/.history/audio_aug/audio_aug_20250827171500.py +0 -471
- neverlib/.history/audio_aug/audio_aug_20250827172347.py +0 -471
- neverlib/.history/audio_aug/audio_aug_20250827172558.py +0 -470
- neverlib/.history/audio_aug/audio_aug_20250827172559.py +0 -470
- neverlib/.history/audio_aug/audio_aug_20250827172801.py +0 -470
- neverlib/.history/audio_aug/audio_aug_20250827182522.py +0 -470
- neverlib/.history/audio_aug/audio_aug_20250827182526.py +0 -470
- neverlib/.history/audio_aug/audio_aug_20250827182626.py +0 -470
- neverlib/.history/audio_aug/audio_aug_20250827182715.py +0 -470
- neverlib/.history/audio_aug/audio_aug_20250904185444.py +0 -470
- neverlib/.history/audio_aug/audio_aug_20250904185538.py +0 -445
- neverlib/.history/dataAnalyze/__init___20250805234204.py +0 -87
- neverlib/.history/dataAnalyze/__init___20250806204125.py +0 -14
- neverlib/.history/dataAnalyze/__init___20250806204139.py +0 -14
- neverlib/.history/dataAnalyze/__init___20250806204159.py +0 -14
- neverlib/.history/data_analyze/__init___20250806204158.py +0 -14
- neverlib/.history/data_analyze/__init___20250827163248.py +0 -14
- neverlib/.history/filter/__init___20250820103351.py +0 -70
- neverlib/.history/filter/__init___20250821102348.py +0 -70
- neverlib/.history/filter/__init___20250821102405.py +0 -14
- neverlib/.history/filter/auto_eq/__init___20250819213121.py +0 -36
- neverlib/.history/filter/auto_eq/__init___20250821102241.py +0 -36
- neverlib/.history/filter/auto_eq/__init___20250821102259.py +0 -36
- neverlib/.history/filter/auto_eq/__init___20250821102307.py +0 -36
- neverlib/.history/filter/auto_eq/__init___20250821102310.py +0 -36
- neverlib/.history/filter/auto_eq/__init___20250821102318.py +0 -36
- neverlib/.history/filter/auto_eq/__init___20250821102507.py +0 -36
- neverlib/.history/filter/auto_eq/de_eq_20250820103848.py +0 -361
- neverlib/.history/filter/auto_eq/de_eq_20250821102422.py +0 -360
- neverlib/.history/filter/auto_eq/freq_eq_20250805234206.py +0 -75
- neverlib/.history/filter/auto_eq/freq_eq_20250820140732.py +0 -75
- neverlib/.history/filter/auto_eq/freq_eq_20250820140745.py +0 -75
- neverlib/.history/filter/auto_eq/freq_eq_20250820140816.py +0 -75
- neverlib/.history/filter/auto_eq/freq_eq_20250820140938.py +0 -77
- neverlib/.history/filter/auto_eq/freq_eq_20250820141003.py +0 -77
- neverlib/.history/filter/auto_eq/freq_eq_20250820141006.py +0 -77
- neverlib/.history/filter/auto_eq/freq_eq_20250820141019.py +0 -77
- neverlib/.history/filter/auto_eq/freq_eq_20250820141049.py +0 -77
- neverlib/.history/filter/auto_eq/freq_eq_20250820141211.py +0 -77
- neverlib/.history/filter/auto_eq/freq_eq_20250820141227.py +0 -77
- neverlib/.history/filter/auto_eq/freq_eq_20250820141311.py +0 -78
- neverlib/.history/filter/auto_eq/freq_eq_20250820141340.py +0 -78
- neverlib/.history/filter/auto_eq/freq_eq_20250820141712.py +0 -78
- neverlib/.history/filter/auto_eq/freq_eq_20250820141733.py +0 -78
- neverlib/.history/filter/auto_eq/freq_eq_20250820141755.py +0 -78
- neverlib/.history/filter/auto_eq/freq_eq_20250821102434.py +0 -76
- neverlib/.history/filter/auto_eq/freq_eq_20250821102500.py +0 -76
- neverlib/.history/filter/auto_eq/freq_eq_20250821102502.py +0 -76
- neverlib/.history/filter/auto_eq/freq_eq_20250821143140.py +0 -76
- neverlib/.history/filter/auto_eq/freq_eq_20250821153208.py +0 -76
- neverlib/.history/filter/auto_eq/freq_eq_20250821153214.py +0 -76
- neverlib/.history/filter/auto_eq/ga_eq_basic_20250820102957.py +0 -380
- neverlib/.history/filter/auto_eq/ga_eq_basic_20250820113054.py +0 -380
- neverlib/.history/filter/auto_eq/ga_eq_basic_20250820113150.py +0 -380
- neverlib/.history/filter/auto_eq/ga_eq_basic_20250820113520.py +0 -385
- neverlib/.history/filter/auto_eq/ga_eq_basic_20250820113525.py +0 -385
- neverlib/.history/filter/auto_eq/ga_eq_basic_20250821102212.py +0 -385
- neverlib/.history/filter/auto_eq/ga_eq_basic_20250901110521.py +0 -385
- neverlib/.history/filter/auto_eq/ga_eq_basic_20250901110652.py +0 -385
- neverlib/.history/filter/common_20250806002134.py +0 -37
- neverlib/.history/filter/common_20250821120448.py +0 -49
- neverlib/.history/filter/common_20250821120453.py +0 -49
- neverlib/.history/metrics/dnsmos_20250806001612.py +0 -160
- neverlib/.history/metrics/dnsmos_20250815180659.py +0 -160
- neverlib/.history/metrics/dnsmos_20250815180701.py +0 -158
- neverlib/.history/metrics/dnsmos_20250815181321.py +0 -154
- neverlib/.history/metrics/dnsmos_20250815181327.py +0 -154
- neverlib/.history/metrics/dnsmos_20250815181331.py +0 -154
- neverlib/.history/metrics/dnsmos_20250815181620.py +0 -154
- neverlib/.history/metrics/dnsmos_20250815181631.py +0 -154
- neverlib/.history/metrics/dnsmos_20250815181742.py +0 -154
- neverlib/.history/metrics/dnsmos_20250815181824.py +0 -153
- neverlib/.history/metrics/dnsmos_20250815181834.py +0 -153
- neverlib/.history/metrics/dnsmos_20250815181922.py +0 -153
- neverlib/.history/metrics/dnsmos_20250815182011.py +0 -147
- neverlib/.history/metrics/dnsmos_20250815182036.py +0 -144
- neverlib/.history/metrics/dnsmos_20250815182936.py +0 -143
- neverlib/.history/metrics/dnsmos_20250815182942.py +0 -143
- neverlib/.history/metrics/dnsmos_20250815183032.py +0 -137
- neverlib/.history/metrics/dnsmos_20250815183101.py +0 -144
- neverlib/.history/metrics/dnsmos_20250815183121.py +0 -144
- neverlib/.history/metrics/dnsmos_20250815183123.py +0 -143
- neverlib/.history/metrics/dnsmos_20250815183214.py +0 -143
- neverlib/.history/metrics/dnsmos_20250815183240.py +0 -143
- neverlib/.history/metrics/dnsmos_20250815183248.py +0 -144
- neverlib/.history/metrics/dnsmos_20250815183407.py +0 -142
- neverlib/.history/metrics/dnsmos_20250815183409.py +0 -142
- neverlib/.history/metrics/dnsmos_20250815183431.py +0 -142
- neverlib/.history/metrics/dnsmos_20250815183507.py +0 -140
- neverlib/.history/metrics/dnsmos_20250815183513.py +0 -139
- neverlib/.history/metrics/dnsmos_20250815183618.py +0 -139
- neverlib/.history/metrics/dnsmos_20250815183709.py +0 -140
- neverlib/.history/metrics/dnsmos_20250815183756.py +0 -137
- neverlib/.history/metrics/dnsmos_20250815183815.py +0 -128
- neverlib/.history/metrics/dnsmos_20250815183827.py +0 -129
- neverlib/.history/metrics/dnsmos_20250815183913.py +0 -117
- neverlib/.history/metrics/dnsmos_20250815183914.py +0 -117
- neverlib/.history/metrics/dnsmos_20250815184003.py +0 -118
- neverlib/.history/metrics/dnsmos_20250815184040.py +0 -118
- neverlib/.history/metrics/dnsmos_20250815184049.py +0 -118
- neverlib/.history/metrics/dnsmos_20250815184104.py +0 -117
- neverlib/.history/metrics/dnsmos_20250815184200.py +0 -117
- neverlib/.history/metrics/lpc_lsp_metric_20250816015944.py +0 -128
- neverlib/.history/metrics/lpc_lsp_metric_20250816020142.py +0 -128
- neverlib/.history/metrics/lpc_lsp_metric_20250816020156.py +0 -128
- neverlib/.history/metrics/lpc_lsp_metric_20250816020554.py +0 -130
- neverlib/.history/metrics/lpc_lsp_metric_20250816020600.py +0 -125
- neverlib/.history/metrics/lpc_lsp_metric_20250816020631.py +0 -120
- neverlib/.history/metrics/lpc_lsp_metric_20250816020746.py +0 -118
- neverlib/.history/metrics/lpc_me_20250816013111.py +0 -0
- neverlib/.history/metrics/lpc_me_20250816013129.py +0 -121
- neverlib/.history/metrics/lpc_me_20250816015430.py +0 -103
- neverlib/.history/metrics/lpc_me_20250816015535.py +0 -96
- neverlib/.history/metrics/lpc_me_20250816015542.py +0 -96
- neverlib/.history/metrics/lpc_me_20250816015636.py +0 -97
- neverlib/.history/metrics/lpc_me_20250816015658.py +0 -104
- neverlib/.history/metrics/lpc_me_20250816015703.py +0 -100
- neverlib/.history/metrics/lpc_me_20250816015945.py +0 -128
- neverlib/.history/metrics/snr_20250806010538.py +0 -177
- neverlib/.history/metrics/snr_20250806211634.py +0 -184
- neverlib/.history/metrics/snr_20250827224201.py +0 -182
- neverlib/.history/metrics/snr_20250827234019.py +0 -186
- neverlib/.history/metrics/snr_20250827234028.py +0 -186
- neverlib/.history/metrics/snr_20250827234030.py +0 -186
- neverlib/.history/metrics/spec_20250805234209.py +0 -45
- neverlib/.history/metrics/spec_20250816135530.py +0 -11
- neverlib/.history/metrics/spec_20250816135654.py +0 -16
- neverlib/.history/metrics/spec_20250816135736.py +0 -68
- neverlib/.history/metrics/spec_20250816135904.py +0 -75
- neverlib/.history/metrics/spec_20250816135921.py +0 -82
- neverlib/.history/metrics/spec_20250816140111.py +0 -82
- neverlib/.history/metrics/spec_20250816140543.py +0 -136
- neverlib/.history/metrics/spec_20250816140559.py +0 -172
- neverlib/.history/metrics/spec_20250816140602.py +0 -172
- neverlib/.history/metrics/spec_20250816140608.py +0 -172
- neverlib/.history/metrics/spec_20250816140654.py +0 -148
- neverlib/.history/metrics/spec_20250816140705.py +0 -144
- neverlib/.history/metrics/spec_20250816140755.py +0 -138
- neverlib/.history/metrics/spec_20250816140823.py +0 -170
- neverlib/.history/metrics/spec_20250816140832.py +0 -170
- neverlib/.history/metrics/spec_20250816140833.py +0 -170
- neverlib/.history/metrics/spec_20250816140922.py +0 -147
- neverlib/.history/metrics/spec_20250816141148.py +0 -107
- neverlib/.history/metrics/spec_20250816141219.py +0 -123
- neverlib/.history/metrics/spec_20250816141732.py +0 -178
- neverlib/.history/metrics/spec_20250816141740.py +0 -178
- neverlib/.history/metrics/spec_20250816142030.py +0 -178
- neverlib/.history/metrics/spec_20250816142107.py +0 -135
- neverlib/.history/metrics/spec_20250816142126.py +0 -135
- neverlib/.history/metrics/spec_20250816142410.py +0 -135
- neverlib/.history/metrics/spec_20250816142415.py +0 -136
- neverlib/.history/metrics/spec_metric_20250816135156.py +0 -0
- neverlib/.history/metrics/spec_metric_20250816135226.py +0 -5
- neverlib/.history/metrics/spec_metric_20250816135227.py +0 -10
- neverlib/.history/metrics/spec_metric_20250816135306.py +0 -15
- neverlib/.history/metrics/spec_metric_20250816135442.py +0 -31
- neverlib/.history/metrics/spec_metric_20250816135448.py +0 -31
- neverlib/.history/metrics/spec_metric_20250816135520.py +0 -29
- neverlib/.history/metrics/spec_metric_20250816135537.py +0 -63
- neverlib/.history/metrics/spec_metric_20250816135653.py +0 -65
- neverlib/.history/utils/audio_split_20250805234209.py +0 -268
- neverlib/.history/utils/audio_split_20250904185309.py +0 -268
- neverlib/.history/utils/utils_20250813165516.py +0 -330
- neverlib/.history/utils/utils_20250904181341.py +0 -328
- neverlib/.history/utils/utils_20250904185546.py +0 -352
- neverlib/.history/utils/utils_20250904185548.py +0 -353
- neverlib/.history/utils/utils_20250904185603.py +0 -353
- neverlib/.history/utils/utils_20250904185636.py +0 -353
- neverlib/.history/utils/utils_20250904185658.py +0 -358
- neverlib/.history/utils/utils_20250904190053.py +0 -359
- neverlib/.history/vad/PreProcess_20250805234211.py +0 -63
- neverlib/.history/vad/PreProcess_20250809232455.py +0 -63
- neverlib/.history/vad/PreProcess_20250816020725.py +0 -66
- neverlib/.history/vad/VAD_Silero_20250805234211.py +0 -50
- neverlib/.history/vad/VAD_Silero_20250809232456.py +0 -50
- neverlib/.history/vad/VAD_WebRTC_20250805234211.py +0 -61
- neverlib/.history/vad/VAD_WebRTC_20250809232456.py +0 -61
- neverlib/.history/vad/VAD_funasr_20250805234211.py +0 -54
- neverlib/.history/vad/VAD_funasr_20250809232456.py +0 -54
- neverlib/.history/vad/VAD_vadlib_20250805234211.py +0 -70
- neverlib/.history/vad/VAD_vadlib_20250809232455.py +0 -70
- neverlib/.history/vad/VAD_whisper_20250805234211.py +0 -55
- neverlib/.history/vad/VAD_whisper_20250809232456.py +0 -55
- neverlib/.specstory/.what-is-this.md +0 -69
- 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
- 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
- neverlib/.specstory/history/2025-08-26_11-54Z-oserror-missing-shared-object-file.md +0 -87
- 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
- neverlib/.specstory/history/2025-08-27_08-29Z-delete-python-file-command.md +0 -211
- 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
- neverlib-0.2.7.dist-info/RECORD +0 -510
- {neverlib-0.2.7.dist-info → neverlib-0.2.9.dist-info}/WHEEL +0 -0
- {neverlib-0.2.7.dist-info → neverlib-0.2.9.dist-info}/licenses/LICENSE +0 -0
- {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
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
+
]
|
neverlib/audio_aug/__init__.py
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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
|
neverlib/metrics/__init__.py
CHANGED
|
@@ -13,7 +13,7 @@ __getattr__, __dir__, __all__ = attach(
|
|
|
13
13
|
"time",
|
|
14
14
|
],
|
|
15
15
|
submod_attrs={
|
|
16
|
-
"dnsmos": ['ComputeScore'
|
|
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'],
|
neverlib/metrics/pesq_c/PESQ
CHANGED
|
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() # 回收进程池
|
neverlib/tests/__init__.py
CHANGED
|
@@ -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
|
+
)
|
neverlib/tests/test_imports.py
CHANGED
|
@@ -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__))))
|
neverlib/utils/README.md
ADDED
|
@@ -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
|
+
```
|
neverlib/utils/__init__.py
CHANGED
|
@@ -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
|
-
|
|
18
|
-
"
|
|
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
|
-
"
|
|
23
|
-
|
|
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
|
)
|