我正在尝试创建音乐专业转换器。
剂量任何人都知道如何做

到目前为止,我有

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)-输出0
rootNote = 60(C),note = 61(C#)-输出2
rootNote = 60(C),note = 62(D)-输出4
rootNote = 60(C),note = 63(D#)-输出5
rootNote = 61(C#),note = 60(C)-输出0
rootNote = 61(C#),note = 61(C#)-输出1
rootNote = 61(C#),note = 62(D)-输出3
rootNote = 61(C#),note = 63(D#)-输出5


我可能真的很密集,但我恐怕看不到那里的图案。

主音阶当然由音调,音调,半音,音调,音调,音调,半音的顺序组成,但是这如何映射到您的输出?

10-06 10:57