スポンサーリンク


RAKUTEN

  • スポンサーリンク

« 100円温度計の解析 (断念) | メイン | FMゲルマラジオの実験(3) ケースに入れました »

2010/04/21

液晶搭載マイコン・モジュール (10) BGM機能

 (※これまでの関連記事はカテゴリーの「液晶搭載マイコンモジュール」をご覧ください。)

 PLAY文まで動作しましたので、それを改良してBGM演奏ができるようにしました。

 

 前回はPLAY文で指定した楽譜が演奏しおわるまで止まってしまい、次の処理には行けませんでした。今回のものではPLAY文は解析までで、演奏は割り込み処理で行いますので、演奏しながら処理を進められます。つまりBGM演奏ができます。なお、BGM以外の音楽をすぐに演奏したいこともあると考え、FGM(ForeGroundMusic)をBGMに優先して演奏する機能も付けました。

 動作サンプルは以下の通りです。

 

■ソフトの方式

 前回の物は、PLAY文の中で、1音を解釈するたびに発声し、音符の長さだけタイマーでウェイトを入れる方式になっていました。これですと演奏し終わるまでPLAY文から抜けることができません。

 今回の物では、PLAY文では解釈した内容をバッファ(BGM_buffer_xx,FGM_buffer_xx)に格納して終了します。PLAY文では演奏しません。

 バッファに格納されたデータの演奏はT16.CH2のタイマー割り込みで行います。ソース内での関数は、void t16ch2Int(void) です。このタイマーは前回のものではワンショットにしてPLAY文の中で音符ごとに長さを設定していましたが、今回はこれをリピートモードで使っています。

 

 タイマー割り込み周期を、PLAY文がサポートする最短の長さ=1/64音符に設定しており、その割り込みの中でカウンタを持たせて、音符の長さをカウントするようにしました。1音符が終わるたびにバッファから次の音符データを取り出して演奏します。

 

割り込み処理の中では、FGM/BGM両方に対応します。FGMが鳴っている間BGMは発声を押さえますが、発声以外のシーケンスは変わらず動かすことでBGMのリズムを崩さないようにしています。

 

■ソースについて

 今回もソースを開示しますので、細部は中をご覧ください。

「PLAY2.zip」をダウンロード (DL後に開発環境C17WBIFからImportしてください。)

今回大幅に修正、追加したのは以下の関数です。

void t16ch2Int(void)

int play(int BGM_FGM,unsigned char *str)

void playOnOff(int ON_OFF)

※※注意事項※※

   @ このソフトはCQ出版社殿が「液晶マイコン基板特設ページ」で提供されているサンプルコード
      流用して開発されています。

   A 個人での使用、改変、流用は自由です(大いにやってください。)が、外部公開する場合は
      @のように必ず流用元を明記してください。 

   B このサンプルコードを使用して万一発生した直接的、間接的ないかなる内容の損失に対しても、
      流用元及び当Blogの管理人は一切の保証責任を負いません。

 

表示と音でやりたいことは大体できてきましたので、そろそろこのモジュールならではの使い方を考えようかと思います。

 

以上です。

 

にほんブログ村 その他趣味ブログ 電子  工  作へ
にほんブログ村 ←記事が面白かったらクリックしてやってください。

トラックバック

この記事のトラックバックURL:
http://app.blog.ocn.ne.jp/t/trackback/240957/21527831

この記事へのトラックバック一覧です 液晶搭載マイコン・モジュール (10) BGM機能

コメント

コメントを投稿