MIDI-Perl-0.8 > MIDI::Score

名前

MIDI::Score - MIDI scores

MIDI::Score - MIDIスコア

概要

  # 話せば長くなるので、下をみよ。

説明

This module provides functions to do with with MIDI scores. It is used as the basis for all the functions in MIDI::Simple. (Incidentally, MIDI::Opus's draw() method also uses some of the functions in here.)

このモジュールはMIDIスコアを扱うための機能を提供する。 MIDI::Simpleの全ての機能の基として利用されている。 ちなみに、MIDI::Opusのdraw()メソッドもこのモジュールの機能の 一部を利用している。

Whereas the events in a MIDI event structure are items whose timing is expressed in delta-times, the timing of items in a score is expressed as an absolute number of ticks from the track's start time. Moreover, pairs of 'note_on' and 'note_off' events in an event structure are abstracted into a single 'note' item in a score structure.

MIDIイベント構造体の中に入っている各イベントは、デルタタイムで表される 時間間隔を持った要素である。これに対してスコアの中の要素が持つ時間間隔は、 そのトラックの開始時間から計ったティックの絶対値として表現される。 さらに、イベント構造内で対になっているノートオン('note_on')と ノートオフ('note_off')は、スコアの中では単体のノート('note')へと 抽象化される。

'note' takes the following form:

ノート('note')は次の形式をとる:

 ('note', start_time, duration, channel, note, velocity)

The problem that score structures are meant to solve is that 1) people definitely don't think in delta-times -- they think in absolute times or in structures based on that (like 'time from start of measure'); 2) people think in notes, not note_on and note_off events.

スコア構造体によって次の問題が解決する。 (1)人々は明らかにデルタタイムでは考えない。絶対時間か、上に述べた ような構造(スタートからの時間)でもって考える。 (2)人々はノート(音符)で考えるのであって、ノートオンやノートオフで ではない。

So, given this event structure:

そこで、次のようなイベント構造体があるとする:

 ['text_event', 0, 'www.ely.anglican.org/parishes/camgsm/chimes.html'],
 ['text_event', 0, 'Lord through this hour/ be Thou our guide'],
 ['text_event', 0, 'so, by Thy power/ no foot shall slide'],
 ['patch_change', 0, 1, 8],
 ['note_on', 0, 1, 25, 96],
 ['note_off', 96, 0, 1, 0],
 ['note_on', 0, 1, 29, 96],
 ['note_off', 96, 0, 1, 0],
 ['note_on', 0, 1, 27, 96],
 ['note_off', 96, 0, 1, 0],
 ['note_on', 0, 1, 20, 96],
 ['note_off', 192, 0, 1, 0],
 ['note_on', 0, 1, 25, 96],
 ['note_off', 96, 0, 1, 0],
 ['note_on', 0, 1, 27, 96],
 ['note_off', 96, 0, 1, 0],
 ['note_on', 0, 1, 29, 96],
 ['note_off', 96, 0, 1, 0],
 ['note_on', 0, 1, 25, 96],
 ['note_off', 192, 0, 1, 0],
 ['note_on', 0, 1, 29, 96],
 ['note_off', 96, 0, 1, 0],
 ['note_on', 0, 1, 25, 96],
 ['note_off', 96, 0, 1, 0],
 ['note_on', 0, 1, 27, 96],
 ['note_off', 96, 0, 1, 0],
 ['note_on', 0, 1, 20, 96],
 ['note_off', 192, 0, 1, 0],
 ['note_on', 0, 1, 20, 96],
 ['note_off', 96, 0, 1, 0],
 ['note_on', 0, 1, 27, 96],
 ['note_off', 96, 0, 1, 0],
 ['note_on', 0, 1, 29, 96],
 ['note_off', 96, 0, 1, 0],
 ['note_on', 0, 1, 25, 96],
 ['note_off', 192, 0, 1, 0],

here is the corresponding score sctructure:

