幼稚正弦波發生器採用一組n個值的和在每一個上調用sin函數:避免罪()中的音頻合成器調用
for i = 0; i < 2*pi ; i = i+step {
output = append(output, sin(i))
}
然而,這使得大量的呼叫到一個潛在的昂貴的sin函數,並且未能利用所有樣本都是連續的這一事實,之前已經計算過,並且將四捨五入爲整數(PCM)。那麼,還有什麼替代方案?我想要沿着Bresenham's circle algorithm或預先計算一個高分辨率的樣本,然後縮小每一個第n個入口的尺寸,但如果有一個'工業強度'解決這個問題,我' d愛聽到它。
你似乎在你的問題中提到sin()值將四捨五入到最接近的整數。這是真的? – user2566092
啊,應該澄清了。這是進入一個wav編碼器,所以它是PCM。因此,任何浮點值都將結束爲一個有符號的16位整數。 –
你需要多大的頻率分辨率? – jaket