SMF

# SMF モジュール

## クラス

- Sequence <format, division>
- Track
- Event <offset>
  - MIDIMessage
    - ChannelMessage <..., ch>
      - VoiceMessage
        - NoteOff <..., note, vel>
        - NoteOn <..., note, vel>
        - PolyphonicKeyPressure <..., note, val>
        - ControlChange <..., num, val>
        - ProgramChange <..., num>
        - ChannelPressure <..., val>
        - PitchBendChange <..., val>
      - ChannelModeMessage <..., num, val>
  - SystemMessage
    - Exclusive
      - ExclusiveF0 <..., data>
      - ExclusiveF7 <..., data>
  - Meta <..., type>
    - SequenceNumber <..., num>
    - Text <..., text>
      - GeneralPurposeText (Text01)
      - CopyrightNotice (Text02)
      - TrackName (SequenceName, Text03)
      - InstrumentName (Text04)
      - Lyric (Text05)
      - Marker (Text06)
      - CuePoint (Text07)
      - ProgramName (Text08)
      - DeviceName (Text09)
      - Text0A
      - Text0B
      - Text0C
      - Text0D
      - Text0E
      - Text0F
    - ChannelPrefix <..., ch>
    - MIDIPort <..., num>
    - EndOfTrack
    - SetTempo <..., tempo>
    - SMPTEOffset <..., hr, mn, se, fr, ff>
    - TimeSignature <..., nn, dd, cc, bb>
    - KeySignature <..., sf, mi>
    - SequencerSpecific <..., data>

## Sequence

シーケンスを表現するクラスです。シーケンスはトラックをもちます。

### スーパークラス

Object

### クラスメソッド

decode(str)

  文字列から読みこみます。

decodeio(io)

  IO から読みこみます。

decodefile(fn)

  ファイルから読みこみます。

new([format=1[, division=96]])

  シーケンスオブジェクトを作成します。

### アクセサ

format
division

### メソッド

length
size

  要素数を返します。

ntrks

  要素数を返します。

  nil の要素は勘定しません。

self << tr

  末尾に追加します。

self >> tr

  要素を除きます。

push(tr)

  末尾に追加します。

pop

  末尾の要素を取り除きます。

unshift(tr)

  先頭に追加します。

shift

  先頭の要素を取り除きます。

self[n]

  n 番目の要素を返します。

self[n]=tr

  n 番目の要素を変更します。

each{|tr| ...}

  要素について繰り返します。

  nil の要素は無視されます。

encode

  文字列に書きます。

  もし、トラックに EOT がなければ、 トラックの最後にデルタ零の EOT を追加します。

encodeio(io)

  IO に書きます。

encodefile(fn)

  ファイルに書きます。

## Track

トラックを表現するクラスです。トラックはイベントをもちます。

### スーパークラス

Object

### クラスメソッド

new

  トラックオブジェクトを作成します。

### メソッド

length
size

  要素数を返します。

nevts

  要素数を返します。

  nil の要素は勘定しません。

self << ev

  末尾に追加します。

self >> ev

  要素を除きます。

push(ev)

  末尾に追加します。

pop

  末尾の要素を取り除きます。

unshift(ev)

  先頭に追加します。

shift

  先頭の要素を取り除きます。

self[n]

  n 番目の要素を返します。

self[n]=ev

  n 番目の要素を変更します。

each{|ev| ...}

  要素について繰り返します。

  nil の要素は無視されます。また、イベントはソートされます。

## Event

イベントの抽象クラスです。

### スーパークラス

Object

### インクルードしているモジュール

Comparable

### アクセサ

offset