音楽CDを操作


ごろぉ:どうも、こんにちは。 ごろぉです
はずな:こんちわっす! 比芦 美沙(ひろ はずな)です!
 
ごろぉ:ふむ。 順調にこのコーナーも第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しか使ってないんでしょ?
便利な物だねぇ
ごろぉ:確かにそうだな。
はずな:…でもそれじゃぁ、サンプルなんて作らずに命令文の一覧でも作った方が良かったんじゃないの?
ごろぉ:…それは言っちゃ駄目
今回作った『音楽CDを操作』のサンプルはこちらです。(zip圧縮 24,009 バイト)

戻る
メインページ倉庫サンプル置き場