本プログラム( MPLtoSMF.mc ) は、MPL(Music Playing Language) という
音楽演奏言語(あるいは、音楽記述言語)で書かれたテキストファイルから、
SMF( Standard MIDI File ) 形式のバイナリーファイルを生成します。
この MIDI ファイルは、Windows Media Player 等で、容易に再生できます。
MPLファイルには、MPLという音楽演奏言語の文法に基づいて記述された
テキストを含む構造体を返す MikoScript のプログラムとして記述します。
これによって、MPLのテキストを生成する際に、MikoScript 言語の機能を
フルに活用できるようになっています。
MPLは、音楽演奏言語として、基本的な演奏形態は勿論、高度な演奏技法も
表現できます。また、マクロや簡易反復表記で、キー入力を省力化し、見易さが向上
しています。
MPLの詳細な文法は、未だ明文化していません。現状、サンプルや、本プログラムの
ソースを見ていただくことになります。
下記のダウンロードファイル( mpl301.zip )には、それらが入っています。また、
以下にも幾つかのサンプルがあります。
本プログラム( GenSineWave.mc ) は、4つの正弦波を合成した音を発生します。 各正弦波は、周波数、振幅、立ち上がり時間、減衰時間を指定できます。 楽器の音は、倍音構成になっている場合が多いので、 ここでは、最初の正弦波が基本音、残りの3正弦波が倍音になるのを前提に、 各周波数を調整するようになっています。
本プログラムは、波形データを解析して、その周波数スペクトル図を出力します。
この波形データは、WAV フォーマットのファイルで与えます。
一方、周波数スペクトル図は、BMP フォーマットのファイルで生成されます。
この処理は、SpectBmp.mc という MikoScript が行ないます。
但し、スペクトル解析の実計算は、Spectrum.dll というDLLで行なっています。
一般に、スペクトル解析には、FFT(高速フーリェ変換)を使いますが、
ここでは、LC並列共振フィルタを使ってみています。
この方法を使うと、計算量は多くなりますが、スペクトルを取得する周波数の範囲と段階を
自由に選べます。また、周波数と時間の分解能のトレードオフがなく、窓関数も不用です。
このフィルタのソースプログラムは、Spectrum.c にあります。
このスペクトル解析の実行結果のサンプルを、右図に示します。
これは、ピアノに似た電子音で「ドレミファソラシド」を演奏した時の
スペクトル図です。その波形データは、Sample.wav というファイルに
入っているので、Windows Media Player 等で、実際に聞いてみることができます。
ちなみに、Epsaly から、このサンプル図を生成するコマンドは、
次のようになります。
SpectBmp.mc Sample.wav
これを実行すれば、Sample.bmp という画像ファイルが生成されます。
なお、下記のダウンロードファイルはすべて同じディレクトリーに
入れておく必要があります。
参考のため、本スクリプトで生成したもう少し複雑なスペクトル図の例を示しておきます。 下の最初の図は、女性が「あおいうえ」と連続的に発声したときのスペクトル図です。 また、下の2番目の図は、「あ・え・い・お・う」と各音を離して発声したときのスペクトル図です。