MCIコマンド解説


105,931



MCIによるメディアデバイスの操作方法


 いつのまにか、/mcicontrolなるコマンドがEQクライアントに導入されていたようで、 大分前からヘルプにあったけど、デバッグ用かと思っていたら、使えるみたいですね。

 そこで、MCI関連の技術情報をまとめておきます。

 そもそも、MCIとは、メディアコントロールインターフェースの頭文字で、 Windowsのマルチメディア制御用I/Fのうちのひとつなんですが、 このAPI群は変わった事に、文字列を渡してデバイスを制御する事ができます。
(プログラム的には数字定数版の方が便利なのですが)
 どうやら、EQの/mcicontrolコマンドは、  MCIの文字列制御APIにそのまま文字列を渡しているだけのふしがあります。
というか絶対そう(w
 と言う事は、CDのみならずMCIでサポートしているデバイスは全て再生できるはずです。
 まぁ、このMCIコマンドは、デバイスによって方言があって、かならずしも以下のコマンドが 通用するとは限りませんが、大体は同じような操作で再生できます。

 コマンドは文字列なので、お気に入りのBGMなどはSocialsに登録しておくとよいかも知れません。

CDの再生方法

 最初にデバイスをオープンします。
 (ちなみに、cdaudioの場合はオープンしないでも再生できます。)

/mcicontrol open cdaudio

 cdaudioというのは、Windowsに登録された、CD用のMCIデバイス名です。
 MCIでは基本的に全てのコマンドにデバイス名を指定しなければなりません。

 オープンしたら再生が可能になります。

/mci play cdaudio

 EQのコマンドは他と区別がつく限り省略ができるので、/mciとしてみました(w
 オープン直後なら、これで最初のトラックから再生が始まるはずです。

 停止するには

/mci stop cdauio

 です。

 ところで、cdaudioって打つのに長すぎていやになりませんか?(w
 そういう時はaliasオプションを使うとよいです。
 エイリアスとは、別名定義で、オープン時に指定すると、
以後のコマンドでデバイス名ではなくその名前でデバイスがコントロールできます。

/mci open cdaudio alias cd

 こうすると、cdという名前で別名定義されるので、

/mci play cd
/mci stop cd

 などのように使用できます。

 ところで、ストップしてから再生を行なうと、その位置から再生が始まります。
 最後のトラックまで再生し終えると、次に再生コマンドを送っても再生されません。
 再生位置が一番後ろに来ているからです。
 その場合は、playコマンドにスタート位置を指定するか、シークさせてから再生します。
 まずは、シークコマンドです。
 ただ、このシークコマンドはかなり面倒です。(元々プログラム用なので)
 シーク位置の指定は、現在の時間フォーマットで指定する必要があります。
 現在のタイムフォーマットを得るには、

/mci status cd time format

 フォーマットを指定するには、

/mci set cd time format XXX

 XXXの位置には以下のどれかが使用できます。

milliseconds nnnnnn ミリ秒単位の数字指定
ms nnnnnn ミリ秒単位の数字指定
msf mm:ss:ff 分:秒:コンマ秒の形式
tmsf tt:mm:ss:ff トラック番号:分:秒:コンマ秒の形式

 トラック単位でシーク位置を指定したいならば、あらかじめtime format tmsfを行なっておいて シークコマンドを利用します。

/mci set cd time format tmsf
/mci seek cd to 3:00:00:00

 これでトラック3の先頭にシークします。

 このシークの位置指定はplayコマンドでも同じで、

/mci play cd from 4:00:00:00

 とすることで、トラック4の先頭から再生を開始します。
 シークしただけでは再生は始まりません。

 例えば、トラック15だけを再生したい場合は、
/mci play cd from 15:00:00:00 to 16:00:00:00

と指定します。

 そして、最後に必ずデバイスをクローズしましょう。
 (オープンしなかった場合は必要ありません。)

/mci close cd

 CDの場合は平気だと思いますが、ファイルを利用するデバイス等は、 クローズしないと、リソースを消費したままになるかも知れません。
 リセットすれば大丈夫ですが(w

コマンド使用例)

/mci open cdaudio alias cd
/mci set cd time format tmsf
/mci play cd
/mci play cd from 15:00:00:00 to 16:00:00:00
/mci stop cd
/mci seek cd to 3:00:00:00
/mci close cd

 CDドライブが2台以上ある場合は、若いドライブ記号のものが選択されますが、 オープン時にドライブを指定する事も出来ます。

 例えば、D:とE:が双方ともCDドライブで、E:の方を再生したい場合は 以下のように記述します。

/mci open e:\ type cdaudio alias cd

 デバイス名にパスを指定し、デバイスタイプを明示的に指定します。

 CDーROMは、サウンドカードに接続している方を選択しないと再生しても 聞こえませんので注意。

MIDI、MP3、WAVEの再生方法

 MIDIやMP3の場合は、デバイス名の代わりにファイル名を指定します。

/mci open c:\mididata\abc.mid alias midi

 のような感じです。
 ファイル名はフルパスで指定する必要があるので、コマンドのたびにタイプするのは 大変なので、エイリアスを必ず指定しましょう。
 また、MP3の場合は、拡張子が関連付けされていない可能性があり、その場合は オープン時にデバイスタイプを明示的に指定します。

/mci open c:\mp3data\xyz.mp3 type Mpegvideo alias mp3

 MP3とは、MPEGビデオフォーマットの音声トラックの事で、音声だけの MPEGムービーと考えてください。
 したがって再生デバイスはMpegvideoになります。
 また、古いメディアプレーヤーではサポートされていませんので、 最新のメディアプレーヤーが入っている必要があると思います。
 ちなみにMIDIの場合はデバイスタイプはMidiaudioではなくSequencerです。

 どのタイプのファイルがどのデバイスタイプで再生可能かは、Windowsディレクトリの win.iniに記述があります。

[mci extensions]
mid=Sequencer
rmi=Sequencer
wav=waveaudio
avi=AVIVideo
cda=CDAudio
aif=MPEGVideo
aifc=MPEGVideo
aiff=MPEGVideo
au=MPEGVideo
m1v=MPEGVideo
m3u=MPEGVideo
midi=Sequencer
mov=MPEGVideo
mp2=MPEGVideo
mp3=MPEGVideo
mpa=MPEGVideo
mpe=MPEGVideo
mpeg=MPEGVideo
mpg=MPEGVideo
mpv2=MPEGVideo
qt=MPEGVideo
snd=MPEGVideo
asf=MPEGVideo2
asx=MPEGVideo2
ivf=MPEGVideo2
lsf=MPEGVideo2
lsx=MPEGVideo2
mp2v=MPEGVideo
wax=MPEGVideo2
wvx=MPEGVideo2
wm=MPEGVideo2
wma=MPEGVideo2
wmv=MPEGVideo2
wmx=MPEGVideo2
wmp=MPEGVideo2

 と、こんな感じで[mci extensions]セクションに定義されています。

 MIDIやMP3のような、ファイルの場合は、通常トラックが単一なので、 時間フォーマットはmsfでplayやseekを行なうとよいと思います。

コマンド使用例)

/mci open c:\mididata\abc.mid alias midi
/mci set midi time format msf
/mci play midi
/mci stop midi
/mci seek midi to 00:00:00
/mci close midi

/mci open c:\mp3data\xyz.mp3 type Mpegvideo alias mp3
/mci set mp3 time format msf
/mci play mp3
/mci stop mp3
/mci seek mp3 to 00:00:00
/mci close mp3

/mci open c:\wavdata\zxr.wav alias wav
/mci set wav time format msf
/mci play wav
/mci stop wav
/mci seek wav to 00:00:00
/mci close wav

コマンド一覧

 以下に、一般的にMCIで利用できるコマンドをまとめます。
 色々試してください。
 ただ、MCIの戻り値も文字列であるため、日本語Windowsでは漢字が返ってくる事があります。
 その場合、EQクライアントでは文字化けしてしまいます。
 device_nameのところにCDの場合はcdaudioが入ります。
 device_nameにはパス名を指定する事も出来ます。
ただ、パス名から拡張子が判別できない場合は、エラーになるので、オープン時に typeオプションでデバイスタイプを指定する必要があります。
 openの時にaliasを指定したならば、aliasで指定した文字列が代わりに使用できます。

コマンド 解説 戻り値
open device_name alias device_alias shareable デバイスのオープン
shareableを指定すると共有可能

close device_name デバイスを閉じる
play device_name from position to position 再生、from positionを省略した場合は
現在位置から再生、
positionのフォーマットは
現在の時間フォーマット

seek device_name to position positonへのシーク、
指定は現在の時間フォーマット

capability device_name can eject イジェクト可否 true:Eject可能
false:Eject不可
capability device_name can play 再生可否 true:再生可能
false:再生不可
capability device_name can record 録音可否 true:録音可能
false:録音不可
capability device_name can save 保存可否 true:保存可能
false:保存不可
capability device_name compound device 要オープン true:要オープン
false:オープン不要
capability device_name device type デバイスのタイプ cdaudio
capability device_name has audio 音声トラックを持つかどうか true:音声トラックあり
false:音声トラックなし
capability device_name has video 映像トラックを持つかどうか true:映像トラックあり
false:映像トラックなし
capability device_name uses files デバイスがファイルを使用するかどうか true:ファイル使用
false:ファイル未使用
info device_name product プロダクト名の表示
stop device_name 再生の停止
pause device_name 一時停止
set device_name audio all off オーディオのOFF
set device_name audio all on オーディオのON
set device_name audio left off 左オーディオのOFF
set device_name audio left on 左オーディオのON
set device_name audio right off 右オーディオのOFF
set device_name audio right on 右オーディオのON
set device_name video off VIDEOのOFF
set device_name video on VIDEOのON
set device_name door closed ドアを閉じる
set device_name door open ドアを開ける
set device_name time format milliseconds 時間フォーマットをミリ秒表記にする
set device_name time format ms 時間フォーマットをミリ秒表記にする
set device_name time format msf 時間フォーマットをmm:ss:ffにする
set device_name time format tmsf 時間フォーマットをTrack:mm:ss:ffにする
status device_name current track 現在のトラック番号を表示
status device_name length メディアの長さを表示
status device_name length track track_number track_numberのトラックの長さを表示
status device_name media present メディアが入っているかどうかを表示
status device_name mode 現在の状態を表示
status device_name number of tracks 総トラック数を表示
status device_name position 現在位置を表示
status device_name position track track_number track_numberのトラックの先頭位置を表示
status device_name ready デバイスの準備が整っているかを表示
status device_name start position デバイスの先頭位置を表示
status device_name time format 現在の時間フォーマットを表示

 デバイスによってはサポートしていないコマンドもあります。
 また、ビデオ系のデバイスではWindow制御等のコマンドもありますが、 EQプレイ中にはどうせ見れませんから、割愛しました。

 SEEKやPLAYのポジションの指定は、現在のタイムフォーマットで指定 しなければなりません。違うフォーマットで指定した場合はエラーになります。
 また、start positionより前や、start position+lengthより後を指定しても、 エラーになります。


プログラムの作成に使用したい方は、ここで紹介した文字列による制御よりも 定数制御のほうが向いています。
さらに詳しい情報が欲しい方には、こちらの本の18章メディアコントロールインターフェースをお勧めします。

Copyright ©2000 e道具屋さん
このウェブサイトに掲載されている作品の著作権はe道具屋にあります。
このサイトはリンクフリーですが、データへの直接リンク、無断転載等は禁じます。
各々のページへのリンクは構いません。
トップページはこちらです。
よかったらトップページ最下段のバナーをご利用下さい。