テキストファイルからMIDIファイルを作る

ぼくのような視覚障害者でも、スクリーンリーダーを使ってMIDIを作れるCGIをPerl言語でプログラミングしてみましたので、みなさんに公開します。

名称は「MIDI作成CGI」、そのままですね。

このMIDI作成CGIは、メモ帳などで入力したテキストファイルからMIDIファイルを作成するソフトウェアです。

難しい音楽用語はなるべく使用せず、感覚的に使えるようにということを考慮し開発しました。

例えば「どれみ」と入力したテキストファイルから、ドレミと音のなるMIDIファイルを作成します。

入力種類はひらがな(カタカナでも可)、一部の記号と数字ですが、半角全角にとらわれることなく自由な書式で入力できます。

このMIDI作成CGIはフリーソフトつまり、無料で使用できますので、あなたもぜひ試していただけるとうれしいです。

  1. 操作方法
  2. ドレミの演奏
  3. オクターブの指定
  4. 音符の指定
  5. 間の指定
  6. 強さの指定
  7. コードの指定
  8. 楽器の指定
  9. パートの指定
  10. テンポの指定
  11. ドラムの指定
  12. その他の指定
  13. 便利な機能
  14. サンプル
  15. 最後に

操作方法

このMIDI作成CGIの使用方法はすごく簡単です。

以下のフォームに演奏情報を記述したテキストファイルを指定しMIDI作成ボタンを押すだけで、作成されたMIDIファイルをダウンロードすることができます。

TextFile

参照..ボタンを押すと、あなたのパソコン内を参照する画面が表示されるので、そこから演奏情報のかかれたテキストファイルを指定すると簡単です。

テキストファイルが壊れていたり、演奏情報に誤りのある場合は、エラーメッセージの書かれたテキストファイルがダウンロードされます。

ドレミの演奏

まずはこのMIDI作成CGIをとりあえず使ってみましょう。

メモ帳などのエディタを開いて、ドレミと入力し適当な名前をつけて、テキスト形式で保存してください。

保存できましたら、上のフォームに演奏情報のかかれたテキストファイルを指定し作成ボタンを押してください。

すると、このページに設置してあるPerl/CGIプログラム側でMIDIファイルを作成後、ダウンロードする画面が表示されるのであなたのパソコンに保存してください。

ダウンロードしたMIDIファイルは、ウィンドウズのメディアプレーヤーなどで再生できます。

ちなみに、半音上げる場合はド#などと音名直後に#をつけ、休符(何も音を鳴らさないとき)は、ドレミなどの音名の代わりに_を書きます。

#も_も半角全角関係なく入力できます。

それと、今回はすべてカタカナでつめて書きましたが、ひらがなにしたり、間に空白や改行を挟んでもかまいません。

書き方は自由なんです。

<戻る>

オクターブの指定

MIDI作成CGIの使い方がわかったところで、次は、オクターブ指定についてです。

普通にドレミファソラシドと書くと、最初のドと最後のドは同じ高さの音が設定されます。

そうではなく、最後のドのみ1オクターブ高い音にしたい場合はドレミファソラシ↑ドと書きます。

音名の直前に↑を書くと、その音を1オクターブ上げます。

逆に1オクターブ下げたいときは↓を使います。

さらに、2オクターブ以上変化させたいときには↑や↓の数を増やしたり、その直後に数値を指定します。

例えばこちらを見てください。

↑↑↑ド
↓3ド
↑↑2ド
↓↓0ド
↑↓↓ド
↑↑↓3ド

1つ目の音は、↑が3つ連続しているので基準となるオクターブ値から3オクターブ上がったドがなります。

2つ目の音は、↓の後に3があり、それが↓3つ分をあらわしているので基準となるオクターブ値から3オクターブ下がったドがなります。

3つ目の音は、↑↑の後2があり、これが↑↑2つ分をあらわしているので基準となるオクターブ値から4オクターブ上がったドがなります。

4つ目の音は、↓↓がありますがその後に0で打ち消しているので基準となるオクターブ値のドがなります。

5つ目の音は、↑がありますがその後に↓↓があるので基準となるオクターブ値から1オクターブ下がったドがなります。

6つ目の音は、↑↑がありますがその後に↓3(↓↓↓)があるので基準となるオクターブ値から1オクターブ下がったドがなります。

なお、後述する間と強さの指定でも同じ感覚で入力できます。

これら音名直前に指定するものは、その1音のみに有効ですのでご注意ください。

そして次の音からはすべて初期設定値に戻ります。

そうなると、常に1オクターブ下げておきたいなどというときは、↓ド↓レ↓ミと書かなければいけないので不便ですよね。

そんなときは、基準となるオクターブ値を変更します。

基準となるオクターブ値を変更するには、オクターブと書いた後に数値を指定します。

