【发布时间】:2022-01-24 03:36:23
【问题描述】:
我正在 Unity (C#) 中制作类似 Theremin 的应用程序。
我有水平轴 X,我可以在其上单击(用鼠标或智能手机上的手指)。 这个 X 轴决定了将要播放的频率。 用户将指定电路板的频率范围(X 轴),例如从频率 261.63(注 C4)到 523.25(注 C5)。
我将计算x_position_ratio,它是一个介于 0 和 1 之间的数字,用于确定用户在 X 轴上单击的位置(0 位于最左侧(本例中为 C4),1 位于最右侧(注 C5))
由此,我将通过方程式计算播放频率
float freqRange = maxFreq - minFreq;
float frequency = (x_position_ratio * freqRange) + minFreq;
然后播放frequency。它工作得很好。
如果我在黑板上画出音符(X 轴),我们可以看到,频率越高,两个音符之间的跳跃就越高。
// Drawing just note A4 to demonstrate the code
float a4 = 440.0f //frequency of note A4
float x_position = (a4 - minFreq) / freqRange;
loc_x_position表示note在X轴0到1之间的位置
问题:
我想在两个音符之间进行同样的跳跃(如果你明白我的意思,让它成为线性而不是指数)。在 Wikipedia Piano_key_frequencies 上找到了方程式,但它是用于密钥的。我希望它适用于每个频率,但我无法在我发布的 2 个代码示例中弄清楚如何实现它
【问题讨论】:
标签: c# unity3d math audio frequency