用Java生成一个音调并改变它的音色?

时间:2014-07-22 13:36:09

标签: java audio-processing

我想制作一个可以生成音符的Java程序,并在播放时改变它的音色和音高。

我想通过使用数字来改变音色,因此我可以平滑地从一个音色转换到另一个音色,同样适用于音高。

我的目标是运行这样的代码

for(int i = 0; i < 20; i++ ) {
   toneGenerator.changeTimber( toneGenerator.timbre + 10.0 );
   toneGenerator.changePitch ( toneGenerator.pitch  + 10.0 );
}

目前我还不了解PC上的声音是如何组成的,所以我只是想问一下是否有人知道我学习如何做这两件事的最短途径。

我希望数学很简单,但看起来不太可能。

1 个答案:

答案 0 :(得分:0)

这是Java中的音调合成器,具有多种功能。

  • 控制音高(以每秒周期数计)
  • 幅度控制(以数字步进)
  • 最小和最大统计数据,用于指示幅度何时过高(导致音频剪辑失真)
  • 控制音调持续时间(以秒为单位)
  • 控制任意数量谐波的相对幅度(决定音质或波形,这是产生音符音色的几个因素之一)

在持续时间内实时修改主要谐波和其他谐波的幅度不是SimpleSynth类的特征之一。物理乐器的音符具有该功能。 SimpleSynth类不会播放音符序列,但可以相对轻松地对其进行修改。

主要是,它很好地演示了音频合成,谐波和使用Java的原理,通过运行时的默认音频输出播放一系列数字音频样本。没有设施可以使谐波发生相移,但这是一个有些无关紧要的缺点,因为谐波的相位特性不是人耳能够检测到的。

数学在playSound()方法的评论部分解释。如果你学习了最基本的三角学课程,那么你就有了理解这个课程的数学理论。阅读一些有关数字音频,信号采样以及如何在吉他等弦乐器上采集谐波的方法也可以帮助理解。

标准数字音频术语用于常量和变量命名。如果希望在音符的过程中修改音高和音色,那么产生这种效果的数学并不是微不足道的,但是一旦学习了下面的数学,就会有一个理解的基础,并且可以逐步增加进一步的合成特征。 / p>

recyclerview