トップページ > 過去ログ > 記事閲覧
ムービーが音ズレする
名前:banba 日時: 2010/01/31 09:44

質問です。 下記のムービー再生関数を60FPSのスピードでループしてムービー再生しているのですが 必ずではないのですが、よく再生時に音ズレしてしまうのです。 いきなり0.5秒程度経過したムービー画面になり、遅れて音が再生されるのです。 凄く稚拙なコードなのはともかく、どこが悪いのかわかりません・・・ int op_saisei(){ int tyudan=0; //ムービー再生してなかったら、最初にシークして開始 if(op_movieF==0 && GetMovieStateToGraph(op_movie)==0){ SeekMovieToGraph(op_movie,0); PlayMovieToGraph(op_movie); DrawExtendGraph( 0,0,640,480, op_movie , FALSE ) ; op_movieF=1; return 1; //ムービーが終了していたら0を返す }else if(op_movieF==1 && GetMovieStateToGraph(op_movie)==0){ func_state=2; return 0; //ムービーが中断していたら再生フェード、中断終了したら0を返す }else if(op_movieF==3){ PauseMovieToGraph( op_movie ) ; tyudan=fadeout1(3); if(tyudan==0){ func_state=2; return 0; }else{DrawExtendGraph( 0,0,640,480, op_movie , FALSE ) ;tyudan=fadeout1(3); return 3; } } //中断処理 if(GetJoypadInputState(DX_INPUT_KEY_PAD1)!=0){ op_movieF=3; DrawExtendGraph( 0,0,640,480, op_movie , FALSE ) ;return 3; } DrawExtendGraph( 0,0,640,480, op_movie , FALSE ) ; return 2; } ちなみに動画形式はOGVです。 こんなんですけど回答いただければありがたいです。

Page: 1 |

Re: ムービーが音ズレする ( No.1 )
名前:管理人 日時:2010/01/31 22:44

貼り付けて頂いたソースは問題無さそうですが、全体を拝見しないとなんとも言えません・・・ OGV形式をお使いの方は恐らくまだそれほどいらっしゃらないと思いますので、ライブラリのバグである原因もかなり高いと思います とりあえず、ご質問に対してご質問で返してしまうのですが・・・ banbaさんがお使いのPCのスペックはどの位でしょうか? ( お使いのOS、CPUの性能、GPUの性能、搭載されているメモリの容量など ) というのも、動画再生はサイズやフレームレートによってはかなりマシンパワーの必要とする処理なので ( しかもDXライブラリの OGV 再生は Windows Media Player 等よりもマシンパワーを必要とします )、 PCのスペックが原因である可能性もあるからです
Re: ムービーが音ズレする ( No.2 )
名前:banba 日時:2010/02/02 19:32

PCスペックは XP SP3 メモリ2G CPU Core 2 DuoE4500 GPU RadeonHD4550 と、いったところです。 多分、スペック的には足りているかな・・・?と思います。 今MPGで試したところ、現象が起きなかったのでいったんはコレでいきたいと思います。
Re: ムービーが音ズレする ( No.3 )
名前:管理人 日時:2010/02/07 23:48

性能的な問題は無さそうです 再生されている動画の解像度やビットレートはどのようになっていますでしょうか? と、MPGでの再生に切り替えられたのですね もしまだこちらのスレッドをご覧になられていましたらご返答頂けないでしょうか・・・
Re: ムービーが音ズレする ( No.4 )
名前:banba 日時:2010/02/14 03:12

ttp://www.dotup.org/uploda/www.dotup.org652810.zip.html こちらの方にUPしました。パスは「dxlib」です。 適当にニコ動でUPされていた動画(flv)をffmpeg2theora-0.25でogvに変換したモノです。
Re: ムービーが音ズレする ( No.5 )
名前:管理人 日時:2010/02/15 00:22

ありがとうございます 動画も特別重いということはないみたいです とりあえず p ボタンが押されたら ポーズ→先頭にシーク→再生 というのをする テストプログラムを組んでみたのですが、再現しませんでした・・・ 何か条件があるのかもしれませんので、もし不都合がありませんでしたら 本件の現象が発生する banbaさんが組まれたプログラムを BQE00322(あっとまーく)nifty.com まで送っていただけないでしょうか? m(_ _;m
Re: ムービーが音ズレする ( No.6 )
名前:banba 日時:2010/02/19 02:19

了解しました!
Re: ムービーが音ズレする ( No.7 )
名前:管理人 日時:2010/02/22 01:21

メールありがとうございます 私の環境で実行してみましたが、件の現象は発生しませんでした 映像が0.5秒ほど先に進んでしまうということは冒頭の青バックのカットが 殆ど映らないということでしょうか? あと、Ogg Theora は別スレッドで先読み処理をしていますので、 もしかしたら LoadGraph で Ogv ファイルを読み込んだ後に WaitTimer( 500 ) ; を実行してウエイトを入れると音ズレが なくなるかもしれません( メインスレッドが WaitTimer( 500 ); で待っている間 先読みスレッドが動画を先読みするので、音と映像の同期が正常に行われ易くなります ) よろしければお試し頂けないでしょうか? もしこの方法で症状が改善されましたらデフォルトで先読み待ちの処理を 入れようと思います・・・ あと、もしかしたら最新版では正常に再生されるかもしれませんので、 よろしければこちらのバージョンをお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: ムービーが音ズレする ( No.8 )
名前:banba 日時:2010/02/23 03:52

対応ありがとうございます! >映像が0.5秒ほど先に進んでしまうということは冒頭の青バックのカットが 殆ど映らないということでしょうか? その通りの症状です。 残念ながらどちらの方法も試してみたのですが改善されませんでした;。 何が原因なんでしょう…。自分の環境が特異すぎるのでしょうか? ここましてもらってもダメなら流石にmpgで妥協しても良いのですけどね。
Re: ムービーが音ズレする ( No.9 )
名前:管理人 日時:2010/02/28 22:04

駄目でしたか・・・ 特異ということは無いと思うんですが・・・ 今回はテストプログラムを作ってみました https://dxlib.xsrv.jp/file/PlayMovieToGraphOGV.zip ( op.ogv ファイルは同梱していませんので、banbaさんの方でご用意お願いします m(_ _)m ) 実行すると @ PlayMovieToGraph を呼び出した時に GetNowCount で取得した時刻から経過した時間 A TellMovieToGraph で取得できる動画ハンドルが返してくる現在の再生時間 B 動画画像を最後に更新したときに記憶した「そのときの音声部分の再生時間」 C @とAの誤差( 正常なら2桁か 100msec台 ) D @とBの誤差( 正常なら2桁か 100msec台 ) あと、動画が画面に表示されますので、件の現象が発生しているときの CとDについて、どのような表示になっているかご確認いただけないでしょうか? m(_ _)m あと、描画遅延が原因の場合はCとDの数値が正常にも関わらず件の現象が発生する 可能性も有りますので、キーボードの方向キーで操作できる緑色の四角形も用意しました、 描画遅延が発生していると方向キーを押してもなかなか動き出さないという現象が発生しますので、 こちらもよろしければご確認お願いします m(_ _;m

Page: 1 |