对编程实时音频合成有什么建议吗?

Ein*_*aas 7 audio real-time sound-synthesis

我目前正在开发一个个人项目:在Flash中创建一个用于实时音频合成的库.简而言之:用于连接波形发生器,滤波器,混频器等的工具,并为声卡提供原始(实时)数据.像max/msp或Reaktor之类的东西.

我已经有了一些工作,但我想知道我写的基本设置是否正确.我不想在以后遇到问题迫使我改变我的应用程序的核心(虽然这总是会发生).

基本上,我现在所做的是从链的末尾开始,在(原始)声音数据"输出"(到声卡)的地方.要做到这一点,我需要将一块字节(ByteArrays)写入一个对象,并获得该块,我要求连接到我的'Sound Out'模块的任何模块给我他的块.该模块对连接到其输入的模块执行相同的请求,并且一直发生,直到达到链的开始.

这是正确的方法吗?如果有反馈循环,或者如果有另一个模块没有输出,我可以想象遇到问题:如果我要在某处连接一个spectrumanalyzer,那将是链中的死胡同(一个没有输出的模块,只是一个输入).在我目前的设置中,这样的模块无法工作,因为我只从声音输出模块开始计算.

有没有人有这样的编程经验?我对正确方法的一些想法非常感兴趣.(为清楚起见:我不是在寻找特定的Flash实现,这就是为什么我没有在flash或actionscript下标记这个问题)

tda*_*ers 1

我不久前做了类似的事情,并且使用了与您相同的方法 - 从虚拟线路输出开始,并将信号跟踪回顶部。不过,我是按样本执行此操作,而不是按缓冲区执行此操作;如果我今天要编写相同的应用程序,我可能会选择每个缓冲区,因为我怀疑它会表现得更好。

光谱仪被设计为插入模块,也就是说,只有输入和输出都连接时它才会工作,并且会将输入不变地传递到输出。

为了处理反馈,我有一个特殊的辅助模块,它引入了 1 个样本延迟,并且每个周期仅获取一次输入。

另外,我认为使用浮点数进行所有内部处理,从而使用浮点数数组作为缓冲区,会比字节数组容易得多,并且它会节省您始终在整数和浮点数之间转换的额外工作。