题
有没有人知道的任何东西存在的Java世界地图的midi注意数字的具体注释的名称和八度的数字。例如,请参阅附表:
http://www.harmony-central.com/MIDI/Doc/table2.html
我想地图的midi注60号,它的对应注意名称(MiddleC)倍频4.我可以写一本实用新类/枚举,但这将是相当繁琐。有没有人知道为什么吗?
我具体使用这一编写一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)
.
编辑: 为JFugue5.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;
}
说明:
A0在南是第一个注意其数为21。我们调整指数从0(因此
noteNumber -= 21;
在开始).如果你注意的数字是0的基础,例如在钢琴从0到88,然后你可以发表评论,这条线。请注意,在这个解决方案,注的名字在列开始从A到G。
八度
noteNumber / 12 + 1
(其他资源最高限额为num/12).- 注意名称索引
noteNumber % 12
.
不隶属于 StackOverflow