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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0403
oopsmciでの再生速度変更時2解決


oops

リンク

2007/4/3(Tue) 17:35:47|NO.6914


dialog "mp3;*.wav;*.mid",16 ;音楽ファイルを開く if stat=0:end mci "open \""+ refstr +"\" alias file" ;エイリアス名をfileとする onexit goto *owa ;閉じるボタンを押すとラベル*owaへ mci "play file" ;再生 mci "set file speed 1500" ;1.5倍速にする mci "status file length" naga=stat ;変数nagaは音楽の長さ repeat redraw 0 color 255,255,255:boxf pos 0,0 color mci "status file position" iti=stat ;変数itiは再生位置 mes ""+ iti +"/"+ naga +"" redraw 1 wait 1 loop stop *owa mci "close file" ;fileを閉じる end
上のスクリプトにて、音楽の再生速度を変えて再生したら、
音楽がなりおわる前に再生位置を示した値(変数iti)がとまってしまいます。
なぜとまってしまうのでしょうか?
よろしかったら教えてください。



この記事に返信する


pizza

リンク

2007/4/8(Sun) 02:28:38|NO.7147

MP3の再生速度を変更すると、正しい再生位置を取得出来なくなるようです。
(HSP側のバグではありません。)

速くした時はpositionの方が速く、遅くした時はpositionの方が
遅く進むようになりますね。

MediaPlayerのCurrentPositionプロパティや
DirectShowのIMediaSeeking::GetCurrentPositionでも
正しい位置が取得出来ませんでした。
(VBMP3.dllで試したら、正しい位置が取得出来ているようです。)

確認用↓


#include "winmm.as" #module #deffunc mci_cleanup onexit mci "close all" return #global dialog "mp3", 16 if stat == 0 : end mci "open \"" + refstr + "\" alias music" if stat == -1 : end mci "set music speed 1500" mci "status music speed" speed = stat mci "status music length" len = stat mci "play music" timeGetTime : t = stat // 再生開始時間 *main wait 1 redraw 0 color 255,255,255 : boxf : color pos 0, 0 mci "status music position" mes "mci status=" + stat mci "status music mode" if refstr != "stopped" { // 経過時間から計算する(誤差有り) timeGetTime p = (stat - t) * speed / 1000 if p > len : p = len } mes "実際の位置=" + p mes "全体=" + len redraw 1 goto *main



oops

リンク

2007/4/10(Tue) 23:23:54|NO.7237

ありがとうございます。
大幅に改善しました。



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