« 2002年11月 | トップページ | 2003年11月 »

2003/04/24

C MAGAZINE 2003-5月号 (3/3)


 僕自身、ハードウェアを制御するソフトウェアを書いていたので、その時の技術を説明しますと、WindowsみたいにAPIなんてものは、まずないので、自分でAPIに変わる関数を作らないといけません。MIDIプレイヤーを作るには、まずこのAPI に変わるもの、すなわち土盤から、設計するわけです。
 この土盤の設計が下手だと、演奏がもたったり、テンポズレが発生したりします。土盤を固めるのは、大事です。というか、MIDIプレイヤーは、この土盤が命です。
 ある1byteのデータを送る事を考えると、前に述べたとおり、0.3ミリ秒の時間を要します。すなわち、次の1byteを送るまでに、0.3ミリ秒もの時間を待たないといけないのです。何もしないで待っているのは、無駄以外の何者でもないので、皆さんは他の処理をやらせたいと思うでしょう。とすると、考えられるのは、「次に送りたいデータをどっかに退避しておいて、次の処理を行う」ことです。いま、送っているデータの送信が完了したら、どっかに退避しておいたデータを送ります。この「どっか」が、バッファと呼ばれるものです。FIFOバッファとか、Qバッファとか、ストリームバッファとか色々ありますね。まさに、それです。この土盤の上に、MIDIプレイヤーを築けば、安定した演奏が可能でしょう。

 この、バッファリングの処理は、Cマガジン3月号のWonder Swanの記事を書いた時に、一緒に解説をしたので、読んでみるのもいいかもしれません。



●さくらをつかった作曲

 記事最後の、さくらを使った作曲は梅本竜さんが書いてくれました。
なにか疑問があれば、本人か、さくらのコミュニティーに質問掲示板がありますので、そちらで質問するのも手だと思います。



 と、ここまで書いたはいいが、・・・
原稿にここのURLを書いていないので、誰が読むんだろう?
本名で執筆しているからS.W.の名前も出してないし。
多分、本名よりも、S.W.の方が知られているだろうし。

 と、なんとも微妙な日記になってしまった今日この頃である。



---終わり(3/3)

| | コメント (0) | トラックバック (0)

C MAGAZINE 2003-5月号 (2/3)

 実は、日本語のほうのMSDNライブラリにはたいしたこと書いて無くて、というか、間違えて翻訳されている部分もあるという・・・。コールバック関数に渡される数値の意味だとか、変数・構造体の説明だとかは、英語のほうにしか書いていないのです。英和辞典が大活躍!!(ブックシェルフだけどね(^^;)
くじら飛行机さんと、msnチャットで、お互いが持っている情報を交換し合って、最終的に、コールバック関数で送信完了メッセージを受け取って、MIDIプレイヤー側のフラグを立てるという手法に落ち着きました。(まだ、どっかに潜在的なバグが潜んでいそうです。ユーザー様のフィードバックをお待ちします。)

 僕自身、はじめて、MIDIのAPIを見たのですが、すごい使いにくい仕様なんですよね。MIDI規格で、非同期の31.25[kbit/s](スタートビット1、ストップピット1)と決まっているので、実際1Byteを送ろうとすると、約0.3[ミリ秒]時間を要するのです。MidiOutShortMsg()関数は、3[byte]単位で送信する関数なので、この関数呼ぶと、1[ミリ秒]処理が戻ってこないんですよ。「嘘だろぉ~~」と思ってしまいました。パソコンの世界で1ミリ秒は、大きいですからね~。いやー、どうせなら、1バイト単位で送信する関数が欲しかったですねぇ~。(ToT
 僕は、てっきりMIDIドライバーでストリームバッファ等が用意してあって、ショートメッセージや、ロングメッセージってのは、そのバッファに入れるだけだと思っていました。実際は、これらの関数って、デバイスに直接出力しているんですね。まぁ、ロングメッセージに関しては、ストリームバッファを(自分で)用意して、出力するわけですが。
 まぁ、ここら変の詳しい方法は、Cマガジン5月号を参照してください。もっと、詳しく書いてあります。自分はまだ見ていないのですが、付録CD-ROMに、MIDI APIがまとまっているはずです。



---続く(2/3)

| | コメント (0) | トラックバック (0)

C MAGAZINE 2003-5月号 (1/3)

 C MAGAZINE 2003-5月号に、くじら飛行机さんの「さくら」についての記事が掲載されました。主な執筆はくじら飛行机さんに任せて、僕はプログラム関係のとこをチョコチョコと書いただけですが・・・(^^;



●プログラムのお話

 実は、僕自身Windowsのプログラムってのは、あまり経験が無くあの程度の記事でもかなりてこずりました。その点、初心者の視点から記事が書けたので、良かったかなぁ~とか思います。(本当かよ!?)

 実際、サンプルプログラムを書いたとき、エクスクルーシブの挙動がおかしいのですよね。(実際にプログラミングをしたのは、くじら飛行机さんですがね(^^;)
MidiOutLongMsg()関数をMSDNライブラリで調べてみると、メッセージを全て送る前に関数から処理が帰ってくるってのは原稿にも書いたんですけど、これが曲者で、当初ロングメッセージをすべて送り終わる前に、ショートメッセージを送っていたのです。すると、ロングメッセージとショートメッセージがぶつかるのです。もちろん、MIDI機器には正常なデータが送られなくて、誤動作すると。(なんか、システムも不安定になったとか聞きした。)



---続く(1/3)

| | コメント (0) | トラックバック (0)

« 2002年11月 | トップページ | 2003年11月 »