mciで音楽を再生しようとしています。
演奏/停止命令は一行だけで動作を確認出来たのですが
・mciSendString('play FILE', '', 0, 0) ;
・mciSendString('close FILE', '', 0, 0) ;
再生位置を取得する方法が今ひとつ分かりません
変数代入とか試みましたがうまく機能しません。
どうすればよいのか教えて下さい。
・t:=mciSendString('status FILE length','',0,0) ;
くだらない質問ですがよろしくお願いします。
MCIコマンドは結構たくさんの量があります。
http://www.bekkoame.ne.jp/i/mr.manri/hsp.html
HSPのサイトですけど、ここに一覧があります。
質問の書き方がマズかったかもしれませんが、
HSPでは可能ですが、Delphiでの取得方法が分かりません。
HSPにはシステム変数(stat)に値が戻ってくるのですが
Delphiでの戻り値はどう取得すれば良いのでしょうか?
;hsp mp3
dialog "",16,""
mci "open \""+refstr+"\" alias FILE"
mci "play FILE from 0"
mci "status FILE length" : t=stat
mes t
stop
Openなど、特に情報のないコマンド以外を送ったときの情報(Lengthなど)を得るには、
APIの二つ目の引数に文字列バッファを、第三引数にそのバッファの長さを入れて使います。
※文字列は普通のStringではないので、念のため
Lengthなどは、StrToIntで変換できます。
Delphiでやるには、mciSendStringよりmciSendCommandを使ったほうが早いし、
MediaPlayerコンポーネントを使ってもいいと思いますけど。
折角のご返事なのですが
初心者なんで理解できませんでした。
他力本願で申し訳ありませんが
再生方法(mciSendCommand)の簡単なサンプルを
提示して頂けるとありがたいのですが...。
> 再生方法(mciSendCommand)の簡単なサンプルを
わたしも知りません^^;
ただ、mciSendStringをDelphiで使う場合、
引用符つきで、その場で文字列を指定した場合(PCharと同等の扱いで使える)を除いて、
String型はPCharにキャストしなければ使えません。
なので、mciSendStringを多用すると、遅くなります。
これは、確認済みです。
素直にMediaPlayerコンポーネントを使ったほうが早いと思いますけど…。
そうですか.....。
色々とご無理を言いまして申し訳ありませんでした。
どうもありがとうございました。
知ってるので書いときます。
var
ret :array[0..70] of Char;
Pos:Integer;
を宣言しておいて
mciSendString('status audio1 position', ret, 70, 0);
audio1は、適当なデバイス名です。
retに、現在位置(秒)が入ります。
pos:=StrToInt(Strpas(ret));
とすれば、posの中に現在の位置が入ります。
分にしたければ
min:=pos div 60;
sec:=pos mod 60;
となります。
ご親切にありがとうございます。
提示サンプル参考にさせて頂きます。
"たかみちえ"さま
"部員弐号"さま
ありがとうございました。
ツイート | ![]() |