gpt4 book ai didi

Java midi 音符通过音符的 Octave 音程映射到字符串

转载 作者:行者123 更新时间:2023-11-29 06:03:21 25 4
gpt4 key购买 nike

在我的项目中,我希望至少能够告知用户他们需要弹奏的音符在哪个弦上。我可以得到音符及其 Octave 音阶,但正如我发现的那样,该音符及其 Octave 音阶可以出现在吉他指板上的多个位置。

所以我的问题是:是否可以将 MIDI 音符映射到吉他弦?

最佳答案

以下代码获取 MIDI 音符值并返回吉他指板上最接近乐器末尾的位置。零品是空弦。

static class Fingering {
int string;
int fret;

public String toString() {
return "String : " + stringNames[string] + ", fret : " + fret;
}
}

static String[] stringNames = new String[] {"Low E", "A", "D", "G", "B", "High E"};

/** Array showing guitar string's relative pitches, in semi-tones, with "0" being low E */
static int[] strings = new int[]{64, 69, 74, 79, 83, 88};



public static Fingering getIdealFingering(int note) {
if (note < strings[0])
throw new RuntimeException("Note " + note + " is not playable on a guitar in standard tuning.");

Fingering result = new Fingering();

int idealString = 0;
for (int x = 1; x < strings.length; x++) {
if (note < strings[x])
break;
idealString = x;
}

result.string = idealString;
result.fret = note - strings[idealString];

return result;
}

public static void main(String[] args) {
System.out.println(getIdealFingering(64)); // Low E
System.out.println(getIdealFingering(66)); // F#
System.out.println(getIdealFingering(72)); // C on A string
System.out.println(getIdealFingering(76)); // E on D string
System.out.println(getIdealFingering(88)); // guitar's high e string, open
System.out.println(getIdealFingering(100)); // high E, 12th fret
System.out.println(getIdealFingering(103)); // high G
}

结果:

String : Low E, fret : 0
String : Low E, fret : 2
String : A, fret : 3
String : D, fret : 2
String : High E, fret : 0
String : High E, fret : 12
String : High E, fret : 15

关于Java midi 音符通过音符的 Octave 音程映射到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9352615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com