c - Assembly音频合成的数据结构

标签 c audio assembly synthesis

作为一个学习项目,我正在用汇编编写一个简单的合成器,我想实现现代合成器上的一些更高级的功能,即 ADSR 包络和使用正弦波的脉冲宽度调制。目前,我基本上是手动生成样本并将它们推送到音频输出,它有一个样本缓冲区和一个在缓冲区接近空时产生的中断。

我坚持的是如何生成“连续”波形。目前,我为波的单个实例(锯齿波或脉冲波)生成样本,然后简单地循环一个波以生成连续输出。您可以想象,这不能很好地扩展到 PWM 和 ADSR 包络。因此,我需要按需生成波形,并对其进行动态调整,例如脉冲宽度或音高的调制(例如连奏),但我不知道如何在内存中有效地表示它,以及如何在缓冲区已满时“暂停”波形生成并在出现中断时“恢复”波形生成。

我不是在寻求解决方案,而是在正确的思考方向上插入 :-)

谢谢!

最佳答案

按需生成 wave 将适用于简单的 wave,但如果您以后想要添加额外的功能/dsps,您仍然需要某种缓冲区。

幅度的 ADSR 相当简单,因为您只需缩放波形,对于频率调制则有点复杂,这里有一篇文章对此进行解释 link

你也可以查看farbraush github,应该有一些不错的灵感给你。

关于c - Assembly音频合成的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13212251/

相关文章:

assembly - 如何在摩托罗拉 M6800 中对数字进行取模

c - SIMD 内在函数 - 段错误

编译 const GdkPixdata : "error: initializer element is not constant"

matlab - 如何实时测量声音强度?

javascript - 浏览器中的 GSM 编码的 WAV 文件

assembly - 为什么 Clang 在将 double 转换为 ulonglong 时调用 %eip+1?

c++ - 控制台应用程序比 GUI 应用程序运行得更快吗?

c - 当使用 strlen 获取 const char* 的长度时,我得到一个负数?

c# - 使用naudio录制特定的应用程序音频

c - 地址和推送指令前的星号,它被推送到哪里?