*/
public static class VersionInfo {
public static final String NAME = "MIDI Chord Helper";
- public static final String VERSION = "Ver.20161231.2";
- public static final String COPYRIGHT = "Copyright (C) 2004-2016";
+ public static final String VERSION = "Ver.20170103.1";
+ public static final String COPYRIGHT = "Copyright (C) 2004-2017";
public static final String AUTHER = "@きよし - Akiyoshi Kamide";
public static final String URL = "http://www.yk.rim.or.jp/~kamide/music/chordhelper/";
/**
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.Vector;
+import java.util.StringJoiner;
import javax.swing.JLabel;
if( i7 != null ) suffix += i7.getSymbol();
if( SUSPENDED.contains(i3) ) suffix += i3.getSymbol();
if( Interval.PARFECT5 != i5 ) suffix += i5.getSymbol();
- Vector<String> inParen = new Vector<String>();
+ StringJoiner inParen = new StringJoiner(",","(",")").setEmptyValue("");
for( IntervalGroup group : EXTENDED ) {
- Interval interval = intervalMap.get(group);
- if( interval != null ) inParen.add(interval.getSymbol());
+ Interval i9 = intervalMap.get(group);
+ if( i9 != null ) inParen.add(i9.getSymbol());
}
- if( ! inParen.isEmpty() ) suffix += "("+String.join(",",inParen)+")";
- String alias = symbolSuffixAliases.get(suffix);
+ String alias = symbolSuffixAliases.get(suffix += inParen);
return alias == null ? suffix : alias;
}
/**
if( i7 != null ) suffix += " " + i7.getDescription();
if( SUSPENDED.contains(i3) ) suffix += " " + i3.getDescription();
if( Interval.PARFECT5 != i5 ) suffix += " " + i5.getDescription();
- Vector<String> inParen = new Vector<String>();
+ StringJoiner inParen = new StringJoiner(",","(",")").setEmptyValue("");
for( IntervalGroup index : EXTENDED ) {
Interval i9 = intervalMap.get(index);
if( i9 != null ) inParen.add(i9.getDescription());
}
- if( ! inParen.isEmpty() ) suffix += "("+String.join(",",inParen)+")";
- String alias = nameSuffixAliases.get(suffix);
+ String alias = nameSuffixAliases.get(suffix += inParen);
return alias == null ? suffix : alias;
}
private static final List<Interval> SUSPENDED = Arrays.asList(
* @param language 言語モード
* @return 文字列表現
*/
- public String toStringIn(Language language) {
+ public String toStringIn(Language language) { return stringOf(majorCo5, language); }
+
+ /**
+ * 指定された五度圏インデックス値(メジャーキー基準)に対応する音階の文字列表現を、
+ * 指定された言語モードで返します。
+ * @param majorCo5 五度圏インデックス値(メジャーキー基準、すなわち0のときC)
+ * @param language 言語モード
+ * @return 文字列表現
+ * @throws IndexOutOfBoundsException
+ * 五度圏インデックス値がダブルフラット(F♭♭,C♭♭,…)からダブルシャープ(…,Ex,Bx)までの範囲(-15 ~ 19)を外れている場合
+ */
+ public static String stringOf(int majorCo5, Language language) {
return language.stringOf(majorCo5 + INDEX_OF_C);
}
/**
public static String noteNumberToSymbol(int noteNumber, int maxChars) {
int co5 = Music.mod12(Music.toggleCo5(noteNumber));
if( co5 == 11 ) co5 -= Music.SEMITONES_PER_OCTAVE; // E# -> F
- if( co5 < 6 ) return (new NoteSymbol(co5)).toString(); // F C G D A E B
+ if( co5 < 6 ) return stringOf(co5, Language.SYMBOL); // F C G D A E B
if( maxChars < 0 || maxChars >= "F# / Gb".length() ) return
- (new NoteSymbol(co5)).toString() + " / " +
- (new NoteSymbol(co5 - Music.SEMITONES_PER_OCTAVE)).toString();
+ stringOf(co5, Language.SYMBOL) + " / " +
+ stringOf(co5 - Music.SEMITONES_PER_OCTAVE, Language.SYMBOL);
if( co5 >= 8 ) co5 -= Music.SEMITONES_PER_OCTAVE; // G# -> Ab, D# -> Eb, A# -> Bb
- return (new NoteSymbol(co5)).toString(); // C# Eb F# Ab Bb
+ return stringOf(co5, Language.SYMBOL); // C# Eb F# Ab Bb
}
/**
* MIDIノート番号が示す音名を返します。