Skip to main content

A multi-tool: WAV finder, multi-zone data generator (2/4 zones, multi-channel IR), and CLI aliases

Project description

WAV Loo

版本:1.3.0

wav-loo 是一个为音频处理和云原生开发设计的集成工具箱,它提供了四大核心功能:

  1. WAV 文件查找器:在本地或远程URL中快速定位WAV音频文件。
  2. 命令行快捷别名:集成了数十个常用的 kubectlatlasctl 和其他开发运维命令,提升效率。
  3. Loss 函数库 + 数据生成:提供损失函数与车载多音区数据生成工具。
  4. 噪声训练数据切片生成:从噪声 WAV 目录中随机抽取定长片段,保持通道与采样率,按16位保存。

安装

pip install wav-loo

功能一:WAV 文件查找

你可以在Python代码中或通过命令行来查找WAV文件。

命令行用法

wav-loo find <路径或URL> [--output <文件>] [--verbose]
  • 示例:
    • wav-loo find /path/to/audio
    • wav-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 内部递归查找子目录名包含以下关键词的文件夹,并收集其中的 .wav IR:
    • zhujia, fujia, zhujiahoupai, fujiahoupai(不区分大小写,名称包含即可)
  • 干净语音clean_root 内递归查找 .wav 文件(多通道 clean 会先混为单声道)。
  • 音区设置
    • 4 音区(默认):上述四个位置分别映射到输出通道 [0,1,2,3]
    • 2 音区:zone_a=[zhujia, zhujiahoupai] → 通道 0zone_b=[fujia, fujiahoupai] → 通道 1
  • 生成规则(核心更新)
    • 始终保留 IR 卷积后的多通道空间信息(不做单声道合并)。
    • 2 音区/单说话人:仅从可用物理位置中随机选择一个 IR 进行卷积。
    • 2 音区/多说话人:为每个说话人随机分配一个独立的物理位置(若人数多于位置数则循环分配),各自与对应 IR 卷积后按通道相加。
    • 4 音区:使用该区域下所有可用 IR;各子位置与 clean 卷积后按通道相加。
    • 当 IR 通道数与输出通道数不一致时,按输出通道数对齐(自动 pad/截断)。
    • mixture (T, N):所有标签(区域)贡献沿“标签维”求和后得到。
    • target (T, N):第 i 列仅保留标签 i 在通道 i 的自通道成分(便于监督)。
  • 配置参数(关键)
    • zones:取值 24
    • presence_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_ratenum_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()

数据生成依赖

  • 运行数据生成需要:numpysoundfile(依赖系统库 libsndfile)、scipytqdm

功能五:噪声训练数据切片生成

从输入目录递归扫描所有 *.wav,为每个文件随机抽取指定时长的片段;当音频不足时进行零填充。保持原通道数与采样率,使用 16-bit PCM 保存。动态按剩余文件平分配额,均衡覆盖各文件。

命令行用法

wav-loo noise-seg \
  -i /path/to/noise_wavs \
  -o /path/to/noise_segments \
  -d 30 \
  -t 60000 \
  --seed 42

参数说明:

  • -i, --input:输入目录(递归查找 WAV)
  • -o, --output:输出目录(默认:noise_segments
  • -d, --duration:片段时长(秒,默认 30)
  • -t, --total:生成片段总数(默认 60000)
  • --seed:随机种子(默认 42)

Python API 用法

from pathlib import Path
from wav_loo import NoiseSegmentsConfig, generate_noise_segments

cfg = NoiseSegmentsConfig(
    input_dir=Path("/path/to/noise_wavs"),
    output_dir=Path("/path/to/noise_segments"),
    duration_seconds=30.0,
    total_segments=60000,
    random_seed=42,
)
num = generate_noise_segments(cfg)
print(f"Generated: {num}")

依赖

  • Python 3.7+
  • requests
  • beautifulsoup4
  • urllib3

许可证

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wav_loo-1.3.0.tar.gz (21.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wav_loo-1.3.0-py3-none-any.whl (19.6 kB view details)

Uploaded Python 3

File details

Details for the file wav_loo-1.3.0.tar.gz.

File metadata

  • Download URL: wav_loo-1.3.0.tar.gz
  • Upload date:
  • Size: 21.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for wav_loo-1.3.0.tar.gz
Algorithm Hash digest
SHA256 6a437e48d885ead5b353d78069283fe1dfe9249b5b502aa8cbe5206f6cee33c8
MD5 28d91d3720140448ebc0681fa014705b
BLAKE2b-256 eeb7c34d9717c632703bd2f268c5b2428e9754dd5c266079b92a114b3a19f59a

See more details on using hashes here.

File details

Details for the file wav_loo-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: wav_loo-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 19.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for wav_loo-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8c497b709358d4997ae2a6f7e66a5b159026607bff6361662ca66ff8410010ec
MD5 b62b9869058fa6ac49275885bb798566
BLAKE2b-256 0d22d7b8ef868698311291b40a2b36d2109dfe90675799b5a309609e5b79fe33

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page