SMF

# SMF モジュール

## クラス

- Sequence <format, division, tc=nil>
- 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
        - AllSoundOff <..., ch>
        - ResetAllControllers <..., ch>
        - LocalControl <..., ch, val>
        - AllNotesOff <..., ch>
        - OmniOff <..., ch>
        - OmniOn <..., ch>
        - MonoMode <..., ch, val>
        - PolyMode <..., ch>
  - SystemMessage
    - ExclusiveMessage
      - ExclusiveF0 <..., data>
      - ExclusiveF7 <..., data>
  - Meta
    - SequenceNumber <..., num>
    - Text <..., text>
      - GeneralPurposeText (Text01)
      - CopyrightNotice (Text02)
      - TrackName (SequenceName, Text03)
      - InstrumentName (Text04)
      - Lyric (Display, Text05)
      - Marker (Text06)
      - CuePoint (Text07)
      - ProgramName (Text08)
      - DeviceName (Text09)
      - Text0A
      - Text0B
      - Text0C
      - Text0D
      - Text0E
      - Text0F
    - ChannelPrefix <..., ch>
    - MIDIPort <..., num> (PR-001 にない)
    - EndOfTrack
    - SetTempo <..., tempo>
    - SMPTEOffset <..., hr, mn, se, fr, ff, tc>
    - TimeSignature <..., nn, dd, cc, bb>
    - KeySignature <..., sf, mi>
    - SequencerSpecific <..., data>

## Sequence

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

### スーパークラス

Object

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

Enumerable

### クラスメソッド

decode(str)
  文字列から読みこみます。
read(io)
  IO から読みこみます。
load(fn)

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

  上記3つのメソッドは、ヴェロシティが零のときノートオンを ノートオフで置き換えられます。

new([format=1[, division=96[,tc=nil]]])
  シーケンスオブジェクトを作成します。

### アクセサ

format
division
tc

### メソッド

ほぼ Array と同じメソッドがつかえます。 それ以外のもの、注意が必要なものを以下で説明します。

ntrks
  nitems と同じです。
self >> tr
  要素を除きます。
each{|tr| ...}

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

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

join!
  トラックをひとつにします。 EOT は、オフセットがもっとも大きなものが採用されます。
encode

  文字列に書きます。

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

write(io)
  IO に書きます。
save(fn)
  ファイルに書きます。

## Track

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

### スーパークラス

Object

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

Enumerable

### クラスメソッド

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

### メソッド

ほぼ Array と同じメソッドがつかえます。 それ以外のもの、注意が必要なものを以下で説明します。

nevts
  nitems と同じです。
self >> ev
  要素を除きます。
each{|ev| ...}

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

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

## Event

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

### スーパークラス

Object

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

Comparable

### アクセサ

offset