もちろん、オクターブはひらがなで書いてもOKです。

数値は0から9まで使用でき、初期設定では5となっています。

こうして設定したオクターブ値は、次に基準となるオクターブ値を変更するまで有効です。

なので前述のドレミファソラシ↑ドは、以下のように書くこともできます。

オクターブ4 ドレミファソラシ
オクターブ5 ド

これでオクターブ値の指定は以上です。

<戻る>

音符の指定

ここでは音符(音の長さ)の指定方法についてみていきましょう。

このMIDI作成CGIでは、32分音符・16分音符・8分音符・4分音符・2分音符・全音符が使用できます。

各音符には付点(音符を1.5倍にすること)、3連符(指定音符を3等分すること)やタイ(音符をつなげること)も使用できます。

そしてこれらの指定は前述のオクターブ指定のように、音名1つにのみ指定する方法と、基準となる音符値を指定し全体を変更する方法があります。

例えば1音にのみ指定する場合、ド4と書けばドの4分音符を表します。

半音の場合は、ド#4とします。

基準となる音符値を変更する場合は、長さ4と書いてから、各音名を指定すれば4分音符扱いとなります。

基準となる音符値の指定では、付点やタイは使えますが、3連符は使えませんのでご注意ください。

漢字交じりで長さではなく、ひらがなでながさと書いてもOKです。

基準となる値の変更は、前述のオクターブ指定のように再び基準値を変更するまで有効です。

基準となる音符値の初期設定は4分音符となっています。

そして使用できる音符値には以下のようなものがあります。

32分音符は32、16分音符は16、8分音符は8、4分音符は4、2分音符は2、全音符は1です。

そして付点の場合は各音符値の後に5を、3連符の場合は各音符値の後に3を、タイの場合は各音符値の間に+を書きます。

ド45と書けば付点4分音符のドとなります。

3連符の場合は一度に指定するのではなく、3連符用の音符を3つ連続して指定することにより3連符を表現します。

例えばド43と書けば4分音符の3分の2の長さを指定したことになります。

なので、ド43ド43ド43と書けば、2分音符を3等分したことになります。

これらの指定も半角全角関係なく入力できます。

なんとなく理解していただいたところで以下の指定を見てください。

これらは全て同じ音を表しています。


ド4
ながさ4 ド
ながさ1 ド8+8
ながさ85+16 ド
ド83+83+83
ド32+32+32+32+32+32+32+32

1つ目のドは、何も指定がないため基準となる音符値が採用されるため4分音符のドですね。

2つ目のドは、音名直後に4分音符の指定があるのでOKですね。

3つ目のドは、音名直後の指定はありませんが、最初に基準となる音符値で4分音符が指定されているのでこれもOKですね。

4つ目のドは、基準となる音符値で全音符が指定されていますが、音名直後の指定で8分音符を2つつなげる指定があるのでこちらを優先し4分音符が表現されます。

5つ目のドは、音名直後の指定はありませんが、その前の基準となる音符値で付点8分音符と16分音符をつなげる指定があるので4分音符となります。

6つ目のドは、基準となる音符値の指定はありませんが、音名直後に8分音符の3分の2の長さを3つつなげているので4分音符となります。

7つ目のドは、基準となる音符値の指定はありませんが、音名直後に32分音符を8つつなげる指定があるので4分音符となります。

これらをふまえた上で、もっと入力しやすくするために省略技を紹介します。

省略技とは意味そのままで、省略できるもの(すでに指定済みの音符)は、わざわざ書かなくてもよくしましょうという機能のことです。

なので省略は、ドレミのような音名直後の音符値でのみ使用可能で、長さの後に来る基準の音符値の指定では使えませんのでご注意ください。

次に具体的な省略の書き方に移りますが、実は、一部の省略はすでに出てきています。

どういうことかというと、長さ4の後にドと書けば、4分音符のドとなるたとえを出しましたよね。

これは省略のひとつです。

省略せずに書くなら、長さ4などとは書かずに、ド4のみとなります。

でもそうすると、ドレミではなく、ド4レ4ミ4と書かなくてはいけなくなるので不便ですよね。

なので慣れるまではわかりにくいかもしれませんが、省略を使ったほうがすっきりわかりやすくなるのでおすすめです。

ほかにも、ド5と書けば、基準となる音符値を1.5倍した長さのドが指定されます。

長さ4であれば付点4分音符、長さ1であれば付点全音符となるわけです。

もちろん3連符でも使用でき、ド3と書けば、基準となる音符値の3分の2の長さのドが指定されます。

長さ8でド3ド3ド3とすれば4分音符を3つに割り、長さ2でド3ド3ド3とすれば全音符を3つに割ることになります。

さらに、省略はタイでも使用できます。

ド+と書けば基準となる音符値を2倍してくれます。

長さ4であればド4+4という指定になります。

