OSDN Git Service

リファクタリング(キーのメジャー/マイナーを表す値を整数からenumに変更)
authorAkiyoshi Kamide <kamide@yk.rim.or.jp>
Sun, 11 Dec 2016 17:02:06 +0000 (02:02 +0900)
committerAkiyoshi Kamide <kamide@yk.rim.or.jp>
Sun, 11 Dec 2016 17:02:06 +0000 (02:02 +0900)
src/camidion/chordhelper/ChordHelperApplet.java
src/camidion/chordhelper/midieditor/KeySignatureSelecter.java
src/camidion/chordhelper/music/Chord.java
src/camidion/chordhelper/music/ChordProgression.java
src/camidion/chordhelper/music/Key.java
src/camidion/chordhelper/music/NoteSymbolLanguage.java

index d1cb75e..0344c93 100644 (file)
@@ -283,7 +283,7 @@ public class ChordHelperApplet extends JApplet {
         */
        public static class VersionInfo {
                public static final String      NAME = "MIDI Chord Helper";
-               public static final String      VERSION = "Ver.20161205.1";
+               public static final String      VERSION = "Ver.20161211.1";
                public static final String      COPYRIGHT = "Copyright (C) 2004-2016";
                public static final String      AUTHER = "@きよし - Akiyoshi Kamide";
                public static final String      URL = "http://www.yk.rim.or.jp/~kamide/music/chordhelper/";
index 0dfc99f..aa4b013 100644 (file)
@@ -53,25 +53,18 @@ public class KeySignatureSelecter extends JPanel implements ActionListener {
        }
        public void clear() { setKey(new Key("C")); }
        public void setKey( Key key ) {
-               if( key == null ) {
-                       clear();
-                       return;
-               }
+               if( key == null ) { clear(); return; }
                keysigCombobox.setSelectedIndex( key.toCo5() + 7 );
-               if( minorCheckbox == null )
-                       return;
-               switch( key.majorMinor() ) {
-               case Key.MINOR : minorCheckbox.setSelected(true); break;
-               case Key.MAJOR : minorCheckbox.setSelected(false); break;
-               }
+               if( minorCheckbox == null ) return;
+               minorCheckbox.setSelected(key.majorMinor() == Key.MajorMinor.MINOR);
        }
        public Key getKey() {
-               int minor = (
-                       minorCheckbox == null ? Key.MAJOR_OR_MINOR :
-                       isMinor() ? Key.MINOR :
-                       Key.MAJOR
+               Key.MajorMinor majorMinor = (
+                       minorCheckbox == null ? Key.MajorMinor.MAJOR_OR_MINOR :
+                       isMinor() ? Key.MajorMinor.MINOR :
+                       Key.MajorMinor.MAJOR
                );
-               return new Key(getKeyCo5(),minor);
+               return new Key(getKeyCo5(),majorMinor);
        }
        public int getKeyCo5() {
                return keysigCombobox.getSelectedIndex() - 7;
index d5c3e09..9baff14 100644 (file)
@@ -145,7 +145,7 @@ public class Chord implements Cloneable {
         */
        public Chord(Key key) {
                int keyCo5 = key.toCo5();
-               if( key.majorMinor() == Key.MINOR ) {
+               if( key.majorMinor() == Key.MajorMinor.MINOR ) {
                        keyCo5 += 3;
                        set(Interval.MINOR);
                }
index d294a96..b46723e 100644 (file)
@@ -184,7 +184,7 @@ public class ChordProgression {
         */
        public ChordProgression( int measureLength, int timeSignatureUpper ) {
                int key_co5 = (int)(Math.random() * 12) - 5;
-               key = new Key( key_co5, Key.MAJOR );
+               key = new Key(key_co5, Key.MajorMinor.MAJOR);
                lines = new Vector<Line>();
                Line line = new Line();
                boolean is_end;
index c8bd9a2..5b29c5c 100644 (file)
@@ -14,17 +14,25 @@ package camidion.chordhelper.music;
  */
 public class Key implements Cloneable {
        /**
-        * ã\83¡ã\82¸ã\83£ã\83¼ã\81\8bã\83\9eã\82¤ã\83\8aã\83¼ã\81\8bã\81\8cç\89¹å®\9aã\81§ã\81\8dã\81¦ã\81\84ã\81ªã\81\84ã\81\93ã\81¨ã\82\92示ã\81\99å\80¤
+        * ã\83¡ã\82¸ã\83£ã\83¼ã\81¨ã\83\9eã\82¤ã\83\8aã\83¼ã\81®ã\81©ã\81¡ã\82\89ã\81\8bã\81\82ã\82\8bã\81\84ã\81¯ä¸¡æ\96¹ã\81§ã\81\82ã\82\8bã\81\93ã\81¨ã\82\92示ã\81\99å\9e\8b
         */
-       public static final int MAJOR_OR_MINOR = 0;
-       /**
-        * メジャーキー(長調)
-        */
-       public static final int MAJOR = 1;
-       /**
-        * マイナーキー(短調)
-        */
-       public static final int MINOR = -1;
+       public enum MajorMinor {
+               /** メジャーキー(長調) */
+               MAJOR {
+                       @Override
+                       public MajorMinor opposite() { return MINOR; }
+               },
+               /** マイナーキー(短調) */
+               MINOR {
+                       @Override
+                       public MajorMinor opposite() { return MAJOR; }
+               },
+               /** メジャーまたはマイナー */
+               MAJOR_OR_MINOR;
+
+               /** 反対の調を返します。 */
+               public MajorMinor opposite() { return this; }
+       }
        /**
         * この調の五度圏インデックス値
         */
@@ -32,7 +40,7 @@ public class Key implements Cloneable {
        /**
         * メジャー・マイナーの種別
         */
-       private int majorMinor;
+       private MajorMinor majorMinor;
        /**
         * 調号が空のキー(ハ長調またはイ短調)を構築します。
         */
@@ -43,7 +51,7 @@ public class Key implements Cloneable {
         *
         * @param co5 五度圏インデックス値
         */
-       public Key(int co5) { setKey(co5, MAJOR_OR_MINOR); }
+       public Key(int co5) { setKey(co5, MajorMinor.MAJOR_OR_MINOR); }
        /**
         * 指定の五度圏インデックス値を持つ、
         * メジャー/マイナーを指定した調を構築します。
@@ -51,7 +59,7 @@ public class Key implements Cloneable {
         * @param co5 五度圏インデックス値
         * @param majorMinor {@link #MAJOR}、{@link #MINOR}、{@link #MAJOR_OR_MINOR} のいずれか
         */
-       public Key(int co5, int majorMinor) { setKey(co5, majorMinor); }
+       public Key(int co5, MajorMinor majorMinor) { setKey(co5, majorMinor); }
        /**
         * 指定の五度圏インデックス値を持つ、
         * メジャー/マイナーの明確な調を構築します。
@@ -96,11 +104,11 @@ public class Key implements Cloneable {
                return false;
        }
        @Override
-       public int hashCode() { return majorMinor * 256 + co5 ; }
+       public int hashCode() { return majorMinor.ordinal() * 256 + co5 ; }
        private void setKey(int co5, boolean isMinor) {
-               setKey( co5, isMinor ? MINOR : MAJOR );
+               setKey( co5, isMinor ? MajorMinor.MINOR : MajorMinor.MAJOR );
        }
-       private void setKey(int co5, int majorMinor) {
+       private void setKey(int co5, MajorMinor majorMinor) {
                this.co5 = co5;
                this.majorMinor = majorMinor;
                normalize();
@@ -121,7 +129,7 @@ public class Key implements Cloneable {
        public byte[] getBytes() {
                byte data[] = new byte[2];
                data[0] = (byte)(co5 & 0xFF);
-               data[1] = (byte)(majorMinor == MINOR ? 1 : 0);
+               data[1] = (byte)(majorMinor == MajorMinor.MINOR ? 1 : 0);
                return data;
        }
        /**
@@ -131,9 +139,9 @@ public class Key implements Cloneable {
        public int toCo5() { return co5; }
        /**
         * メジャー/マイナーの区別を返します。
-        * @return {@link #MAJOR}、{@link #MINOR}、{@link #MAJOR_OR_MINOR} のいずれか
+        * @return メジャー/マイナーの区別
         */
-       public int majorMinor() { return majorMinor; }
+       public MajorMinor majorMinor() { return majorMinor; }
        /**
         * 相対ドの音階を返します。
         * @return 相対ドの音階(0~11)
@@ -148,7 +156,7 @@ public class Key implements Cloneable {
         */
        public int rootNoteNumber() {
                int n = relativeDo();
-               return majorMinor==MINOR ? Music.mod12(n-3) : n;
+               return majorMinor==MajorMinor.MINOR ? Music.mod12(n-3) : n;
        }
        /**
         * 指定されたノート番号の音が、この調のスケールの構成音か調べます。
@@ -199,7 +207,7 @@ public class Key implements Cloneable {
         *
         * @return 平行調
         */
-       public Key relativeKey() { return new Key(co5, -majorMinor); }
+       public Key relativeKey() { return new Key(co5, majorMinor.opposite()); }
        /**
         * 同主調を生成して返します。
         * これは元の調とルート音が同じで、メジャーとマイナーが異なる調です。
@@ -213,8 +221,8 @@ public class Key implements Cloneable {
         */
        public Key parallelKey() {
                switch( majorMinor ) {
-               case MAJOR: return new Key( co5-3, MINOR );
-               case MINOR: return new Key( co5+3, MAJOR );
+               case MAJOR: return new Key( co5-3, MajorMinor.MINOR );
+               case MINOR: return new Key( co5+3, MajorMinor.MAJOR );
                default: return new Key(co5);
                }
        }
index b10dfff..ef2cb91 100644 (file)
@@ -113,11 +113,11 @@ public enum NoteSymbolLanguage {
         * @param majorMinor 負数:マイナー 0:不明 正数:メジャー
         * @return 調の文字列表現
         */
-       public String keyStringOf(NoteSymbol note, int majorMinor) {
+       public String keyStringOf(NoteSymbol note, Key.MajorMinor majorMinor) {
                String s = "";
-               if( majorMinor >= 0 ) {
+               if( majorMinor == Key.MajorMinor.MAJOR || majorMinor == Key.MajorMinor.MAJOR_OR_MINOR ) {
                        s = note.toStringIn(this) + major;
-                       if( majorMinor > 0 ) return s;
+                       if( majorMinor == Key.MajorMinor.MAJOR ) return s;
                        s += majorMinorDelimiter;
                }
                return s + note.toMinorKeyRootStringIn(this) + minor;