これに対応するスコア構造体は:

 ['text_event', 0, 'www.ely.anglican.org/parishes/camgsm/chimes.html'],
 ['text_event', 0, 'Lord through this hour/ be Thou our guide'],
 ['text_event', 0, 'so, by Thy power/ no foot shall slide'],
 ['patch_change', 0, 1, 8],
 ['note', 0, 96, 1, 25, 96],
 ['note', 96, 96, 1, 29, 96],
 ['note', 192, 96, 1, 27, 96],
 ['note', 288, 192, 1, 20, 96],
 ['note', 480, 96, 1, 25, 96],
 ['note', 576, 96, 1, 27, 96],
 ['note', 672, 96, 1, 29, 96],
 ['note', 768, 192, 1, 25, 96],
 ['note', 960, 96, 1, 29, 96],
 ['note', 1056, 96, 1, 25, 96],
 ['note', 1152, 96, 1, 27, 96],
 ['note', 1248, 192, 1, 20, 96],
 ['note', 1440, 96, 1, 20, 96],
 ['note', 1536, 96, 1, 27, 96],
 ['note', 1632, 96, 1, 29, 96],
 ['note', 1728, 192, 1, 25, 96]

Note also that scores aren't crucially ordered. So this:

スコアは厳密に順番に並んでいるわけではない。だから:

 ['note', 768, 192, 1, 25, 96],
 ['note', 960, 96, 1, 29, 96],
 ['note', 1056, 96, 1, 25, 96],

means the same thing as:

これは次のものと同じだ:

 ['note', 960, 96, 1, 29, 96],
 ['note', 768, 192, 1, 25, 96],
 ['note', 1056, 96, 1, 25, 96],

The only exception to this is in the case of things like:

この唯一の例外は、次のようなケースの時だ:

 ['patch_change', 200,     2, 15],
 ['note',         200, 96, 2, 25, 96],

where two (or more) score items happen at the same time and where one affects the meaning of the other.

二つ以上のスコア要素が同時に発生し、かつ、一つが他方の意味に 影響を与える場合。

スコアの中に何があるのか

Besides the new score structure item note (covered above), the possible contents of a score structure can be summarized thus: Whatever can appear in an event structure can appear in a score structure, save that its second parameter denotes not a delta-time in ticks, but instead denotes the absolute number of ticks from the start of the track.

(先に述べた)note以外に、スコア構造体が持ちうる構成要素をもとめると: イベント構造体に現れるものは何でもスコア構造体に現れうるということだ。 要素が保持する第二パラメータはティックで表現されるデルタタイムではなく、 トラック開始からの絶対的なティックの数を意味している。

To avoid the long periphrase "items in a score structure", I will occasionally refer to items in a score structure as "notes", whether or not they are actually note commands. This leaves "event" to unambiguously denote items in an event structure.

「スコア構造体の要素」などという回りくどい言い方は避けたいので、 私はしばしばこれをノート("notes")と呼ぶ。それが本当にnoteコマンド なのかどうかとは関係ない。"event"の方は、明確にイベント構造体の要素を 意味するよう、そのままにしておく。

These, below, are all the items that can appear in a score. This is basically just a repetition of the table in MIDI::Event, with starttime substituting for dtime -- so refer to MIDI::Event for an explanation of what the data types (like "velocity" or "pitch_wheel"). As far as order, the first items are generally the most important:

以下はスコアに登場する全項目である。 基本的にMIDI::Eventにあった表の繰り返しでしかない。デルタタイムの 代わりにスタート時からのタイムに置き換わってはいるが。だから、 データタイプ("velocity"や"pitch_wheel"など)の説明はMIDI::Eventを 参照して欲しい。順番に限っていえば、一般的に最初のほうに出てくるものが 最も重要である。

