目次
Visual C# 2019 を使い、PC画面上で4和音のオルゴール楽譜を作成し、PIC用データに変換するWindowsアプリケーションを作成しました。 最下段の B7_PICOrgelData.zip を解凍し、オルゴールデータ作成.exe をダブルクリックしてください。 下の様なデータ作成用ウインドが現れます。
画面上にマウスで音符を配置し、PIC用データ「書き出し」ボタンを押すと4和音オルゴールプログラム用のgakufu.h ファイルが作成できます。 PICにMPLAB経由で書き込めばPICからの演奏を楽しめます。作成した楽譜の内容は、PC内蔵のMedia Playerを起動しPCスピーカーからの音でPIC書込み前に確認することができます。
このWindowsアプリケーションの操作概要は以下の通りです。
B7_PICOrgelData.zip をダウンロードし解凍してください。解凍すると、アプリプログラムの他に MediaPlayer用のライブラリプログラム2本とサンプル用の楽譜3本が同梱されています。楽譜データはどこに移動しても構いませんが、ライブラリプログラムはオルゴールデータ作成アプリと同じフォルダー内に置いてください。
オルゴールデータ作成.exe をダブルクリックするとデータ作成用ウインドが現れます。
楽譜作成プログラム B7_PICOrgelData.zip |
オルゴールデーター作成 アプリをダブルクリックしてプログラムを実行すると、新規作成画面が開きます。デフォルトでは、主旋律の一音だけの五線譜が4行表示されています。
作成する楽曲の楽譜を手元に準備しておくとスムーズに楽譜データの作成ができます。この動画では、「カエルの合唱」を例にして電子オルゴール用のデータを作成します。
はじめに、曲の演奏速度(テンポ)を五線譜の左上の記入欄にキーボードから値を入力します。曲の拍子は、上部に並んでいいるアイコン一覧の中から希望の拍子アイコンをマウスでクリックしてください。クリックするだけで五線譜に拍子記号が書き込まれます。
ここから、音符を五線譜に配置する作業に入ります。
配置する音符の記号を上部のアイコン一覧から選びマウスでクリックします。クリック後にマウスを五線譜上に移動すると、マウスポインタが選択した音符記号の形状にかわります。配置する五線譜の位置でクリックすると、音符がその位置に固定され配置完了です。同じ種類の音符を配置するのであれば、連続して、配置する位置をクリックすれば、OKです。
ある程度音符を並べたら、間違いがないかPCから音を再生させて確認します。注意深く音符を配置したつもりでっも意外とミスを犯しているものです。配置後に再生してみるとミスを発見しやすくなります。
マウスを使い五線譜上の音符を選択し、移動、削除、置き換え、コピーなどが可能です。同じ旋律を繰り返す場合など、大いに作業の時間短縮になります。
例えば、第一、第二小節に配置した音符全体を,第三、第四小説にコピーするには、
曲を打ち込み終えたら、書き出しボタンをクリックすれば、マイコン用のデータに変換し、gakufu.h 形式で任意の場所に保存することができます。
作成した楽譜情報は、保存ボタンでオルゴールデーター作成アプリの専用ファイルフォーマット(拡張子 .pgf)で保存ができます。
作業の中断や後ほど変更が予定される場合には、こまめに保存することをお勧めします。
電子楽器の分野で有名な電子フォーマットに、MIDI があります。しかし、MIDIフォーマットをそのまま利用するには、PICにはメモリー容量などのハード面の制約が大きく現実的ではありません。
そのため今回はこのプログラム独自の楽譜フォーマットを作成しました。独自の楽譜フォーマットには、このプログラムで演奏する必要最低限の情報が書き込まれるので、PICの内臓メモリーだけでも充実した演奏を可能にしています。
電子楽譜に必要な情報は、各音符(休符も含む)の音階と演奏時間の二つしかありません。これらを各 8bits の計 16bits (1 word) で表現することにしました。
音階は、半音ずつに別れ、「ド」から「シ」まで、12段階でオクターブになります。これらに番号を振れば、一意に音符の音の高さを電子的に取り扱うことができます。中央の「ド C4」を基準として「60 (0x3C」番にします。これは、MIDI と同じです。
また、音の高さ「0」の音符は休符を意味します。
音符は、二分音符、四分音符、八分音符、十六分音符 とその長さが、半分ずつになります。基準単位を設けて、四分音符は8単位、八分音符は4単位・・・とします。
音階は、16bits (1 word) で表現し、MSB 8 bitが音の高さ、 LSB 8 bitが音の長さを表します。
| 76543210| 76543210|
| 高さ | 長さ |
楽譜の情報は、"gakufu.h" に、ある、unsigned int 配列 「p1gkf」に記述します。
実際の曲と"gakufu.h"を並べて比較してみます。
const unsigned int p1gkf[] = { 120, // カエルの合唱 0x3C08,0x3E08,0x4008,0x4108,0x4008,0x3E08,0x3C10,0x4008, 0x4108,0x4308,0x4508,0x4308,0x4108,0x4010,0x3C08,0x0008, 0x3C08,0x0008,0x3C08,0x0008,0x3C08,0x0008,0x3C04,0x3C04, 0x3E04,0x3E04,0x4004,0x4004,0x4104,0x4104,0x4008,0x3E08, 0x3C10, 0xFFFF, 0xFFFF, };
以下のプログラムで、このアプリせ作成した楽譜データをそのまま利用することができます。
このページで説明した概要を動画にまとめました。参考にしてください。