我正在尝试创建音乐专业转换器。
剂量任何人都知道如何做
到目前为止,我有
rootNote是像cMajor或gMajor这样的音阶基本音符
请注意,我想转换为0-126的大比例尺
如果我插入rootNote 60和note 60,则正确的返回值为0,
如果我插入rootNote 60和note 61,则正确的返回值为2,
如果我插入rootNote 60和note 62,则正确的返回值为4,
如果我插入rootNote 60和note 63,则正确的返回值为5,
如果我插入rootNote 61和note 60,则正确的返回值为0,
如果我插入rootNote 61和note 61,则正确的返回值为1,
如果我插入rootNote 61和note 62,则正确的返回值为3,
如果我插入rootNote 61和note 63,则正确的返回值为5,
好吧,我有另一个,它似乎工作
我想以大比例绘制我的序列
但是我可以使用某种公式吗?
。
public int getINMajorScale(int note, int rootNote)
{
List<int> majorScale = new List<int>();
//int bNote = (int)_bNote.CurrentValue;
int bNoteMpl = bNote / 12;
bNote = 12 + (bNote - (12 * bNoteMpl)) - 7;
majorScale.Add(bNote + (12 * bNoteMpl));
int tBnote = bNote;
int res = 0;
for (int i = bNote; i < bNote + 6; i++)
{
//algorytm
res = tBnote + 7;
int mod = 0;
if (res >= 12)
{
mod = res / 12;
res = res - 12 * mod;
}
tBnote = res;
majorScale.Add(res + (bNoteMpl * 12));
}
majorScale.Sort();
int modNuller = 0;
if (nmr >= 7)
{
modNuller = nmr / 7;
nmr = nmr - 7 * modNuller;
}
return (majorScale[nmr] + (modNuller *12));
}
但这显然是有缺陷的。
最佳答案
代码本身存在的问题:modScaling
只不过是rootNote % 12
,因为您总是输入0和11
您定义mNote
但从不使用它i
从未在for
循环中使用,因此5次迭代中的每一次都打印相同的内容。
好的,让我们将您的示例转换成实际的注释以使其更易于理解(数字可能对应于MIDI notes):rootNote = 60
(C),note = 60
(C)-输出0rootNote = 60
(C),note = 61
(C#)-输出2rootNote = 60
(C),note = 62
(D)-输出4rootNote = 60
(C),note = 63
(D#)-输出5rootNote = 61
(C#),note = 60
(C)-输出0rootNote = 61
(C#),note = 61
(C#)-输出1rootNote = 61
(C#),note = 62
(D)-输出3rootNote = 61
(C#),note = 63
(D#)-输出5
我可能真的很密集,但我恐怕看不到那里的图案。
主音阶当然由音调,音调,半音,音调,音调,音调,半音的顺序组成,但是这如何映射到您的输出?