('note', starttime, duration, channel, note, velocity)
('key_after_touch', starttime, channel, note, velocity)
('control_change', starttime, channel, controller(0-127), value(0-127))
('patch_change', starttime, channel, patch)
('channel_after_touch', starttime, channel, velocity)
('pitch_wheel_change', starttime, channel, pitch_wheel)
('set_sequence_number', starttime, sequence)
('text_event', starttime, text)
('copyright_text_event', starttime, text)
('track_name', starttime, text)
('instrument_name', starttime, text)
('lyric', starttime, text)
('marker', starttime, text)
('cue_point', starttime, text)
('text_event_08', starttime, text)
('text_event_09', starttime, text)
('text_event_0a', starttime, text)
('text_event_0b', starttime, text)
('text_event_0c', starttime, text)
('text_event_0d', starttime, text)
('text_event_0e', starttime, text)
('text_event_0f', starttime, text)
('end_track', starttime)
('set_tempo', starttime, tempo)
('smpte_offset', starttime, hr, mn, se, fr, ff)
('time_signature', starttime, nn, dd, cc, bb)
('key_signature', starttime, sf, mi)
('sequencer_specific', starttime, raw)
('raw_meta_event', starttime, command(0-255), raw)
('sysex_f0', starttime, raw)
('sysex_f7', starttime, raw)
('song_position', starttime)
('song_select', starttime, song_number)
('tune_request', starttime)
('raw_data', starttime, raw)

関数

This module provides these functions:

このモジュールは以下の関数を提供する:

$score2_r = MIDI::Score::copy_structure($score_r)

This takes a reference to a score structure, and returns a reference to a copy of it. Example usage:

この関数はスコア構造体へのリファレンスを引数にとり、そのコピーへの リファレンスを返す。例えば:

          @new_score = @{ MIDI::Score::copy_structure( \@old_score ) };
$events_r = MIDI::Score::score_r_to_events_r( $score_r )
($events_r, $ticks) = MIDI::Score::score_r_to_events_r( $score_r )

This takes a reference to a score structure, and converts it to an event structure, which it returns a reference to. In list context, also returns a second value, a count of the number of ticks that structure takes to play (i.e., the end-time of the temporally last item).

この関数はスコア構造体へのリファレンスを引数にとってイベント構造体に 変換し、そのリファレンスを返す。リストコンテキストでは、二つ目の値も 返す。これはその構造体が演奏に要するティックの総数(時間的に最後の 項目の終了時間)である。

$score2_r = MIDI::Score::sort_score_r( $score_r)

This takes a reference to a score structure, and returns a reference to a sorted (by time) copy of it. Example usage:

この関数はスコア構造体へのリファレンスを引数にとり、(時間によって) ソートされたコピーへのリファレンスを返す。例えば:

          @sorted_score = @{ MIDI::Score::sort_score_r( \@old_score ) };
$score_r = MIDI::Score::events_r_to_score_r( $events_r )
($score_r, $ticks) = MIDI::Score::events_r_to_score_r( $events_r )

This takes a reference to an event structure, converts it to a score structure, which it returns a reference to. If called in list context, also returns a count of the number of ticks that structure takes to play (i.e., the end-time of the temporally last item).

この関数はイベント構造体へのリファレンスを引数にとってスコア構造体に 変換し、そのリファレンスを返す。リストコンテキストでこの関数を 呼び出すと、その構造体が演奏に要するティックの総数(時間的に最後の項目の 終了時間)を返す。

$ticks = MIDI::Score::score_r_time( $score_r )

This takes a reference to a score structure, and returns a count of the number of ticks that structure takes to play (i.e., the end-time of the temporally last item).

この関数はスコア構造体へのリファレンスを引数にとり、その構造体が 演奏に要するティックの総数(時間的に最後の項目の終了時間)を返す。

MIDI::Score::dump_score( $score_r )

This dumps (via print) a text representation of the contents of the event structure you pass a reference to.

この関数は(printを通じて)リファレンス先のイベント構造体 [訳補足:スコア構造体の間違い?]の中身をテキスト表記でダンプする。

著作権

Copyright (c) 1998-2002 Sean M. Burke. All rights reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

作者

Sean M. Burke sburke@cpan.org