OSDN Git Service

・歌詞テキスト表示欄に誤った音名の(A~Gではない)コードを入れたときにダイアログを出すようにした
[midichordhelper/MIDIChordHelper.git] / src / camidion / chordhelper / music / ChordProgression.java
index f505413..60b46e8 100644 (file)
@@ -294,51 +294,52 @@ public class ChordProgression {
                if( source_text == null ) return;\r
                Measure measure;\r
                Line line;\r
-               String[] lines_src, measures_src, elements_src;\r
-               Chord last_chord = null;\r
-               String key_regex = "^Key(\\s*):(\\s*)";\r
+               String[] linesSrc, measuresSrc, elementsSrc;\r
+               Chord lastChord = null;\r
+               String keyHeaderRegex = "^Key(\\s*):(\\s*)";\r
+               String keyValueRegex = "[A-G]+.*$";\r
                //\r
                // キーであるかどうか見分けるためのパターン\r
-               Pattern key_match_pattern = Pattern.compile(\r
-                               key_regex+".*$", Pattern.CASE_INSENSITIVE\r
-                               );\r
+               Pattern keyMatchPattern = Pattern.compile(\r
+                       keyHeaderRegex + keyValueRegex,\r
+                       Pattern.CASE_INSENSITIVE\r
+               );\r
                // キーのヘッダーを取り除くためのパターン\r
-               Pattern key_repl_pattern = Pattern.compile(\r
-                               key_regex, Pattern.CASE_INSENSITIVE\r
-                               );\r
+               Pattern keyReplPattern = Pattern.compile(\r
+                       keyHeaderRegex, Pattern.CASE_INSENSITIVE\r
+               );\r
                //\r
-               lines_src = source_text.split("[\r\n]+");\r
+               linesSrc = source_text.split("[\r\n]+");\r
                lines = new Vector<Line>();\r
-               for( String line_src : lines_src ) {\r
-                       measures_src = line_src.split("\\|");\r
-                       if( measures_src.length > 0 ) {\r
-                               String key_string = measures_src[0].trim();\r
-                               if( key_match_pattern.matcher(key_string).matches() ) {\r
-                                       key = new Key(\r
-                                                       key_repl_pattern.matcher(key_string).replaceFirst("")\r
-                                                       );\r
-                                       // System.out.println("Key = " + key);\r
-                                       continue;\r
+               for( String line_src : linesSrc ) {\r
+                       measuresSrc = line_src.split("\\|");\r
+                       if( measuresSrc.length > 0 ) {\r
+                               String keyString = measuresSrc[0].trim();\r
+                               if( keyMatchPattern.matcher(keyString).matches() ) {\r
+                                       try {\r
+                                               key = new Key(keyReplPattern.matcher(keyString).replaceFirst(""));\r
+                                               continue;\r
+                                       } catch( Exception e ) {\r
+                                               e.printStackTrace();\r
+                                       }\r
                                }\r
                        }\r
                        line = new Line();\r
-                       for( String measure_src : measures_src ) {\r
-                               elements_src = measure_src.split("[ \t]+");\r
+                       for( String measureSrc : measuresSrc ) {\r
+                               elementsSrc = measureSrc.split("[ \t]+");\r
                                measure = new Measure();\r
-                               for( String element_src : elements_src ) {\r
-                                       if( element_src.isEmpty() ) continue;\r
-                                       if( element_src.equals("%") ) {\r
+                               for( String elementSrc : elementsSrc ) {\r
+                                       if( elementSrc.isEmpty() ) continue;\r
+                                       if( elementSrc.equals("%") ) {\r
                                                if( measure.addBeat() == 0 ) {\r
-                                                       measure.add( new ChordStroke(last_chord) );\r
+                                                       measure.add( new ChordStroke(lastChord) );\r
                                                }\r
                                                continue;\r
                                        }\r
                                        try {\r
-                                               measure.add( new ChordStroke(\r
-                                                               last_chord = new Chord(element_src)\r
-                                                               ));\r
+                                               measure.add(new ChordStroke(lastChord = new Chord(elementSrc)));\r
                                        } catch( IllegalArgumentException ex ) {\r
-                                               measure.add( new Lyrics(element_src) );\r
+                                               measure.add( new Lyrics(elementSrc) );\r
                                        }\r
                                }\r
                                line.add(measure);\r
@@ -353,7 +354,7 @@ public class ChordProgression {
        }\r
 \r
        // コード進行の移調\r
-       public void transpose(int chromatic_offset) {\r
+       public void transpose(int chromaticOffset) {\r
                for( Line line : lines ) {\r
                        for( Measure measure : line ) {\r
                                for( int i=0; i<measure.size(); i++ ) {\r
@@ -365,13 +366,13 @@ public class ChordProgression {
                                                // キーが未設定のときは、最初のコードから推測して設定\r
                                                if( key == null ) key = new Key( new_chord );\r
                                                //\r
-                                               new_chord.transpose( chromatic_offset, key );\r
+                                               new_chord.transpose( chromaticOffset, key );\r
                                                measure.set( i, new ChordStroke( new_chord, cs.beat_length ) );\r
                                        }\r
                                }\r
                        }\r
                }\r
-               key.transpose(chromatic_offset);\r
+               key.transpose(chromaticOffset);\r
        }\r
        // 異名同音の♭と#を切り替える\r
        public void toggleEnharmonically() {\r
@@ -475,12 +476,17 @@ public class ChordProgression {
        }\r
        /**\r
         * 小節数、トラック仕様、コード進行をもとに MIDI シーケンスを生成します。\r
+        * @param ppq 分解能(pulse per quarter)\r
+        * @param startMeasure 開始小節位置\r
+        * @param endMeasure 終了小節位置\r
+        * @param firstTrack 最初のトラックの仕様\r
+        * @param trackSpecs 残りのトラックの仕様\r
         * @return MIDIシーケンス\r
         */\r
        public Sequence toMidiSequence(\r
-               int ppq, int start_measure_pos, int end_measure_pos,\r
-               FirstTrackSpec first_track,\r
-               Vector<AbstractNoteTrackSpec> track_specs\r
+               int ppq, int startMeasure, int endMeasure,\r
+               FirstTrackSpec firstTrack,\r
+               Vector<AbstractNoteTrackSpec> trackSpecs\r
        ) {\r
                Sequence seq;\r
                try {\r
@@ -490,25 +496,25 @@ public class ChordProgression {
                        return null;\r
                }\r
                // マスタートラックの生成\r
-               if( first_track == null ) {\r
-                       first_track = new FirstTrackSpec();\r
+               if( firstTrack == null ) {\r
+                       firstTrack = new FirstTrackSpec();\r
                }\r
-               first_track.key = this.key;\r
-               first_track.createTrack( seq, start_measure_pos, end_measure_pos );\r
+               firstTrack.key = this.key;\r
+               firstTrack.createTrack( seq, startMeasure, endMeasure );\r
                //\r
                // 中身がなければここで終了\r
-               if( lines == null || track_specs == null ) return seq;\r
+               if( lines == null || trackSpecs == null ) return seq;\r
                //\r
                // コード進行の中に時間軸(MIDI tick)を書き込む\r
-               setTickPositions( first_track );\r
+               setTickPositions(firstTrack);\r
                //\r
                // コードのテキストと歌詞を書き込む\r
-               setChordSymbolTextTo( first_track );\r
-               setLyricsTo( first_track );\r
+               setChordSymbolTextTo(firstTrack);\r
+               setLyricsTo(firstTrack);\r
                //\r
                // 残りのトラックを生成\r
-               for( AbstractNoteTrackSpec ts : track_specs ) {\r
-                       ts.createTrack( seq, first_track );\r
+               for( AbstractNoteTrackSpec ts : trackSpecs ) {\r
+                       ts.createTrack(seq, firstTrack);\r
                        if( ts instanceof DrumTrackSpec ) {\r
                                ((DrumTrackSpec)ts).addDrums(this);\r
                        }\r