mcpField
D
dsp

dsp

github.com/shortwavlabs开发554 次安装1 周前更新
代码仓库

关于 dsp

DSP 是面向 C/C++ 实时音频处理开发的参考技能,汇集滤波、效果、合成、分析和性能优化资料。适用于实现音频算法与处理循环的开发者,内容按领域拆分为可按需查阅的参考文档。

主要功能

  1. 01涵盖滤波器与参数平滑
  2. 02提供延迟、混响和压缩器参考
  3. 03介绍振荡器与波形合成
  4. 04涵盖 FFT、检测与音频分析
  5. 05说明实时线程安全与性能优化

适用场景

  1. 01在 C/C++ 中实现音频滤波器
  2. 02开发混响、压缩器或失真效果
  3. 03构建合成器与波形发生器
  4. 04优化实时音频处理代码

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/shortwavlabs/agent-skills --skill dsp

安装后在 Claude Code 中输入/dsp确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
references/
analysis.md
effects.md
filters.md
synthesis.md
utilities.md

详细介绍

DSP — 音频数字信号处理

这是一份全面的参考资料,介绍如何用 C/C++ 实现实时音频 DSP 算法。内容源自 musicdsp.org 社区档案,涵盖了从业者二十年来积累的知识。

何时使用此技能

  • 使用 C/C++ 实现音频滤波器、效果器、合成器或分析器
  • 编写 processBlock()、process() 或逐样本 DSP 循环
  • 设计双二阶滤波器系数、Moog 梯形滤波器或状态变量滤波器
  • 构建延迟线、混响器、压缩器、波形整形器或立体声处理器
  • 生成带限波形、噪声或包络
  • 使用快速数学近似或非正规数防护来优化音频代码

若要精确仿真特定模拟电路(匹配原理图或 SPICE 参考),也请加载 circuit-to-dsp:它会根据测得的误差决定结构、求解器、积分器和采样率;此技能则提供构建模块。

架构

此技能按领域划分为多个参考文件。请阅读与当前任务相关的文件:

参考文件涵盖内容阅读时机
references/filters.md双二阶滤波器/RBJ、Moog 梯形滤波器、SVF、FIR、直流阻断、共振峰、参数平滑、分频器实现任何滤波器时
references/effects.md延迟、混响、压缩器/限制器、移相器/哇音、波形整形/失真、低保真、立体声、卷积实现任何音频效果时
references/synthesis.md振荡器、带限波形、FM/PM、DSF、噪声、包络、切比雪夫波形整形、LFO生成任何声音时
references/analysis.mdFFT、DFT、Goertzel、Walsh-Hadamard、包络跟随、节拍检测、LPC、限幅频谱分析、检测
references/utilities.md快速数学函数(exp、log、sin、sqrt)、插值、裁剪、非正规数、抖动、MIDI 转换、参数映射、基准测试、无锁 FIFO性能优化、转换、音频安全

实现原则

以下原则适用于所有领域:

采样率无关性

始终根据采样率推导系数。切勿硬编码默认 44.1 kHz 的值。

// Coefficient from frequency and sample rate
float w0 = 2.0f * M_PI * cutoffHz / sampleRate;
防止非正规数

浮点非正规数(接近零的次正规数)会导致 x86 上 CPU 严重停顿。给状态变量加上一个极小的偏移量:

static constexpr float kDenormal = 1e-24f;
// In process loop:
state += kDenormal;

或者,使用清零(flush-to-zero)编译器标志(GCC/Clang 的 -ffast-math),在 CPU 层面处理此问题。

参数平滑

切勿瞬间改变滤波器系数或增益值,否则会产生咔嗒声。使用一阶低通滤波器平滑参数:

// Time-based smoothing coefficient
float a = expf(-2.0f * M_PI / (smoothTimeMs * 0.001f * sampleRate));
// Per sample:
smoothedValue = a * smoothedValue + (1.0f - a) * targetValue;
音频线程安全

处理回调绝不能分配内存、加锁或调用会阻塞的 OS 函数。预先分配所有缓冲区,使用无锁通信更新参数,并避免在热点循环中进行虚函数分派。

双线性变换/预畸变

大多数数字滤波器都通过双线性变换从模拟原型推导而来。其关键映射关系如下:

w0 = 2 * pi * fc / Fs

若要提高高频处的精度,请进行频率预畸变:

wa = 2 * Fs * tan(w0 / 2)

代码约定

此技能中的所有代码示例均使用 C/C++,并遵循以下约定:

  • 音频采样使用 float(32 位),系数计算使用 double
  • 使用 sampleRate 或 sr 表示以 Hz 为单位的采样率
  • 使用 M_PI 表示 pi(为保证可移植性,请定义为 #ifndef M_PI ... #endif)
  • 处理函数接收输入采样并返回输出采样
  • 状态变量作为类成员(而非全局变量)
  • 除非另有明确说明,所有频率均以 Hz 为单位

评论

支持 Markdown