用Java生成声音

时间:2016-11-28 16:46:48

标签: java signal-processing trigonometry

在大多数用于生成音调的Java程序中,使用以下语句:

 for(int i=0; i<milliseconds*frequency/1000; i++){
    double angle = i/(frequency/hertz)*2.0*Math.PI;
    buffer[0]=(byte)(Math.sin(angle)*volume);
 }

我知道sin函数返回的角度的Math.sin(angle)值存储在缓冲区数组中。但是这个陈述如何用于生成波形

double angle = i/(frequency/hertz)*2.0*Math.PI;

1 个答案:

答案 0 :(得分:0)

抬头......你的所有结果都被填充在输出数组的第一个元素中。你想把它分配给buffer [i],你当前把所有东西都塞进了缓冲区[0]。

在您的代码段中,您使用变量frequency和hertz(这会让人感到困惑)。我相信你想要指定一个所需的音频,你需要规定一个sampling_rate。因此,您的相位增量将最终为freq * 2pi / sampling_rate,如果您通过索引变量进行缩放,则会给出离散的相位点。

另外,请确保您的采样率至少是所需频率的两倍(如果这样,请快速阅读奈奎斯特速率和香农的采样定理。

祝你好运