ド++と書けば基準となる音符値を3倍してくれるわけです。

省略はかなり便利な機能なので、たくさん使って早く慣れておくことをおすすめします。

音符の指定とその省略方法は以上です。

間の指定

音符(長さ)の指定の延長で、ここでは音を鳴らす直前に間を指定する方法について紹介します。

間というのは説明しにくいのですが、音符の前にわずかな間をおいてその音に重みを付けたり、リズムを微妙にずらしたりするときに使います。

やり方は、音名直前に?をつけて0から9までの値で指定します。

初期設定は0ですが、これはオクターブや音符の指定のように、基準となる値を変更するという概念はありません。

なので必要に応じて音名直前に?を付加して指定してください。

例えば、ドレミ?0ファ?ソ??ラ??2シ?6↑ドという感じで指定します。

?0や??2がわからない場合は、前述のオクターブ指定を参照してください。

実際に聴いてみると、少しずつ間が開いていくのがわかると思います。

これを聴くと、間を指定すると音符がずれて演奏が崩れるのではないかと思うかもしれませんね。

しかし間というのは1音のみに有効なものですから、ほかに影響はあたえません。

具体的に説明すると、例えば?5ド4という指定があったとします。

この場合、作成されるMIDIファイル内では前半8分音符は無音となり、後半8分音符でのみ音が鳴るようになります。

そのため、音が伸びるタイプの楽器を選択している場合は、間を空けた分音は短くなりますのでご注意ください。

これで間の指定方法については以上です。

<戻る>

強さの指定

次にMIDI作成CGIで強さを指定する方法についてみていきましょう。

強さも前述のオクターブや音符と同じような感覚で指定できます。

なので、大本に基準となる強さ値があり、細かく変化させたいときは音名直前に基準値を変化させて指定します。

強さの基準値は、強さと書いて値を指定します。

もちろん、ひらがなで書いてもOKです。

値は0から127まで指定でき、0にすると無音状態になります。

ちなみに強さの初期設定値は100です。

強さ40 ドレミ
強さ80 ファソラ
強さ120 シ↑ド

そして音名直前に強さを変化させたいときには、<または>と数値を使用します。

基準値よりも強くしたい場合は、<と書いてからどれだけ値をプラスしたいかを指定します。

逆に基準値よりも弱くしたい場合は、>と書いてからどれだけ値をマイナスしたいかを指定します。

強さ80
>40ド>>20レ>>>>10ミ
>0ファソ<0ラ
<40シ<<20↑ド

>0や<<20がよくわからない場合は、前述のオクターブ指定を参照してください。

ここでの例は2つとも同じ音がなります。

強さの指定方法については以上です。

<戻る>

コードの指定

ここではこのMIDI作成CGIでコード(複数の音を同時に鳴らす)指定方法についてみていきましょう。

指定方法は簡単で、同時に鳴らしたい音と音との間に・をつけるだけです。

オクターブ5
ド・ミ・ソ
レ・ファ#・ラ
ミ・ソ#・シ
ファ・ラ・↑ド
ソ・シ・↑レ
ラ・↑ド#・↑ミ
シ・↑レ#・↑ファ#
オクターブ6
ド・ミ・ソ

コード指定ではオクターブはもちろん、間や音符さらに強さ指定も個別に指定することができます。

例えば?4ソ1・ド・<15?4ミ2というわけわからない指定もできます。

まぁこの場合は、和音になるのは2つですが…。

詳しくはコードの一覧を参照してください。

コードの指定方法については以上です。

<戻る>

楽器の指定

次は、このMIDI作成CGIで楽器を指定する方法についてみていきましょう。

楽器を指定するときは、楽器と書いて演奏したい楽器番号を指定します。

楽器は漢字でもひらがなでもOKです。

楽器番号は1から128まで指定できます。

楽器1 ドレミファソラシ↑ド5
楽器5 ドレミファソラシ↑ド5
楽器25 ドレミファソラシ↑ド5

上記演奏データからMIDIファイルを作成し再生すると、楽器が変化していくのがわかると思います。

複数の楽器を同時に演奏したいときは、後述のパート指定を使用します。

それでは実際に聴いてみましょう。

楽器名とオクターブ値を選択し試聴ボタンを押すとMIDIファイルが鳴ります。

カッコ内は楽器番号です。

再生環境によっては実際に演奏される楽器が異なる場合がありますのでご注意ください。

楽器の指定方法については以上です。

<戻る>

パートの指定

次は、このMIDI作成CGIで演奏を複数のパートに分けて指定する方法についてみていきましょう。

複数のパートを指定することにより、異なる楽器を同時に演奏させることができます。

パートを指定するときは、パートと書いてから値を指定します。

パート宣言は、ひらがなで書いてもOKです。

値は1から16までで、ドラム専用パートは10で固定されています。

