質問

は誰かのものが存在する、ドキュメンテーションシステムに地図midiノート番号の個別注記名およびオクターブます。例えば、参照の参照テーブル:

http://www.harmony-central.com/MIDI/Doc/table2.html

たい地図は、midiノート番号60~まに対応するノート名(MiddleC)オクターブ4.ただ単に"サムネやエンジンのユーティリティクラス/enumこうのは面倒なのです。は誰もが知ですか。

私は具体的にはこの書は、tenori-On/MonomeクローンのJavaでは、これまでにない...

こうした結果を用い:

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;
}

説明:

  • A0midiに注目し、その数は21.また調整を開始する位置のインデックス0からで noteNumber -= 21; 初め).ご注番号は0で、例えば、ピアノから0 88きますので、そのコメントこの線ます。

  • ご注意このソリューションにおいては、お名前を配列での開始からG.

  • オクターブが noteNumber / 12 + 1 (や天井のnum/12).

  • ノート名を指 noteNumber % 12.
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top