OSDN Git Service

・B♭/A♯のような音名を組み立てるstaticメソッド内からnewを排除(NoteSymbolを無駄にインスタンス化しないようにした)
authorAkiyoshi Kamide <kamide@yk.rim.or.jp>
Tue, 3 Jan 2017 16:18:18 +0000 (01:18 +0900)
committerAkiyoshi Kamide <kamide@yk.rim.or.jp>
Tue, 3 Jan 2017 16:18:18 +0000 (01:18 +0900)
・コード名の(11,13)のような部分を組み立てるためにStringJoinerを使うようにした

src/camidion/chordhelper/ChordHelperApplet.java
src/camidion/chordhelper/music/Chord.java
src/camidion/chordhelper/music/NoteSymbol.java

index 345f9c0..3a95954 100644 (file)
@@ -283,8 +283,8 @@ public class ChordHelperApplet extends JApplet {
         */
        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/";
                /**
index f61bc63..4652954 100644 (file)
@@ -8,7 +8,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.Vector;
+import java.util.StringJoiner;
 
 import javax.swing.JLabel;
 
@@ -117,13 +117,12 @@ public class Chord {
                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;
        }
        /**
@@ -139,13 +138,12 @@ public class Chord {
                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(
index a9d5e46..74a0ff6 100644 (file)
@@ -216,7 +216,18 @@ public class NoteSymbol {
         * @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);
        }
        /**
@@ -245,14 +256,14 @@ public class NoteSymbol {
        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ノート番号が示す音名を返します。