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
}\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
// キーが未設定のときは、最初のコードから推測して設定\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
}\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
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