| どうも、こんにちは。 ごろぉです | |
| こんちわっす! 比芦 美沙(ひろ はずな)です! | |
| ふむ。 順調にこのコーナーも第4回を迎えたわけだが | |
| 一体前回からどれだけ時間が経ってんのよぅ それに、結局第2回はどうしたの? |
|
| …ああ、あれなー。 いいよ。 どうせ今時使わんだろ。ACMなんて |
|
| それじゃ、どうすんの? | |
| 2回目は永久欠番決定。 …まぁ、気が向いたら出すかもしれんが |
|
| ……まぁ、良いけどね。 そういうのはもう言っても無駄だし | |
| ああ。その通りだな | |
| …うし。 んで、今回は音楽CDを扱おうかと思う | |
| 音楽CD? なんでまた | |
| 最近は少なくなったけどな、BGMにCDの音源を使ったゲームがあるんだ | |
| へぇ… | |
| で、ここでいっちょ音楽CDを再生できるプログラムでも作成しようって話さ | |
| なるほどぉ …で、今回はどうやって? | |
| 今回はVBからMCI(Media Control Interface)というのを利用しようかと思う。 結構お手軽にイロイロなマルチメディアファイルを扱えるのだ |
|
| またAPI? | |
| まぁな。 でも今回は結構簡単だ。 使用するAPIは1つのみだ。 それだけ使えばCD操作の大体の機能が実現できるんだ |
|
| 一個だけで? | |
| そ。 お手軽だろ? mciSendStringというAPIを使ってみよう。 mciSendCommandっつーのもあるんだが、こっちの方が更にお手軽の気がする |
|
| どうやって使うの? | |
| え〜と… 例えば、『CDドライブ(E:\)のトレイを開ける』という命令 lngret = mciSendString("set cdaudio!E:\ door open", vbNullString, 0, 0) |
|
| ??? | |
| …まぁ、兎に角こうすればEドライブは開いてくれるわけだ。 set〜 て所の文字列を変えれば、あらゆる命令を発行する事が可能。 |
|
| ふーん… あ、じゃぁDDオープナーって | |
| その通り。DDオープナーはMCIを利用してCDドライブを開閉している | |
| へ〜ぇ… | |
| さて。 そんじゃ、今回のプログラムの簡単な目的を作るか… ・音楽CDを再生する ・複数ドライブにも対応 ・繰り返し再生できるように、再生終了時には通知が来るように ・何か他には無さそうな機能 |
|
| …最後のは? | |
| や、 ウチだけのオリジナルが何か欲しいかなとね | |
| さて。 今回もサンプルを用意した | |
| 今回もクラス? | |
| いや、どうもVBのクラスは慣れなくて…今回は標準モジュールでのサンプルだ | |
| どんな感じの? | |
ああ。こんなんだ![]() |
|
| …バーコード? | |
| ああ。CD内部に、バーコード用の12桁の数字が入っていることがあるんだ。 そいつを『JCEdit』の機能を移植して表示させてみた 対応したCDドライブが必要だがな |
|
| …少なくともゲーム作りには関係無さそうね | |
| …まぁな でも、いいじゃないか。若しかしたら何処かで使うかも知れないぞ? |
|
| さて。 このサンプル内で使える関数の説明をしよう |
| 関数名 | 引数 | 戻り値 | 説明 |
| vbCD_Open | Alias As String[省略可] Drive As String[省略可] |
Boolean 関数が成功した場合、True 失敗した場合はFalseが返る |
MCIでドライブをオープンする。 引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 引数Driveはドライブ名。省略した場合、デフォルトのドライブになる。 |
| vbCD_Close | Alias As String[省略可] | Boolean 関数が成功した場合、True 失敗した場合はFalseが返る |
開いたドライブをクローズする。 引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 |
| vbCD_GetTrackNumber | Alias As String[省略可] | Integer CDのトラック数が返る |
CD内のトラック数を取得する。 引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 |
| vbCD_Play | Track As Integer hWnd As Long Alias As String[省略可] |
Boolean 関数が成功した場合、True 失敗した場合はFalseが返る |
CDを再生する。 引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 Trackで指定したトラックを再生する。 hWndを指定すると、再生終了時にウインドウに通知が送られる。 |
| vbCD_Stop | Alias As String[省略可] | Boolean 関数が成功した場合、True 失敗した場合はFalseが返る |
再生中のCDを停止する。 引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 |
| vbCD_GetTrackStart | Track As Integer Alias As String[省略可] |
Long トラックの開始位置が返る。単位はミリ秒。 |
再生中のCDを停止する。 引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 |
| vbCD_GetTrackLength | Track As Integer Alias As String[省略可] |
Long トラックの長さが返る。単位はミリ秒。 |
トラックの長さを取得する。 引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 |
| vbCD_GetPosition | Alias As String[省略可] | Long 現在の位置が返る。単位はミリ秒。 |
再生中の現在位置を取得する。 引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 |
| vbCD_GetTrack | Alias As String[省略可] | Long 現在のトラック番号が返る。 |
現在のトラック番号を取得する。 引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 |
| vbCD_DoorOpen | Track As Integer Alias As String[省略可] |
Boolean 関数が成功した場合、True 失敗した場合はFalseが返る |
ドライブのドアを開く。 引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 |
| vbCD_DoorClose | Track As Integer Alias As String[省略可] |
Boolean 関数が成功した場合、True 失敗した場合はFalseが返る |
ドライブのドアを閉じる。 引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 |
| vbCD_CanEject | Track As Integer Alias As String[省略可] |
Boolean ドライブを開く事が出来る場合はTrue、そうでない場合はFalseが返る。 |
ドライブのドアが開けるかチェックする時に使う。 引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 |
| vbCD_CanPlay | Track As Integer[省略可] Alias As String[省略可] |
Boolean 再生する事が出来る場合はTrue、そうでない場合はFalseが返る。 |
引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 Trackで指定したトラックが再生可能か調べる。省略すると、ディスク自体が再生可能か調べる。 |
| vbCD_GetStatus | Alias As String[省略可] | vbCD_Status 現在の状態が返る。状態は以下の通り NotOpen…デバイスがオープンしていない Playing…再生中 Stopped…停止中 NoMedia…ディスクが入っていない |
現在の状態を調べる。 引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 |
| vbCD_GetIdentity | Alias As String[省略可] | Long ディスク固有の数値が返る。 |
ディスク固有の数値を取得する。 ここでの数値は、ディスク毎に異なる為、ディスクの判別の役に立つ。 引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 |
| vbCD_GetIdentity | Alias As String[省略可] | String UPCコードが返る |
UPCコード(統一商品コード)を取得する。 このコードは、日本ではJANコードに他ならず、パッケージのバーコードと同じ物である。 記録されていないCDや、対応していないドライブもあるので注意。 引数Aliasはプログラム内での識別名。省略した場合、デフォルトの値になる。 |
| …と、こんな感じか。 実際、サンプルプログラム内では他にもCDドライブの列挙なんかの機能も入ってる |
|
| ふーん…でも、こんだけ命令を用意してるのに、たった一つのAPIしか使ってないんでしょ? 便利な物だねぇ |
|
| 確かにそうだな。 | |
| …でもそれじゃぁ、サンプルなんて作らずに命令文の一覧でも作った方が良かったんじゃないの? | |
| …それは言っちゃ駄目 |