声音调制

我对声音了解的一些理论-声音是:
一个波,振荡,阻尼振荡,一个波可以用物理学来描述,一个波可以用数学来描述。

下载并测试程序


由于我们是在计算机上建模,因此使用字节序列(傅立叶级数)(字节数从-128到127到零)(即字节数组)描述波动。

振动方程最好用SIN函数来描述。

同意,如果我们仅通过数组运行SIN函数,那将太简单了。

因此,在有关Yamaha合成器设备描述的文章的指导下,我编写了以下算法:

1.使用SIN函数创建一个主波或建模波,这是一个可能对其他开发人员有用的公式:

for(int k = 0; k < SoundLabVisual.player.data.length;k++){ double sinusoid = amplitude1 * Math.sin(2 * (3.14/1 ) * k * frequency1 + faza); } 

其中:
幅度 1-幅度
频率 1-振荡频率
faza-振荡的初始阶段

2.使用第二个SIN函数,创建一个主波,其振幅为第一波的值:

 //c   double a1 = 0.1f; //c   double c1 = 0.1f; //c   double d1 = 0.1f; sinusoid = a1 + (sinusoid * Math.sin( (c1 * (double)k) * frequency2Double + d1 )); 


程序截图

图片

我将测试声音加载到lmms程序中。

图片

听mp3

将实现另一种算法,该算法将在通道上运行,如果可能的话,我将在第二篇文章中进行介绍。

更新:
根据评论者的评论,算法现在可以自己乘以彼此。

 if(jCheckBox8.isSelected()){ sinusoid = (a1 + (sinusoid * Math.sin( (c1 * (double)k) * frequency2Double + d1 ))) * (a1 + (sinusoid * Math.sin( (c1 * (double)k) * frequency2Double + d1 ))); }else{ sinusoid = a1 + (sinusoid * Math.sin( (c1 * (double)k) * frequency2Double + d1 )); } 


更新2:程序已更新,现在可以将波与声音混合。

Source: https://habr.com/ru/post/zh-CN431488/


All Articles