neverlib 0.2.4__py3-none-any.whl → 0.2.6__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/.history/Docs/audio_aug/del_20250827162530.py +0 -0
- neverlib/.history/Docs/audio_aug/del_20250827162540.py +2 -0
- neverlib/.history/Docs/audio_aug/del_20250827162541.py +7 -0
- neverlib/.history/Docs/audio_aug/del_20250827162606.py +7 -0
- neverlib/.history/Docs/audio_aug/del_20250827162637.py +8 -0
- neverlib/.history/Docs/audio_aug/del_20250827162645.py +8 -0
- neverlib/.history/Docs/audio_aug/del_20250827162723.py +9 -0
- neverlib/.history/Docs/audio_aug/del_20250827162739.py +9 -0
- neverlib/.history/Docs/audio_aug/test_snr_20250827161751.py +55 -0
- neverlib/.history/Docs/audio_aug/test_snr_20250827161754.py +55 -0
- neverlib/.history/Docs/audio_aug/test_snr_20250827161833.py +54 -0
- neverlib/.history/Docs/audio_aug/test_snr_20250827162017.py +56 -0
- neverlib/.history/Docs/audio_aug/test_snr_20250827162021.py +57 -0
- neverlib/.history/Docs/audio_aug/test_snr_20250827162028.py +57 -0
- neverlib/.history/Docs/audio_aug_test/del_20250827162738.py +9 -0
- neverlib/.history/Docs/audio_aug_test/del_20250827162819.py +9 -0
- neverlib/.history/Docs/audio_aug_test/del_20250827162830.py +9 -0
- neverlib/.history/Docs/audio_aug_test/del_20250827162846.py +9 -0
- neverlib/.history/Docs/audio_aug_test/del_20250827162851.py +9 -0
- neverlib/.history/Docs/audio_aug_test/del_20250827162903.py +10 -0
- neverlib/.history/Docs/audio_aug_test/del_20250827162921.py +10 -0
- neverlib/.history/Docs/audio_aug_test/del_20250827162926.py +10 -0
- neverlib/.history/Docs/audio_aug_test/del_20250827163030.py +10 -0
- neverlib/.history/Docs/audio_aug_test/del_20250827163032.py +10 -0
- neverlib/.history/QA/html2markdown_20250822234112.md +0 -0
- neverlib/.history/QA/html2markdown_20250822234140.py +9 -0
- neverlib/.history/QA/html2markdown_20250822234141.md +9 -0
- neverlib/.history/QA/html2markdown_20250822234159.py +12 -0
- neverlib/.history/QA/html2markdown_20250822234200.py +17 -0
- neverlib/.history/QA/html2markdown_20250822234236.py +17 -0
- neverlib/.history/QA/html2markdown_20250822234340.py +14 -0
- neverlib/.history/QA/html2markdown_20250822234522.py +18 -0
- neverlib/.history/QA/html2markdown_20250822234601.py +20 -0
- neverlib/.history/QA/html2markdown_20250822234615.py +22 -0
- neverlib/.history/QA/html2markdown_20250822234715.py +28 -0
- neverlib/.history/QA/html2markdown_20250822234720.py +27 -0
- neverlib/.history/QA/html2markdown_20250822234903.py +27 -0
- neverlib/.history/__init___20250805234212.py +41 -0
- neverlib/.history/__init___20250904102635.py +39 -0
- neverlib/.history/__init___20250904102836.py +34 -0
- neverlib/.history/__init___20250904102838.py +39 -0
- neverlib/.history/__init___20250904102851.py +33 -0
- neverlib/.history/audio_aug/audio_aug_20250826155913.py +158 -0
- neverlib/.history/audio_aug/audio_aug_20250826164159.py +159 -0
- neverlib/.history/audio_aug/audio_aug_20250826164217.py +160 -0
- neverlib/.history/audio_aug/audio_aug_20250826164408.py +161 -0
- neverlib/.history/audio_aug/audio_aug_20250826164423.py +161 -0
- neverlib/.history/audio_aug/audio_aug_20250826164529.py +161 -0
- neverlib/.history/audio_aug/audio_aug_20250826164824.py +161 -0
- neverlib/.history/audio_aug/audio_aug_20250826164932.py +162 -0
- neverlib/.history/audio_aug/audio_aug_20250826164947.py +162 -0
- neverlib/.history/audio_aug/audio_aug_20250826165403.py +162 -0
- neverlib/.history/audio_aug/audio_aug_20250826165421.py +162 -0
- neverlib/.history/audio_aug/audio_aug_20250826165509.py +163 -0
- neverlib/.history/audio_aug/audio_aug_20250826165702.py +163 -0
- neverlib/.history/audio_aug/audio_aug_20250826165732.py +165 -0
- neverlib/.history/audio_aug/audio_aug_20250826170041.py +163 -0
- neverlib/.history/audio_aug/audio_aug_20250826170105.py +164 -0
- neverlib/.history/audio_aug/audio_aug_20250826170154.py +164 -0
- neverlib/.history/audio_aug/audio_aug_20250826170220.py +165 -0
- neverlib/.history/audio_aug/audio_aug_20250826170221.py +165 -0
- neverlib/.history/audio_aug/audio_aug_20250826170228.py +165 -0
- neverlib/.history/audio_aug/audio_aug_20250826170231.py +165 -0
- neverlib/.history/audio_aug/audio_aug_20250826212001.py +165 -0
- neverlib/.history/audio_aug/audio_aug_20250826220038.py +165 -0
- neverlib/.history/audio_aug/audio_aug_20250826220133.py +165 -0
- neverlib/.history/audio_aug/audio_aug_20250826220148.py +165 -0
- neverlib/.history/audio_aug/audio_aug_20250826220154.py +165 -0
- neverlib/.history/audio_aug/audio_aug_20250826220156.py +165 -0
- neverlib/.history/audio_aug/audio_aug_20250826220314.py +165 -0
- neverlib/.history/audio_aug/audio_aug_20250826220343.py +184 -0
- neverlib/.history/audio_aug/audio_aug_20250826220345.py +184 -0
- neverlib/.history/audio_aug/audio_aug_20250826220349.py +184 -0
- neverlib/.history/audio_aug/audio_aug_20250826220429.py +184 -0
- neverlib/.history/audio_aug/audio_aug_20250826220447.py +184 -0
- neverlib/.history/audio_aug/audio_aug_20250826220601.py +186 -0
- neverlib/.history/audio_aug/audio_aug_20250826220638.py +186 -0
- neverlib/.history/audio_aug/audio_aug_20250826220641.py +186 -0
- neverlib/.history/audio_aug/audio_aug_20250826220647.py +186 -0
- neverlib/.history/audio_aug/audio_aug_20250826220653.py +186 -0
- neverlib/.history/audio_aug/audio_aug_20250826220655.py +186 -0
- neverlib/.history/audio_aug/audio_aug_20250826220731.py +185 -0
- neverlib/.history/audio_aug/audio_aug_20250826220739.py +185 -0
- neverlib/.history/audio_aug/audio_aug_20250826220747.py +185 -0
- neverlib/.history/audio_aug/audio_aug_20250826220801.py +186 -0
- neverlib/.history/audio_aug/audio_aug_20250826220822.py +186 -0
- neverlib/.history/audio_aug/audio_aug_20250826220901.py +186 -0
- neverlib/.history/audio_aug/audio_aug_20250826221107.py +187 -0
- neverlib/.history/audio_aug/audio_aug_20250826221310.py +188 -0
- neverlib/.history/audio_aug/audio_aug_20250826221353.py +191 -0
- neverlib/.history/audio_aug/audio_aug_20250826221821.py +191 -0
- neverlib/.history/audio_aug/audio_aug_20250826221838.py +191 -0
- neverlib/.history/audio_aug/audio_aug_20250826221906.py +191 -0
- neverlib/.history/audio_aug/audio_aug_20250826221930.py +191 -0
- neverlib/.history/audio_aug/audio_aug_20250826221939.py +191 -0
- neverlib/.history/audio_aug/audio_aug_20250826221955.py +191 -0
- neverlib/.history/audio_aug/audio_aug_20250826222008.py +197 -0
- neverlib/.history/audio_aug/audio_aug_20250826222017.py +200 -0
- neverlib/.history/audio_aug/audio_aug_20250826222046.py +203 -0
- neverlib/.history/audio_aug/audio_aug_20250826222105.py +203 -0
- neverlib/.history/audio_aug/audio_aug_20250826222206.py +203 -0
- neverlib/.history/audio_aug/audio_aug_20250826222302.py +203 -0
- neverlib/.history/audio_aug/audio_aug_20250826222336.py +203 -0
- neverlib/.history/audio_aug/audio_aug_20250826222455.py +204 -0
- neverlib/.history/audio_aug/audio_aug_20250826222526.py +204 -0
- neverlib/.history/audio_aug/audio_aug_20250826222541.py +204 -0
- neverlib/.history/audio_aug/audio_aug_20250826222624.py +202 -0
- neverlib/.history/audio_aug/audio_aug_20250826222714.py +205 -0
- neverlib/.history/audio_aug/audio_aug_20250826222820.py +205 -0
- neverlib/.history/audio_aug/audio_aug_20250826222827.py +205 -0
- neverlib/.history/audio_aug/audio_aug_20250826222927.py +232 -0
- neverlib/.history/audio_aug/audio_aug_20250826223009.py +232 -0
- neverlib/.history/audio_aug/audio_aug_20250826223054.py +232 -0
- neverlib/.history/audio_aug/audio_aug_20250826223225.py +233 -0
- neverlib/.history/audio_aug/audio_aug_20250826223344.py +236 -0
- neverlib/.history/audio_aug/audio_aug_20250826223356.py +236 -0
- neverlib/.history/audio_aug/audio_aug_20250826223955.py +242 -0
- neverlib/.history/audio_aug/audio_aug_20250826224210.py +240 -0
- neverlib/.history/audio_aug/audio_aug_20250826224250.py +242 -0
- neverlib/.history/audio_aug/audio_aug_20250826224323.py +280 -0
- neverlib/.history/audio_aug/audio_aug_20250826224452.py +263 -0
- neverlib/.history/audio_aug/audio_aug_20250826224455.py +263 -0
- neverlib/.history/audio_aug/audio_aug_20250826224502.py +263 -0
- neverlib/.history/audio_aug/audio_aug_20250826224528.py +263 -0
- neverlib/.history/audio_aug/audio_aug_20250826224658.py +263 -0
- neverlib/.history/audio_aug/audio_aug_20250826224833.py +264 -0
- neverlib/.history/audio_aug/audio_aug_20250826225013.py +269 -0
- neverlib/.history/audio_aug/audio_aug_20250826225050.py +269 -0
- neverlib/.history/audio_aug/audio_aug_20250826225241.py +268 -0
- neverlib/.history/audio_aug/audio_aug_20250826225315.py +266 -0
- neverlib/.history/audio_aug/audio_aug_20250826225404.py +266 -0
- neverlib/.history/audio_aug/audio_aug_20250826225502.py +265 -0
- neverlib/.history/audio_aug/audio_aug_20250826225950.py +267 -0
- neverlib/.history/audio_aug/audio_aug_20250826225959.py +268 -0
- neverlib/.history/audio_aug/audio_aug_20250826230222.py +271 -0
- neverlib/.history/audio_aug/audio_aug_20250826230248.py +270 -0
- neverlib/.history/audio_aug/audio_aug_20250826230638.py +266 -0
- neverlib/.history/audio_aug/audio_aug_20250826230755.py +266 -0
- neverlib/.history/audio_aug/audio_aug_20250826230941.py +265 -0
- neverlib/.history/audio_aug/audio_aug_20250826231054.py +266 -0
- neverlib/.history/audio_aug/audio_aug_20250826231117.py +266 -0
- neverlib/.history/audio_aug/audio_aug_20250826231219.py +266 -0
- neverlib/.history/audio_aug/audio_aug_20250826232330.py +266 -0
- neverlib/.history/audio_aug/audio_aug_20250826232352.py +266 -0
- neverlib/.history/audio_aug/audio_aug_20250827152748.py +268 -0
- neverlib/.history/audio_aug/audio_aug_20250827152806.py +268 -0
- neverlib/.history/audio_aug/audio_aug_20250827152808.py +268 -0
- neverlib/.history/audio_aug/audio_aug_20250827152917.py +283 -0
- neverlib/.history/audio_aug/audio_aug_20250827152929.py +281 -0
- neverlib/.history/audio_aug/audio_aug_20250827153100.py +286 -0
- neverlib/.history/audio_aug/audio_aug_20250827153102.py +286 -0
- neverlib/.history/audio_aug/audio_aug_20250827153301.py +295 -0
- neverlib/.history/audio_aug/audio_aug_20250827153331.py +298 -0
- neverlib/.history/audio_aug/audio_aug_20250827153525.py +303 -0
- neverlib/.history/audio_aug/audio_aug_20250827153533.py +304 -0
- neverlib/.history/audio_aug/audio_aug_20250827153541.py +321 -0
- neverlib/.history/audio_aug/audio_aug_20250827153805.py +322 -0
- neverlib/.history/audio_aug/audio_aug_20250827153832.py +323 -0
- neverlib/.history/audio_aug/audio_aug_20250827153836.py +324 -0
- neverlib/.history/audio_aug/audio_aug_20250827153846.py +324 -0
- neverlib/.history/audio_aug/audio_aug_20250827153859.py +325 -0
- neverlib/.history/audio_aug/audio_aug_20250827154453.py +337 -0
- neverlib/.history/audio_aug/audio_aug_20250827154513.py +355 -0
- neverlib/.history/audio_aug/audio_aug_20250827154538.py +356 -0
- neverlib/.history/audio_aug/audio_aug_20250827154541.py +357 -0
- neverlib/.history/audio_aug/audio_aug_20250827154612.py +357 -0
- neverlib/.history/audio_aug/audio_aug_20250827154657.py +360 -0
- neverlib/.history/audio_aug/audio_aug_20250827154708.py +360 -0
- neverlib/.history/audio_aug/audio_aug_20250827154728.py +366 -0
- neverlib/.history/audio_aug/audio_aug_20250827154755.py +367 -0
- neverlib/.history/audio_aug/audio_aug_20250827154800.py +367 -0
- neverlib/.history/audio_aug/audio_aug_20250827154917.py +368 -0
- neverlib/.history/audio_aug/audio_aug_20250827154928.py +369 -0
- neverlib/.history/audio_aug/audio_aug_20250827154932.py +370 -0
- neverlib/.history/audio_aug/audio_aug_20250827154947.py +372 -0
- neverlib/.history/audio_aug/audio_aug_20250827155015.py +375 -0
- neverlib/.history/audio_aug/audio_aug_20250827155106.py +375 -0
- neverlib/.history/audio_aug/audio_aug_20250827155114.py +393 -0
- neverlib/.history/audio_aug/audio_aug_20250827155207.py +415 -0
- neverlib/.history/audio_aug/audio_aug_20250827155300.py +415 -0
- neverlib/.history/audio_aug/audio_aug_20250827155321.py +471 -0
- neverlib/.history/audio_aug/audio_aug_20250827164703.py +471 -0
- neverlib/.history/audio_aug/audio_aug_20250827164749.py +471 -0
- neverlib/.history/audio_aug/audio_aug_20250827165252.py +472 -0
- neverlib/.history/audio_aug/audio_aug_20250827165334.py +472 -0
- neverlib/.history/audio_aug/audio_aug_20250827165404.py +473 -0
- neverlib/.history/audio_aug/audio_aug_20250827165610.py +473 -0
- neverlib/.history/audio_aug/audio_aug_20250827165805.py +473 -0
- neverlib/.history/audio_aug/audio_aug_20250827170056.py +473 -0
- neverlib/.history/audio_aug/audio_aug_20250827170106.py +472 -0
- neverlib/.history/audio_aug/audio_aug_20250827170143.py +472 -0
- neverlib/.history/audio_aug/audio_aug_20250827170216.py +472 -0
- neverlib/.history/audio_aug/audio_aug_20250827170218.py +472 -0
- neverlib/.history/audio_aug/audio_aug_20250827170314.py +472 -0
- neverlib/.history/audio_aug/audio_aug_20250827171500.py +471 -0
- neverlib/.history/audio_aug/audio_aug_20250827172347.py +471 -0
- neverlib/.history/audio_aug/audio_aug_20250827172558.py +470 -0
- neverlib/.history/audio_aug/audio_aug_20250827172559.py +470 -0
- neverlib/.history/audio_aug/audio_aug_20250827172801.py +470 -0
- neverlib/.history/audio_aug/audio_aug_20250827182522.py +470 -0
- neverlib/.history/audio_aug/audio_aug_20250827182526.py +470 -0
- neverlib/.history/audio_aug/audio_aug_20250827182626.py +470 -0
- neverlib/.history/audio_aug/audio_aug_20250827182715.py +470 -0
- neverlib/.history/audio_aug/audio_aug_20250904185444.py +470 -0
- neverlib/.history/audio_aug/audio_aug_20250904185538.py +445 -0
- neverlib/.history/data_analyze/__init___20250806204158.py +14 -0
- neverlib/.history/data_analyze/__init___20250827163248.py +14 -0
- neverlib/.history/filter/auto_eq/freq_eq_20250821143140.py +76 -0
- neverlib/.history/filter/auto_eq/freq_eq_20250821153208.py +76 -0
- neverlib/.history/filter/auto_eq/freq_eq_20250821153214.py +76 -0
- neverlib/.history/filter/auto_eq/ga_eq_basic_20250901110521.py +385 -0
- neverlib/.history/filter/auto_eq/ga_eq_basic_20250901110652.py +385 -0
- neverlib/.history/filter/common_20250806002134.py +37 -0
- neverlib/.history/filter/common_20250821120448.py +49 -0
- neverlib/.history/filter/common_20250821120453.py +49 -0
- neverlib/.history/metrics/snr_20250827224201.py +182 -0
- neverlib/.history/metrics/snr_20250827234019.py +186 -0
- neverlib/.history/metrics/snr_20250827234028.py +186 -0
- neverlib/.history/metrics/snr_20250827234030.py +186 -0
- neverlib/.history/utils/audio_split_20250805234209.py +268 -0
- neverlib/.history/utils/audio_split_20250904185309.py +268 -0
- neverlib/.history/utils/utils_20250813165516.py +330 -0
- neverlib/.history/utils/utils_20250904181341.py +328 -0
- neverlib/.history/utils/utils_20250904185546.py +352 -0
- neverlib/.history/utils/utils_20250904185548.py +353 -0
- neverlib/.history/utils/utils_20250904185603.py +353 -0
- neverlib/.history/utils/utils_20250904185636.py +353 -0
- neverlib/.history/utils/utils_20250904185658.py +358 -0
- neverlib/.history/utils/utils_20250904190053.py +359 -0
- 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 +247 -0
- neverlib/.specstory/history/2025-08-26_11-54Z-oserror-missing-shared-object-file.md +87 -0
- 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 +296 -0
- neverlib/.specstory/history/2025-08-27_08-29Z-delete-python-file-command.md +211 -0
- 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 +357 -0
- neverlib/Docs/audio_aug_test/test_snr.py +55 -0
- neverlib/Docs/audio_aug_test/test_volume.py +0 -0
- neverlib/QA/html2markdown.py +27 -0
- neverlib/__init__.py +10 -20
- neverlib/audio_aug/__init__.py +6 -1
- neverlib/audio_aug/audio_aug.py +360 -55
- neverlib/data_analyze/__init__.py +8 -2
- neverlib/data_analyze/temporal_features.py +1 -1
- neverlib/filter/__init__.py +9 -3
- neverlib/filter/auto_eq/freq_eq.py +1 -1
- neverlib/filter/auto_eq/ga_eq_basic.py +3 -3
- neverlib/filter/common.py +12 -0
- neverlib/metrics/snr.py +5 -3
- neverlib/utils/__init__.py +14 -7
- neverlib/utils/lazy_module.py +81 -0
- neverlib/utils/message.py +3 -8
- neverlib/utils/utils.py +32 -3
- neverlib/vad/__init__.py +16 -9
- neverlib/vad/utils.py +20 -6
- {neverlib-0.2.4.dist-info → neverlib-0.2.6.dist-info}/METADATA +21 -17
- neverlib-0.2.6.dist-info/RECORD +467 -0
- neverlib-0.2.4.dist-info/RECORD +0 -229
- /neverlib/{Docs/audio_aug/test_snr.py → .history/Docs/audio_aug/test_snr_20250827162033.py} +0 -0
- {neverlib-0.2.4.dist-info → neverlib-0.2.6.dist-info}/WHEEL +0 -0
- {neverlib-0.2.4.dist-info → neverlib-0.2.6.dist-info}/licenses/LICENSE +0 -0
- {neverlib-0.2.4.dist-info → neverlib-0.2.6.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
<!-- Generated by SpecStory -->
|
|
2
|
+
|
|
3
|
+
# 在jupyter中播放音频的代码修改 (2025-08-27 09:05Z)
|
|
4
|
+
|
|
5
|
+
_**User**_
|
|
6
|
+
|
|
7
|
+
我想要在jupyter中听音频该如何改代码
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
_**Assistant**_
|
|
12
|
+
|
|
13
|
+
我需要查看当前的代码,了解如何在Jupyter中添加音频播放功能。
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
Read file: Docs/audio_aug_test/test_volume.ipynb
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
Read file: Docs/audio_aug_test/test_volume.ipynb
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
我注意到您想在Jupyter中播放音频文件。在您的代码中,第12行有一个被注释掉的导入语句:`# from IPython.display import Audio, display`。要在Jupyter中播放音频,您需要取消这行的注释并添加播放音频的代码。
|
|
26
|
+
|
|
27
|
+
以下是修改建议:
|
|
28
|
+
|
|
29
|
+
```python:Docs/audio_aug_test/test_volume.ipynb
|
|
30
|
+
# 确保使用本地版本而非安装版本
|
|
31
|
+
import os
|
|
32
|
+
import sys
|
|
33
|
+
sys.path.append("../../")
|
|
34
|
+
from audio_aug import volume_aug_linmax, volume_aug_dbrms, volume_aug_lufs, measure_loudness
|
|
35
|
+
import soundfile as sf
|
|
36
|
+
import numpy as np
|
|
37
|
+
import matplotlib.pyplot as plt
|
|
38
|
+
from IPython.display import Audio, display
|
|
39
|
+
|
|
40
|
+
wav_path = "/data03/never/Dataset/kws_data/Command_Word/group_a_class/zh/pos_example/上一首/037/soft_normal_male_25_151_vadstart5920_vadend33600_snr14.2.wav"
|
|
41
|
+
wav, sr = sf.read(wav_path, always_2d=True, dtype="float32")
|
|
42
|
+
wav = wav[:, 1]
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
然后在需要播放音频的单元格中添加以下代码:
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
# 播放原始音频
|
|
49
|
+
display(Audio(wav, rate=sr))
|
|
50
|
+
|
|
51
|
+
# 播放处理后的音频(比如wav_linear)
|
|
52
|
+
display(Audio(wav_linear, rate=sr))
|
|
53
|
+
|
|
54
|
+
# 播放处理后的音频(比如wav_dbrms)
|
|
55
|
+
display(Audio(wav_dbrms, rate=sr))
|
|
56
|
+
|
|
57
|
+
# 播放处理后的音频(比如wav_lufs)
|
|
58
|
+
display(Audio(wav_lufs, rate=sr))
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
您可以在任何需要播放音频的单元格中添加这些代码。例如,在每个处理完音频后的单元格中添加对应的播放代码,或者创建一个新的单元格专门用于播放所有处理过的音频进行比较。
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
_**User**_
|
|
66
|
+
|
|
67
|
+
jupyte有画时域波形的函数吗?
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
_**Assistant**_
|
|
72
|
+
|
|
73
|
+
是的,Jupyter中可以使用matplotlib库来绘制时域波形。从您当前的代码中可以看到,您已经在使用matplotlib绘制波形了。
|
|
74
|
+
|
|
75
|
+
在您的代码中,已经有时域波形的绘制:
|
|
76
|
+
|
|
77
|
+
```python
|
|
78
|
+
plt.figure(figsize=(10, 6))
|
|
79
|
+
plt.subplot(2, 1, 1)
|
|
80
|
+
time = np.arange(len(wav)) / sr
|
|
81
|
+
plt.plot(time, wav) # 这里就是绘制时域波形
|
|
82
|
+
plt.ylim(-1, 1)
|
|
83
|
+
plt.grid()
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
这段代码创建了一个图形,其中上半部分绘制了音频信号的时域波形,下半部分绘制了频谱图。
|
|
87
|
+
|
|
88
|
+
如果您想单独绘制更美观的时域波形,可以使用以下代码:
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
def plot_waveform(signal, sample_rate, title="波形图"):
|
|
92
|
+
"""绘制音频波形的时域图"""
|
|
93
|
+
duration = len(signal) / sample_rate
|
|
94
|
+
time = np.linspace(0, duration, len(signal))
|
|
95
|
+
|
|
96
|
+
plt.figure(figsize=(12, 4))
|
|
97
|
+
plt.plot(time, signal, color='blue')
|
|
98
|
+
plt.title(title)
|
|
99
|
+
plt.xlabel('时间 (秒)')
|
|
100
|
+
plt.ylabel('振幅')
|
|
101
|
+
plt.grid(True)
|
|
102
|
+
plt.tight_layout()
|
|
103
|
+
plt.show()
|
|
104
|
+
|
|
105
|
+
# 使用方法
|
|
106
|
+
plot_waveform(wav, sr, "原始音频波形")
|
|
107
|
+
plot_waveform(wav_linear, sr, "线性增强后的波形")
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
这个函数会创建一个更清晰、更专注于时域表示的波形图,包含适当的标签和网格。
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
_**User**_
|
|
115
|
+
|
|
116
|
+
wav_linear = volume_aug_linmax(wav, 0.5, hpf=True)
|
|
117
|
+
为什么这段代码后,wav初始值会被改变
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
_**Assistant**_
|
|
122
|
+
|
|
123
|
+
<details>
|
|
124
|
+
<summary>Searched codebase "volume_aug_linmax function implementation" • **14** results</summary>
|
|
125
|
+
|
|
126
|
+
| File | Lines |
|
|
127
|
+
|------|-------|
|
|
128
|
+
| `audio_aug/audio_aug.py` | L283-372 |
|
|
129
|
+
| `.history/audio_aug/audio_aug_20250827170056.py` | L283-374 |
|
|
130
|
+
| `.history/audio_aug/audio_aug_20250827170216.py` | L283-373 |
|
|
131
|
+
| `.history/audio_aug/audio_aug_20250827170314.py` | L283-373 |
|
|
132
|
+
| `.history/audio_aug/audio_aug_20250827170143.py` | L283-373 |
|
|
133
|
+
| `.history/audio_aug/audio_aug_20250827170106.py` | L283-373 |
|
|
134
|
+
| `.history/audio_aug/audio_aug_20250827171500.py` | L283-372 |
|
|
135
|
+
| `.history/audio_aug/audio_aug_20250827170218.py` | L283-373 |
|
|
136
|
+
| `audio_aug/audio_aug.py` | L257-301 |
|
|
137
|
+
| `.history/audio_aug/audio_aug_20250827170106.py` | L257-302 |
|
|
138
|
+
| `.history/audio_aug/audio_aug_20250827170056.py` | L257-303 |
|
|
139
|
+
| `.history/audio_aug/audio_aug_20250827170216.py` | L257-302 |
|
|
140
|
+
| `Docs/audio_aug/test_volume.ipynb` | Lundefined-22 |
|
|
141
|
+
| `.history/audio_aug/audio_aug_20250827170143.py` | L257-302 |
|
|
142
|
+
|
|
143
|
+
</details>
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
问题在于`volume_aug_linmax`函数中直接修改了输入参数`wav`的值。查看函数实现,在第323行有一个关键操作:
|
|
148
|
+
|
|
149
|
+
```python
|
|
150
|
+
wav *= scalar
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
这行代码直接对传入的`wav`数组进行了原地修改(in-place modification),而不是创建一个新的数组。在Python中,NumPy数组是可变对象,当你将数组传递给函数时,函数接收的是数组的引用,而不是数组的副本。因此,当函数中修改了这个数组,原始数组也会被修改。
|
|
154
|
+
|
|
155
|
+
要避免这个问题,您可以在调用函数前先创建原始数据的副本:
|
|
156
|
+
|
|
157
|
+
```python
|
|
158
|
+
# 创建wav的副本再传入函数
|
|
159
|
+
wav_copy = wav.copy()
|
|
160
|
+
wav_linear = volume_aug_linmax(wav_copy, 0.5, hpf=True)
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
或者修改`volume_aug_linmax`函数,让它在内部处理时不修改原始数据:
|
|
164
|
+
|
|
165
|
+
```python
|
|
166
|
+
def volume_aug_linmax(wav, target_level, hpf=False, sr=16000, order=4, cutoff=100):
|
|
167
|
+
"""
|
|
168
|
+
音量增强, 使用linmax方法
|
|
169
|
+
Args:
|
|
170
|
+
wav: 音频
|
|
171
|
+
target_level: 目标音量, 单位dB
|
|
172
|
+
hpf: 是否高通滤波
|
|
173
|
+
sr: 采样率
|
|
174
|
+
order: 滤波器阶数
|
|
175
|
+
cutoff: 截止频率
|
|
176
|
+
"""
|
|
177
|
+
assert target_level > 0 and target_level < 1, "target_level must be between 0 and 1"
|
|
178
|
+
# 创建输入数据的副本,避免修改原始数据
|
|
179
|
+
wav_out = wav.copy()
|
|
180
|
+
wav_tmp = wav.copy()
|
|
181
|
+
if hpf:
|
|
182
|
+
wav_tmp = HPFilter(wav_tmp, sr=sr, order=order, cutoff=cutoff)
|
|
183
|
+
wav_max = np.max(np.abs(wav_tmp))
|
|
184
|
+
scalar = target_level / (wav_max + EPS)
|
|
185
|
+
wav_out *= scalar
|
|
186
|
+
wav_out = limiter(wav_out)
|
|
187
|
+
|
|
188
|
+
return wav_out
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
这样修改后,函数就不会改变原始输入数据了。
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
_**User**_
|
|
196
|
+
|
|
197
|
+
不太理解,局部变量为什么会改变局全局变量,有没有其他解法,比如深浅拷贝方式
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
_**Assistant**_
|
|
202
|
+
|
|
203
|
+
这个问题涉及到Python中对象的传递方式和可变对象的特性。让我解释一下:
|
|
204
|
+
|
|
205
|
+
### 为什么局部变量会改变全局变量
|
|
206
|
+
|
|
207
|
+
在Python中,当你将一个变量传递给函数时,实际上传递的是对象的引用,而不是对象的副本。对于可变对象(如列表、字典、NumPy数组等),这意味着函数内部对该对象的修改会影响到函数外部的原始对象。
|
|
208
|
+
|
|
209
|
+
在`volume_aug_linmax`函数中:
|
|
210
|
+
```python
|
|
211
|
+
def volume_aug_linmax(wav, target_level, hpf=False, sr=16000, order=4, cutoff=100):
|
|
212
|
+
# ...
|
|
213
|
+
wav *= scalar # 直接修改了传入的wav对象
|
|
214
|
+
# ...
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
这里的`wav`参数接收的是外部传入的NumPy数组的引用,所以当函数内部使用`*=`运算符修改它时,外部的原始数组也被修改了。
|
|
218
|
+
|
|
219
|
+
### 解决方案
|
|
220
|
+
|
|
221
|
+
#### 1. 深拷贝与浅拷贝
|
|
222
|
+
|
|
223
|
+
对于NumPy数组,可以使用以下方法创建副本:
|
|
224
|
+
|
|
225
|
+
- **浅拷贝**:`wav.copy()`或`np.copy(wav)`
|
|
226
|
+
- 对于一维数组,浅拷贝已经足够
|
|
227
|
+
- 这会创建一个新的数组对象,但内部的复杂对象(如果有)仍然是引用
|
|
228
|
+
|
|
229
|
+
- **深拷贝**:`import copy; copy.deepcopy(wav)`
|
|
230
|
+
- 完全复制整个对象及其所有嵌套对象
|
|
231
|
+
- 对于简单的NumPy数组,通常不需要深拷贝
|
|
232
|
+
|
|
233
|
+
#### 2. 在调用函数前创建副本
|
|
234
|
+
|
|
235
|
+
```python
|
|
236
|
+
# 方法1:使用NumPy的copy方法
|
|
237
|
+
wav_copy = wav.copy()
|
|
238
|
+
wav_linear = volume_aug_linmax(wav_copy, 0.5, hpf=True)
|
|
239
|
+
|
|
240
|
+
# 方法2:使用NumPy的array函数创建新数组
|
|
241
|
+
wav_copy = np.array(wav)
|
|
242
|
+
wav_linear = volume_aug_linmax(wav_copy, 0.5, hpf=True)
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
#### 3. 修改函数返回新对象而不修改输入
|
|
246
|
+
|
|
247
|
+
```python
|
|
248
|
+
def volume_aug_linmax_fixed(wav, target_level, hpf=False, sr=16000, order=4, cutoff=100):
|
|
249
|
+
"""
|
|
250
|
+
音量增强, 使用linmax方法(不修改输入)
|
|
251
|
+
"""
|
|
252
|
+
assert target_level > 0 and target_level < 1, "target_level must be between 0 and 1"
|
|
253
|
+
# 创建输入数据的副本
|
|
254
|
+
wav_out = wav.copy() # 关键是这一步
|
|
255
|
+
wav_tmp = wav.copy()
|
|
256
|
+
if hpf:
|
|
257
|
+
wav_tmp = HPFilter(wav_tmp, sr=sr, order=order, cutoff=cutoff)
|
|
258
|
+
wav_max = np.max(np.abs(wav_tmp))
|
|
259
|
+
scalar = target_level / (wav_max + EPS)
|
|
260
|
+
wav_out *= scalar # 修改副本而不是原始数据
|
|
261
|
+
wav_out = limiter(wav_out)
|
|
262
|
+
return wav_out
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
#### 4. 函数式编程方法(不修改任何输入)
|
|
266
|
+
|
|
267
|
+
```python
|
|
268
|
+
def volume_aug_linmax_functional(wav, target_level, hpf=False, sr=16000, order=4, cutoff=100):
|
|
269
|
+
"""
|
|
270
|
+
音量增强, 使用linmax方法(函数式方法)
|
|
271
|
+
"""
|
|
272
|
+
assert target_level > 0 and target_level < 1, "target_level must be between 0 and 1"
|
|
273
|
+
wav_tmp = wav.copy() if hpf else wav
|
|
274
|
+
if hpf:
|
|
275
|
+
wav_tmp = HPFilter(wav_tmp, sr=sr, order=order, cutoff=cutoff)
|
|
276
|
+
wav_max = np.max(np.abs(wav_tmp))
|
|
277
|
+
scalar = target_level / (wav_max + EPS)
|
|
278
|
+
# 创建新数组而不是修改原始数组
|
|
279
|
+
return limiter(wav * scalar)
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
对于您的情况,最简单的解决方案是在调用函数前创建一个副本,或者修改函数内部创建副本。对于NumPy数组,通常`.copy()`方法就足够了,不需要使用`copy.deepcopy()`,因为NumPy数组通常不包含嵌套的复杂对象。
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
_**User**_
|
|
287
|
+
|
|
288
|
+
我改成了这样还是有问题
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
_**Assistant**_
|
|
293
|
+
|
|
294
|
+
我看到您修改了`volume_aug_dbrms`函数,但问题可能出在`volume_aug_linmax`函数上。让我们检查一下`volume_aug_linmax`函数的当前实现:
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
Read file: audio_aug/audio_aug.py
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
我发现问题所在了。尽管您修改了`volume_aug_dbrms`函数使其不改变原始数组,但`volume_aug_linmax`函数仍然有问题。在第322行:
|
|
303
|
+
|
|
304
|
+
```python
|
|
305
|
+
wav *= scalar
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
这行代码直接修改了输入的`wav`数组。虽然在第317行创建了`wav_tmp = wav.copy()`,但这个副本只用于计算,而实际的音量调整仍然是在原始`wav`上进行的。
|
|
309
|
+
|
|
310
|
+
要解决这个问题,您需要修改`volume_aug_linmax`函数,使其像`volume_aug_dbrms`一样不修改原始输入:
|
|
311
|
+
|
|
312
|
+
```python
|
|
313
|
+
def volume_aug_linmax(wav, target_level, hpf=False, sr=16000, order=4, cutoff=100):
|
|
314
|
+
"""
|
|
315
|
+
音量增强, 使用linmax方法
|
|
316
|
+
Args:
|
|
317
|
+
wav: 音频
|
|
318
|
+
target_level: 目标音量, 单位dB
|
|
319
|
+
hpf: 是否高通滤波
|
|
320
|
+
sr: 采样率
|
|
321
|
+
order: 滤波器阶数
|
|
322
|
+
cutoff: 截止频率
|
|
323
|
+
"""
|
|
324
|
+
assert target_level > 0 and target_level < 1, "target_level must be between 0 and 1"
|
|
325
|
+
wav_tmp = wav.copy()
|
|
326
|
+
if hpf:
|
|
327
|
+
wav_tmp = HPFilter(wav_tmp, sr=sr, order=order, cutoff=cutoff)
|
|
328
|
+
wav_max = np.max(np.abs(wav_tmp))
|
|
329
|
+
scalar = target_level / (wav_max + EPS)
|
|
330
|
+
wav_opt = wav.copy() * scalar # 创建新数组而不是修改原始数组
|
|
331
|
+
wav_opt = limiter(wav_opt)
|
|
332
|
+
|
|
333
|
+
return wav_opt
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
关键的改变是:
|
|
337
|
+
1. 创建一个新的数组`wav_opt`来存储调整后的音频,而不是修改原始的`wav`
|
|
338
|
+
2. 使用`wav.copy() * scalar`而不是`wav *= scalar`来避免原地修改
|
|
339
|
+
|
|
340
|
+
同样,我注意到`volume_aug_lufs`函数也有类似问题,在第370行:
|
|
341
|
+
|
|
342
|
+
```python
|
|
343
|
+
wav = wav * scalar
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
虽然这看起来像是创建了新数组,但实际上Python可能会优化这个操作为原地修改。为了安全起见,也应该修改为:
|
|
347
|
+
|
|
348
|
+
```python
|
|
349
|
+
wav_opt = wav.copy() * scalar
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
然后返回`wav_opt`而不是修改后的`wav`。
|
|
353
|
+
|
|
354
|
+
修改后的`volume_aug_linmax`函数应该不会再改变原始的`wav`数组了。
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Author: 凌逆战 | Never
|
|
3
|
+
Date: 2025-03-24 10:00:14
|
|
4
|
+
Description:
|
|
5
|
+
'''
|
|
6
|
+
# -*- coding:utf-8 -*-
|
|
7
|
+
# Author:凌逆战 | Never
|
|
8
|
+
# Date: 2024/1/29
|
|
9
|
+
"""
|
|
10
|
+
snr增强, 对安静的测试集加指定snr的白噪
|
|
11
|
+
"""
|
|
12
|
+
import numpy as np
|
|
13
|
+
import random
|
|
14
|
+
import soundfile as sf
|
|
15
|
+
from neverlib.metrics.snr import get_snr
|
|
16
|
+
from neverlib.audio_aug import snr_aug_changeNoise, snr_aug_changeNoise_v2
|
|
17
|
+
from neverlib.utils import EPS
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def snr_aug1(clean, snr):
|
|
21
|
+
""" 白噪
|
|
22
|
+
Args:
|
|
23
|
+
clean: (*, C)
|
|
24
|
+
snr: snr值
|
|
25
|
+
Returns:
|
|
26
|
+
"""
|
|
27
|
+
noise = np.random.randn(*clean.shape) # 生成和clean等长的白噪
|
|
28
|
+
|
|
29
|
+
noisy, _ = snr_aug_changeNoise(clean, noise, snr)
|
|
30
|
+
|
|
31
|
+
return noisy
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def snr_aug2(clean, snr):
|
|
35
|
+
"""
|
|
36
|
+
Args:
|
|
37
|
+
clean: (*, C)
|
|
38
|
+
snr_range: snr范围 [min, max]
|
|
39
|
+
snr_aug_rate: snr增强率
|
|
40
|
+
Returns:
|
|
41
|
+
"""
|
|
42
|
+
noise = np.random.randn(*clean.shape) # 生成和clean等长的白噪
|
|
43
|
+
noisy, _ = snr_aug_changeNoise_v2(clean, noise, snr)
|
|
44
|
+
return noisy
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
if __name__ == "__main__":
|
|
48
|
+
clean_path = "../../data/white.wav"
|
|
49
|
+
clean, fs = sf.read(clean_path, always_2d=True, dtype="float32")
|
|
50
|
+
|
|
51
|
+
noisy1 = snr_aug1(clean, 10)
|
|
52
|
+
noisy2 = snr_aug2(clean, 10)
|
|
53
|
+
|
|
54
|
+
print(get_snr(clean, noisy1 - clean)) # 10.000000000480982
|
|
55
|
+
print(get_snr(clean, noisy2 - clean)) # 9.999870642663442
|
|
File without changes
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Author: 凌逆战 | Never
|
|
3
|
+
Date: 2025-08-22 23:41:13
|
|
4
|
+
Description: pip install 'markitdown[all]
|
|
5
|
+
'''
|
|
6
|
+
import os
|
|
7
|
+
from markitdown import MarkItDown
|
|
8
|
+
|
|
9
|
+
from neverlib.utils import get_path_list
|
|
10
|
+
|
|
11
|
+
source_dir = "./html"
|
|
12
|
+
target_dir = "./markdown"
|
|
13
|
+
html_path_list = get_path_list(source_dir, end="*.html")
|
|
14
|
+
|
|
15
|
+
for html_path in html_path_list:
|
|
16
|
+
html_name = os.path.basename(html_path)
|
|
17
|
+
md = MarkItDown(enable_plugins=False) # Set to True to enable plugins
|
|
18
|
+
result = md.convert(html_path)
|
|
19
|
+
# print(result.text_content)
|
|
20
|
+
|
|
21
|
+
# 写入文件
|
|
22
|
+
with open(os.path.join(target_dir, html_name.replace(".html", ".md")), "w") as f:
|
|
23
|
+
f.write(result.text_content)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
neverlib/__init__.py
CHANGED
|
@@ -1,19 +1,8 @@
|
|
|
1
1
|
'''
|
|
2
2
|
Author: 凌逆战 | Never
|
|
3
|
-
Date: 2025-
|
|
4
|
-
|
|
5
|
-
FilePath: \neverlib\neverlib\__init__.py
|
|
6
|
-
Description:
|
|
3
|
+
Date: 2025-08-22
|
|
4
|
+
Description: neverlib - 音频处理和VAD工具集
|
|
7
5
|
'''
|
|
8
|
-
# -*- coding:utf-8 -*-
|
|
9
|
-
# Author:凌逆战 | Never
|
|
10
|
-
# Date: 2024/5/17
|
|
11
|
-
"""
|
|
12
|
-
neverlib - 音频处理和VAD工具集
|
|
13
|
-
"""
|
|
14
|
-
# 从pyproject.toml中读取版本号
|
|
15
|
-
__version__ = "0.1.2" # 默认版本号
|
|
16
|
-
|
|
17
6
|
try:
|
|
18
7
|
import re
|
|
19
8
|
import pathlib
|
|
@@ -30,12 +19,13 @@ try:
|
|
|
30
19
|
if version_match:
|
|
31
20
|
__version__ = version_match.group(1)
|
|
32
21
|
except Exception:
|
|
33
|
-
|
|
22
|
+
__version__ = "0.1.2" # 如果出错, 使用默认版本号
|
|
23
|
+
|
|
34
24
|
|
|
25
|
+
# 懒加载子包,减少初始导入开销
|
|
26
|
+
from lazy_loader import attach
|
|
35
27
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
from . import audio_aug
|
|
41
|
-
from . import filter
|
|
28
|
+
__getattr__, __dir__, __all__ = attach(
|
|
29
|
+
__name__,
|
|
30
|
+
submodules=["utils", "vad", "audio_aug", "filter", "data_analyze"],
|
|
31
|
+
)
|