在大多数用于生成音调的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;
答案 0 :(得分:0)
抬头......你的所有结果都被填充在输出数组的第一个元素中。你想把它分配给buffer [i],你当前把所有东西都塞进了缓冲区[0]。
在您的代码段中,您使用变量frequency和hertz(这会让人感到困惑)。我相信你想要指定一个所需的音频,你需要规定一个sampling_rate。因此,您的相位增量将最终为freq * 2pi / sampling_rate,如果您通过索引变量进行缩放,则会给出离散的相位点。
另外,请确保您的采样率至少是所需频率的两倍(如果这样,请快速阅读奈奎斯特速率和香农的采样定理。
祝你好运