OSDN Git Service

新シーケンス作成画面に文字コード選択プルダウンを追加
[midichordhelper/MIDIChordHelper.git] / src / camidion / chordhelper / music / FirstTrackSpec.java
1 package camidion.chordhelper.music;
2
3 import java.nio.charset.Charset;
4
5 import javax.sound.midi.Sequence;
6 import javax.sound.midi.Track;
7
8 // 最初のトラック専用
9 //
10 public class FirstTrackSpec extends AbstractTrackSpec {
11         private static final byte DEFAULT_TEMPO_DATA[] = { 0x07, (byte)0xA1, 0x20 };    // 120[QPM]
12         private static final byte DEFAULT_TIMESIG_DATA[] = { 0x04, 0x02, 0x18, 0x08 };  // 4/4
13         byte tempoData[] = DEFAULT_TEMPO_DATA;
14         byte timesigData[] = DEFAULT_TIMESIG_DATA;
15         Key key = null;
16         long ticksPerMeasure;
17         public FirstTrackSpec() { }
18         public FirstTrackSpec(String name) { this.name = name; }
19         public FirstTrackSpec(String name, byte[] tempoData, byte[] timesigData) {
20                 this.name = name;
21                 if( tempoData != null ) this.tempoData = tempoData;
22                 if( timesigData != null ) this.timesigData = timesigData;
23         }
24         public Track createTrack(Sequence seq, Charset charset) {
25                 return createTrack(seq, charset, 0, 0);
26         }
27         public Track createTrack(Sequence seq, Charset charset, int startMeasurePos, int endMeasurePos) {
28                 preMeasures = startMeasurePos - 1;
29                 Track track = super.createTrack(seq, this, charset);
30                 if( tempoData == null ) tempoData = DEFAULT_TEMPO_DATA;
31                 addTempo(tempoData, 0);
32                 if( timesigData == null ) timesigData = DEFAULT_TIMESIG_DATA;
33                 addTimeSignature(timesigData, 0);
34                 if( key != null ) addKeySignature( key, 0 );
35                 ticksPerMeasure = (long)(( 4 * seq.getResolution() * timesigData[0] ) >> timesigData[1]);
36                 addEOT( endMeasurePos * ticksPerMeasure );
37                 return track;
38         }
39         public boolean addKeySignature( Key key, long tickPos ) {
40                 return addMetaEventTo( 0x59, key.getBytes(), tickPos );
41         }
42         public boolean addTempo( byte data[], long tickPos ) {
43                 return addMetaEventTo( 0x51, data, tickPos );
44         }
45         public boolean addTimeSignature( byte data[], long tickPos ) {
46                 return addMetaEventTo( 0x58, data, tickPos );
47         }
48 }