是否有人知道的东西存在于Java世界中,以MIDI音符号映射到特定的音符名称和倍频数。例如,参照参考表:
http://www.harmony-central.com/MIDI/Doc/table2.html
我要地图MIDI音符编号60到它在倍频4对应的音符名(MiddleC)我可以写这样的实用工具类/枚举,但它会相当繁琐。有谁知道的东西吗?
我专门用这个用Java编写一个TENORI开/ Monome克隆,到目前为止好...
解
这正是我最终使用:
String[] noteString = new String[] { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
int octave = (initialNote / 12) - 1;
int noteIndex = (initialNote % 12);
String note = noteString[noteIndex];
我不相信你的建议是乏味的。这真的只是一个分而取模操作,得到一个八度,其他的获得说明。
octave = int (notenum / 12) - 1;
note = substring("C C#D D#E F F#G G#A A#B ",(notenum % 12) * 2, 2);
在真正的Java,而不是那个伪码以上,就可以使用这样的:
public class Notes {
public static void main(String [] args) {
String notes = "C C#D D#E F F#G G#A A#B ";
int octv;
String nt;
for (int noteNum = 0; noteNum < 128; noteNum++) {
octv = noteNum / 12 - 1;
nt = notes.substring((noteNum % 12) * 2, (noteNum % 12) * 2 + 2);
System.out.println("Note # " + noteNum + " = octave " + octv + ", note " + nt);
}
}
}
在JFugue,该Note
类有一个正是这样做的一个实用工具方法 - 看public static String getStringForNote(byte noteValue)
。
编辑:作为JFugue 5.0及更高版本,Note
类具有从MIDI音符值得到一个字符串表示的几个实用方法:
getToneString(byte noteValue)
60
的值转换为字符串C5
getToneStringWithoutOctave(byte noteValue)
60
的值转换为字符串C
getPercussionString(byte noteValue)
60
的值转换为字符串"[AGOGO]"
这些替代原来的getStringForNote()
方法。
public static String getNoteName(int noteNumber){
noteNumber -= 21; // see the explanation below.
String[] notes = new String[] {"A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#"};
int octave = noteNumber / 12 + 1;
String name = notes[noteNumber % 12];
return name + octave;
}
说明:
noteNumber -= 21;
开头)。如果你的笔记数字是基于0的,例如在钢琴从0到88,那么你可以评论这条线了。noteNumber / 12 + 1
(或数/ 12的上限)。noteNumber % 12
。