A multi-tool: WAV finder, multi-zone data generator (2/4 zones, multi-channel IR), and CLI aliases
Project description
WAV Loo
版本:1.2.0
wav-loo 是一个为音频处理和云原生开发设计的集成工具箱,它提供了三大核心功能:
- WAV 文件查找器:在本地或远程URL中快速定位WAV音频文件。
- 命令行快捷别名:集成了数十个常用的
kubectl、atlasctl和其他开发运维命令,提升效率。 - Loss 函数库 + 数据生成:提供损失函数与车载多音区数据生成工具。
安装
pip install wav-loo
功能一:WAV 文件查找
你可以在Python代码中或通过命令行来查找WAV文件。
命令行用法
wav-loo find <路径或URL> [--output <文件>] [--verbose]
- 示例:
wav-loo find /path/to/audiowav-loo find https://example.com/audio-files/
Python API 用法
from wav_loo import WavFinder
finder = WavFinder()
wavs = finder.find_wav_files('/path/to/audio')
print(wavs)
功能二:快捷命令
通过 wav-loo 执行常用的运维开发命令,无需配置复杂的alias。
命令行用法
只需将别名作为 wav-loo 的子命令即可。
- 示例:
# 查看pods (等价于 kubectl get pods -o wide) wav-loo kg # 查看signal命名空间日志 (等价于 kubectl logs -n signal) wav-loo kln # 使用unimirror安装numpy (等价于 uv pip install -i ... numpy) wav-loo uv numpy
支持的快捷命令列表
| 子命令 | 等价 bash 命令 | 说明 |
|---|---|---|
kd |
kubectl delete pods |
删除所有pods |
kg |
kubectl get pods -o wide |
查看pods(详细) |
kl |
kubectl logs |
查看日志 |
rs |
kubectl describe ResourceQuota -n ... |
查看资源配额(需补命名空间) |
kdn |
kubectl delete pods -n signal |
删除signal命名空间pods |
kgn |
kubectl get pods -o wide -n signal |
查看signal命名空间pods |
kln |
kubectl logs -n signal |
查看signal命名空间日志 |
at |
atlasctl top node |
atlas节点监控 |
ad |
atlasctl delete job |
删除atlas作业 |
atd |
atlasctl delete |
删除atlas资源 |
adp |
atlasctl delete job pytorchjob |
删除pytorch作业 |
adn |
atlasctl delete job -n signal |
删除signal命名空间作业 |
tb |
tensorboard --port=3027 --logdir=. |
启动tensorboard |
ca |
conda activate <env> |
激活conda环境(需补环境名) |
gp |
gpustat -i |
查看GPU状态 |
kgg |
kubectl get po --all-namespaces -o wide [extra args] |
全局查看pods(可附加kubectl过滤参数) |
uv |
uv pip install -i ... |
使用unimirror安装PyPI包(需补包名) |
功能三:Loss 函数库
wav-loo 提供了一系列在信号处理和深度学习中常用的损失函数。
multi_channel_separation_consistency_loss
功能:
计算多通道(N>2)音频信号分离后的一致性损失。该损失旨在惩罚模型输出的多个通道之间的幅度谱差异与原始目标信号中对应通道之间的幅度谱差异不一致的情况。它通过计算所有通道对 (pair) 的预测幅度谱差异和目标幅度谱差异,然后最小化这两组差异之间的L1距离来实现。
使用方法:
import torch
from wav_loo.loss import multi_channel_separation_consistency_loss
# 假设 pred_mag_specs 和 target_mag_specs 是你的模型输出和目标真值
# 形状: (B, N, F, T), 类型: torch.float32
# B: batch_size, N: 通道数, F: 频率bins, T: 时间帧
pred_mag_specs = torch.randn(8, 4, 257, 100, dtype=torch.float32)
target_mag_specs = torch.randn(8, 4, 257, 100, dtype=torch.float32)
loss = multi_channel_separation_consistency_loss(pred_mag_specs, target_mag_specs)
print(f"一致性损失: {loss.item()}")
功能四:多通道车载语音数据生成(已更新逻辑)
生成基于车载多位置 IR(房间脉冲响应)和干净语音的多音区数据集,用于语音分离等任务。
- IR 目录结构:
ir_root内部递归查找子目录名包含以下关键词的文件夹,并收集其中的.wavIR:zhujia,fujia,zhujiahoupai,fujiahoupai(不区分大小写,名称包含即可)
- 干净语音:
clean_root内递归查找.wav文件(多通道 clean 会先混为单声道)。 - 音区设置:
- 4 音区(默认):上述四个位置分别映射到输出通道
[0,1,2,3]。 - 2 音区:
zone_a=[zhujia, zhujiahoupai]→ 通道0;zone_b=[fujia, fujiahoupai]→ 通道1。
- 4 音区(默认):上述四个位置分别映射到输出通道
- 生成规则(核心更新):
- 始终保留 IR 卷积后的多通道空间信息(不做单声道合并)。
- 2 音区/单说话人:仅从可用物理位置中随机选择一个 IR 进行卷积。
- 2 音区/多说话人:为每个说话人随机分配一个独立的物理位置(若人数多于位置数则循环分配),各自与对应 IR 卷积后按通道相加。
- 4 音区:使用该区域下所有可用 IR;各子位置与 clean 卷积后按通道相加。
- 当 IR 通道数与输出通道数不一致时,按输出通道数对齐(自动 pad/截断)。
mixture (T, N):所有标签(区域)贡献沿“标签维”求和后得到。target (T, N):第i列仅保留标签i在通道i的自通道成分(便于监督)。
- 配置参数(关键):
zones:取值2或4presence_prob:每个区域有人说话的概率(默认 0.5)two_zone_multi_speaker_prob:2 音区时,单个区域内出现多说话人的概率(默认 0.3)two_zone_max_speakers_per_zone:2 音区时,单个区域内最多说话人数(默认 2)max_clean_seconds:每条 clean 的最大时长(默认 30s)sample_rate、num_samples等
命令行用法
# 4 音区,默认 60000 条,16kHz,默认输出到 ./generated_car_data
wav-loo gen --ir-dir /path/to/ir_root --clean-dir /path/to/clean_root
# 2 音区,自定义输出与数量
wav-loo gen \
--ir-dir /path/to/ir_root \
--clean-dir /path/to/clean_root \
--zones 2 \
--num-samples 2000 \
--sample-rate 16000 \
--output /path/to/out_dir
Python API 用法(推荐)
from wav_loo.data_gen import CarDataGenerator, GenerationConfig
cfg = GenerationConfig(
ir_root_dir="/path/to/ir_root",
clean_root_dir="/path/to/clean_root",
output_dir="/path/to/out_dir",
sample_rate=16000,
num_samples=60000,
zones=2, # 或 4
random_seed=42,
max_clean_seconds=30.0,
presence_prob=0.5,
two_zone_multi_speaker_prob=0.3,
two_zone_max_speakers_per_zone=2,
)
CarDataGenerator(cfg).generate()
数据生成依赖
- 运行数据生成需要:
numpy、soundfile(依赖系统库libsndfile)、scipy、tqdm。
依赖
- Python 3.7+
- requests
- beautifulsoup4
- urllib3
许可证
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wav_loo-1.2.0.tar.gz.
File metadata
- Download URL: wav_loo-1.2.0.tar.gz
- Upload date:
- Size: 18.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f97efbb7ba086c11e9a5e8435d23d92f9dbedc028546227b912fad67df04205
|
|
| MD5 |
9cf4dfb8aaffce6bac46aef7ff35ce04
|
|
| BLAKE2b-256 |
b0c84e61f4297ac3f2911b69a1ba45500ef423cec6055ff0beca407bfc943a3b
|
File details
Details for the file wav_loo-1.2.0-py3-none-any.whl.
File metadata
- Download URL: wav_loo-1.2.0-py3-none-any.whl
- Upload date:
- Size: 17.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae94516fb7102df4c9d14bdcfc03e93b88fdb37f20b35990b16bf28923a0acef
|
|
| MD5 |
4b073061bff3a234c3a6e96096a70785
|
|
| BLAKE2b-256 |
16f3cdb4334529df2245e30a9b744cab71bc21fd8dfe7506efc593e53e206e5a
|