「DTM」の版間の差分
削除された内容 追加された内容
編集の要約なし |
語尾の統一、推敲 |
||
11 行
最初に[[w:MIDI|MIDI]]について解説します。元々計算機で音を扱う方法として、空気の振動を電気的な波形に変換し、それを離散化してデジタルデータとして扱うことができることを[[高等学校情報C]]で述べました。計算機上で、音を扱う方法は基本的にこれ1つしかありません。
コンピュータ上の音楽ファイルとしては[[w:WAV|WAV]]ファイル、[[w:MP3|MP3]]ファイル、[[w:Ogg Vorbis|Ogg Vorbis]]ファイルなど、様々な保存形式があり、これらはどれも異なった方法で音を扱っているように思えます。しかし、実際にはこれらはどれも同じデータ([[w:サンプルレート|サンプルレート]]などの違いはあれど)を扱っており、異なっているのはデータではなくデータを[[w:圧縮|圧縮]]する方法
残念なことにデータの圧縮は数学的な過程でこれらの違いを理解することは非常に困難で
ここまででコンピュータが音を扱う方法は基本的に1通りしか無いことを述べて
もちろん楽譜と音は互いに異なったもので
ただし、ソフトウェアシンセサイザなどのソフトウェアを利用すると、あたかもMIDIファイルが音を扱うファイルであるかのようにMIDIファイルの内容を演奏できてしまいます。そのため、MIDIファイルが音を扱う形式であると述べても決して間違いとはいえません。しかし、MIDIファイルとOggファイルが扱う情報は本質的に異なったものであるという
===MIDIの構成===
音を扱う情報と楽譜を扱う情報は非常に異なってい
まず、楽譜が扱う情報は
このことから分かる通り、楽譜が扱う音は実際に音そのものとして存在し得る音よりもかなり少ない種類の音を扱います。このことは、情報をデジタル化する
ここまででMIDIが扱う情報の性質に
楽譜を扱う上で重要な情報はある音程の音を出力する事である。MIDIでは、この命令のことをNOTE_ONと呼びます。また、反対の命令として、ある音程の音の出力を取り止めることをNOTE_OFFと呼びます。
基本的なMIDIはNOTE_ONとNOTE_OFFの命令を繰り返すことで構成され
また、実際の演奏で利用される楽器の種類も、楽譜によって指定され
ここからは実際に上で述べられた情報がどのようにデジタルデータとして扱われているかについて述べ
命令 データ
というフォーマットで記述される[[w:バイト]]列を使います。命令、データともにバイト列ですが、データの量は、命令の種類によって変化し
各々の命令に対して、トラックを扱う手段が必要です。MIDIが同時に扱えるトラックは少なくとも16種類あることが保証されてい
チャンネルn(n<16)に対するNOTE_ON命令は次の命令で表され
0x9n 0x.. 0x..
55 行
0x8n 0x.. 0x..
とな
実際の演奏ではNOTE_ONとNOTE_OFFの間の時間、つまり対応する音の演奏時間も伝達されます。この時間のことをデルタタイム (Delta Time) と呼びます。デルタタイムは特殊な形式で書かれるのでMIDIファイルを読むときには注意が必要
まず、デルタタイムを表すバイトについて、最後のバイトについては0、それ以外のバイトについては1と、各バイトの最も左のビットを設定します
1xxxxxxx 1xxxxxxx ... 1xxxxxxx 0xxxxxxx
実際の時間は各々のバイトについて最も左の
0xxxxxxx
で表され、0から127=<math>2^7</math>単位までの時間経過を表
1xxxxxxx 0xxxxxxx
となり、0から、16384=<math>2^{14}</math>単位までの時間経過
例えば、童謡'かえるのうた'の最初のフレーズである'ドレミファミレド'をチャンネル0で演奏するには(ただし、デルタタイムは160単位、音の強さは40とします
90 60 40 81 20 80 60 7f 00(ド)
83 行
90 60 40 81 20 80 60 7f 00(ド)
とな
1000 0001 0010 0000 -> 000 0010 010 0000 = <math>2^8 + 2^5</math>= 128+32 = 160
とな
===MIDIソフトウェアシンセサイザ===
ここまででMIDIがどのように楽譜の情報をデジタル化するかを見て
最も簡単な音の合成は対応する音程の[[w:正弦波]]を順番に書き込んで行くことです。ただし、サンプルレートの問題があるので、手作業で正弦波を作成しても正しい音程で演奏されないことが予想されます。一般に正しいサンプルレートで演奏するには、サンプルレートを指定できる形式で保存し、後にその形式の音楽ファイルを再生するのが簡単です。<!-- (手作業で音楽ファイルを作るのは無駄でも不必要でもないしどちらかといえば面白いことだと思う。しかし、今必ずやるべきことではないようにも思う。もっとも先のことはわからないのだが ... 。) -->
ここでは正弦波を作成するプログラムとして、[[w:en:SoX]]を利用します。SoXは音楽ファイルを扱うための簡潔なコマンドラインプログラムで、機能の1つとして正弦波、矩形波の合成があ
$sox infile outfile synth sine n
108 行
ファ:698Hz
(小数点以下切捨て)に対応する事がわか
SoXでは作成した音楽ファイルをつなげて一つの音楽ファイルを作成することができます。音楽ファイルをつなげるためには、
114 行
$sox infile1 infile2 ... infilen outfile
のコマンドを利用します
ここまでで簡単な音楽合成を行う方法を述べました。しかし、実際の音楽演奏では音は正弦波ではなく、より複雑な波形を持っていることが普通で
このような複雑な波形を合成するには、あらかじめ対応する楽器の波形を記録しておき、適宜その波形を出力することが有効な手段とな
ここではシンセサイザとしてTimidity++ ([[en:w:Timidity]]) を利用します。ここからはTiMidity++の使い方を説明しますが、既に何らかの方法でMIDIが再生できる場合にはこの章はとばして次に進んでください。
126 行
===MIDIシーケンサ===
ここまででMIDIを再生する方法について述べました。ここからはMIDIを作成する方法について述べ
MIDIを作成するソフトウェアをMIDIシーケンサと呼んでい
====Rosegarden====
|