ドラム指定については後述します。

パート1
楽器1
ドレミファソラシ↑ド+
パート16
楽器25
長さ25
ド・ミ・ソ ファ・ラ・↑ド シ・↑レ#・↑ファ#

上記演奏データからMIDIファイルを作成し再生すると、2つの楽器が同時に演奏されていることがわかると思います。

なんとなく音楽っぽくなってきましたね。

パートの指定方法については以上です。

テンポの指定

次は、このMIDI作成CGIで演奏のテンポを指定する方法についてみていきましょう。

テンポを指定するときは、テンポと書いてから値を指定します。

テンポ宣言はひらがなでもOKです。

指定できる値は40から320までで、テンポ60で一分間に4分音符が60回鳴ります。

テンポ60 ドレミファソラシ↑ド+
テンポ120 ドレミファソラシ↑ド+
テンポ240 ドレミファソラシ↑ド+

上記演奏データからMIDIファイルを作成し再生すると、少しずつテンポが速くなっていくのがわかると思います。

テンポの初期設定は120です。

テンポはどのタイミングで指定しても、パートの境を越えて演奏ファイル全体に影響を及ぼすのでご注意ください。

テンポの指定方法については以上です。

<戻る>

ドラムの指定

次に、このMIDI作成CGIでドラムを演奏させてみましょう。

まずドラム専用パートとして、パート10が割り当てられています。

そして実際のドラム音を指定するときには、ひらがなまたはカタカナで楽器名を書いていきます。

前述しました音符や強さ、間なども指定できます。

同時に音を鳴らしたいときは、前述しましたコード指定方法を使います。

パート10
バスドラム
バスドラム
バスドラム・スネアドラム
バスドラム
バスドラム
バスドラム・スネアドラム
バスドラム
バスドラム
バスドラム・スネアドラム

以下は、このMIDI作成CGIで使用できるドラムの楽器名一覧です。

楽器名を選択し試聴ボタンを押すとMIDIファイルが鳴ります。

MIDI再生環境によっては、選択したドラムの楽器名と実際の音が異なる場合があります。

<戻る>

その他の指定

次に、このMIDI作成CGIで使用できるその他の指定方法についてみてみましょう。

MIDI再生環境によっては、これら指定が反映されないことがあります。

残響

選択した楽器音の残響を指定します。

残響を指定するときは、響きと書いてから値を指定します。

もちろんひらがなで書いてもOKです。

値は0から127までで、初期設定は0です。

左右

左右の音量を指定します。

左の音量は、左と書いてから値を指定。

右の音量は、右と書いてから値を指定。

どちらもひらがなで書いてOKです。

値は0から127までで、0にすると無音になります。

初期設定は左右ともに100です。

<戻る>

便利な機能

次に、このMIDI作成CGIを使用する上で、知っておくと便利な機能について紹介します。

フォーマット指定

このMIDI作成CGIで生成されるMIDIファイルのフォーマットを指定できます。

指定できるフォーマットは0または1です。

フォーマットの初期設定は1です。

フォーマットと書いてから、0または1と記述します。

フォーマット2には対応していません。

もちろんフォーマットはひらがなで書いてもかまいません。

作成したMIDIファイルをフォーマット0が望ましい環境で利用する場合は、ぜひこの指定を使ってください。

コメント

演奏ファイル内にコメントを書くことができます。

//と書けば、そこから改行するまでの部分はコメント扱いとなります。

もちろん、全角でも半角でもOKです。

コメント部分は、MIDIファイル作成時に取り除かれます。

メモ

メモは、前述のコメント機能とは逆の働きをします。

メモは、ドラムやコード進行などある程度パターン化されたデータ入力を支援する機能です。

使い方も簡単です。

まず、メモと書いて識別番号を指定してからよく登場する部分を「」ではさみます。

これで何度も登場する部分が記録されました。

そしてその記録した部分を呼び出したいときは、メモと書いて記録時に入力した識別番号を指定するだけです。

これで何度も呼び出せます。

メモはひらがなでもかまいません。

記録時の識別番号は重複しないようご注意ください。

それと、メモの中にメモを指定するというようなネストはできません。

パート10
メモ1「
バスドラム
バスドラム
バスドラム・スネアドラム

メモ1
メモ1

前述のドラム指定の例と同じMIDIファイルが作成されます。

<戻る>

サンプル

演奏ファイルのサンプルを作成してみましたので、ぜひ参考にしていただければうれしいです。

作ったのはきらきら星(ABCの歌)です。

演奏ファイルのサンプルをダウンロード

作成したMIDIファイルはこちら

<戻る>

最後に

これでMIDI作成CGIの説明は以上です。

質問・意見・感想などなどありましたら遠慮なくメールください。

ここまで読んでいただきありがとうございました。

<戻る>