HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0106
grassheartmciでのseekがうまく行かない。5解決


grassheart

リンク

2018/1/6(Sat) 11:29:43|NO.82185

表題の通り、mci命令でのseekが正常に実行できません。
現在、mci命令を用いたmp3プレイヤーを作成していて、seekがうまく行かず、
確かめるためにseekの部分だけ抜き出したスクリプトを書いて
実行させてもseekが正常に実行できません。

#packopt name "test" dialog "mp3",16,"音源ファイル" if (stat=0):end mci "open "+refstr+" alias hsp" mci "set hsp time format ms" mci "play hsp" wait 180 mci "seek hsp to 36000" mes "36000msへseekしました" stop

実行環境は Lubuntu 17.10(x86_64) + Wine 2.0.2 です。
これは単に環境依存(Wineを使っているから)なのかmciの使い方が間違っているのか
原因がわかる方がいらっしゃれば教えていただきたいです。
ちなみに
 mci "play hsp from 32000" 

のようにしてplay 〜 fromでシークと同じようにすること(?)はできました。



この記事に返信する


grassheart

リンク

2018/1/6(Sat) 11:31:38|NO.82186

補足させていただきますと
「正常に実行できない」というのはseekを実行したところで
再生が停止してしまう、ということです。



あまら

リンク

2018/1/6(Sat) 12:39:23|NO.82189

windows10で確認しました。
確かにseekの後に再生が停止しますね。
細かく状態を取得してみたところ、seekすると停止(stop)されるようです。
seekの後にもう一度playとすればちゃんとその位置から再生されました。

以下確認にしようしたソース
#packopt name "test"
dialog "mp3",16,"音源ファイル" if (stat=0):end mci "open "+refstr+" alias hsp" if( stat == -1 ): mes "error 1"; mci "set hsp time format ms" if( stat == -1 ): mes "error 2"; mci "play hsp" if( stat == -1 ): mes "error 3"; //wait 180 mci "seek hsp to 36000" //mes "36000msへseekしました" *playloop await 34; redraw 0; mci "status hsp length"; 再生時間取得 playtime = stat; mci "status hsp position"; 現在位置取得 playnow = stat; mci "status hsp mode"; 状態取得(playing=再生中,stopped=停止中,paused=一時停止中) playstate = refstr; color 255, 255, 255; boxf; color 0, 0, 0; pos 0, 0; mes "再生時間:"+playtime; mes "現在位置:"+playnow; mes "状態:"+playstate; redraw 1; goto *playloop



grassheart

リンク

2018/1/6(Sat) 13:30:52|NO.82191

あまらさん、回答ありがとうございます。
seekを行ったあと、もう一度playを送れば再生されるとのことですが、
自分の環境ではseekで指定した場所からplayが行われませんでした。
先程のスクリプトの

mci "seek hsp to 36000"
のあとに

mci "play hsp"
と記述したのですが、これでは36000ms部分からではなく
最初からの再生になってしまいました。これでは間違いなのでしょうか?
それかこれは環境依存なのでしょうか?



あまら

リンク

2018/1/6(Sat) 14:14:04|NO.82193

エミュレータ上でということですので環境依存の可能性もありますね。

一応下記に3〜4秒ごとにシーク位置をずらすソースを乗せておきます。
#packopt name "test"
dialog "mp3",16,"音源ファイル" if (stat=0):end mci "open "+refstr+" alias hsp" if( stat == -1 ): mes "error 1"; mci "set hsp time format ms" if( stat == -1 ): mes "error 2"; mci "play hsp" if( stat == -1 ): mes "error 3"; //wait 180 //mci "seek hsp to 36000" //mes "36000msへseekしました" loopcount = 0; *playloop loopcount++; await 34; redraw 0; mci "status hsp length"; 再生時間取得 playtime = stat; mci "status hsp position"; 現在位置取得 playnow = stat; mci "status hsp mode"; 状態取得(playing=再生中,stopped=停止中,paused=一時停止中) playstate = refstr; color 255, 255, 255; boxf; color 0, 0, 0; if( (loopcount\100) == 0 ) { mci "seek hsp to "+(playnow+10000)+""; mci "play hsp" } pos 0, 0; mes "再生時間:"+playtime; mes "現在位置:"+playnow; mes "状態:"+playstate; redraw 1; goto *playloop
これですと私の場合、一瞬音が止まった後シークがずれた位置から再生されます。



grassheart

リンク

2018/1/6(Sat) 14:40:23|NO.82194

あまらさん、度々ありがとうございます。
同じコードを動かしましたがうまくいかないようです。
あまらさんの環境では意図したように動いている、ということであればやはり環境依存ですかね。
LinuxのWineでもちゃんと動くようにしたいので今回作っている作品では
mci "play 〜 from"を用いることにしたいと思います。
原因がわかってほっとしました。ありがとうございます。



ONION software Copyright 1997-2023(c) All rights reserved.