上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top

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



昨日に引き続きまして液晶搭載マイコン・モジュールのサウンド機能を強化しました。



今回の追加機能はPLAY文です。昔のマイコン時代のBASICにあった”ドレミファソラシド”を文字列の”CDEFGAB”に置き換えて演奏させるあれです。



完成後のサンプル動画(音声付)はこちらです。

これは以下のPLAY文を実行したものです。



i = play("O4L3ED#ED#EO3BO4DCO3A2RCEAB2REG#BO4C2R");
  i = play("EO4ED#ED#EO3BO4DCO3A2RO3CEAB2REO4CO3BA2");




Play文の文法の説明



 ※できるだけ昔のマイコンのPlayコマンドを思い出して作ったつもりですが、④のような制限があります。



 ①音符 : 音符を"CDEFGAB"(=ドレミファソラシド)で表します。



       音符の後に#/bを付けると半音上げ/下げとなります。



       音符の後に数字(0~6)を付けることでその音符の長さを指定できます。
       (音符の数字と長さの関係は④参照。)



       音符又は音符の長さの後に”.”を付けると付点音符となります。



       数字を付けない場合は④で指定されるデフォルト長になります。



 ②休符 : "R"の後に数字(0~6)を付けることで休符を指定できます。



       (休符の数字と長さの関係は④参照。)



       休符または休符の長さの後に”.”を付けると付点休符となります。



       数字を付けない場合は④で指定されるデフォルト長になります。



 ③オクターブ: "O" の後に数字(1~5)でオクターブ指定となります。



 ④長さ   : "L" の後に数字(0~6)で音符・休符のデフォルト長さ指定になります。



          数字は音符の長さを1/(2^n)としたときのnを指定します。



          つまり全音符は0、 二分音符は1、四分音符は2、八分音符は3、



          十六分音符は4、三十二分音符は5、六十四分音符は6です。



          (※一文字で表現することで解析処理を容易にするためにこうしました。)



 ⑤音量  : "V" の後に数字(1=LOWまたは2=High)で音量指定となります。





 



■ソフトの説明



 今回のソフトは主に以下3つの機能追加でできています。



 ①文字列解釈ルーチン



   main.c内のplay()関数に作りこまれています。



   これはswitch-case文の活用で乗り切りました。



 ②タイマT16のCH2使ってをPLAY文の音符、休符の長さに合わせたwaitルーチン



   main.c 内のplayWait()関数内に作りこまれています。



   元々のサンプルにCH0を使ったWait()関数があり、ほとんどその真似っこでできました。



   ※main.c変更以外にvector.c にCH2割り込み処理関数を定義する必要があります。 



③音符ごとの周波数、長さの定義



   main.c内のinitPlay()関数内でテーブルに設定しています。



   テンポもここで指定します。



 





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



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



※※注意事項※※



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



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



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





 



次はBGM機能に挑戦したいと思います。



 



以上





 





 





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





2010.04.16 Fri l 液晶搭載マイコンモジュール l コメント (0) トラックバック (0) l top

コメント

コメントの投稿












トラックバック

トラックバック URL
http://diyelec.blog.fc2.com/tb.php/89-d6c02b08
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。