トップページ > 記事閲覧
動画の長さを超えた位置指定でフリーズ…を回避する方法
名前:たろう 日時: 2020/08/26 16:40

いつもすみません、たろうです 以下は「動画名.mp4」を再生して、クリック毎に早送りする仕組みですが t_plusの数値を大きくすると手持ちの動画ではどれもフリーズしてしまいます。 動画の長さよりも大きい数値を与えているからだと思いますが、 Ogg以外では動画の長さを調べる事が出来ないので、早送りを繰り返すうちいずれ末尾を超えるわけですから いずれフリーズしてしまう事になると思います。 せめてフリーズしない方法があるといいのですが、なにかございますでしょうか? (※例えばt_plusの数値の場所に動画が存在しているかどうか確認する方法など) お忙しいところすみません、よろしくお願いいたします --------------------------------------------- #include "DxLib.h" #include <locale.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { setlocale( LC_ALL, ".utf8" ); SetUseCharCodeFormat( DX_CHARCODEFORMAT_UTF8 ); ChangeWindowMode( TRUE ); SetGraphMode(600,600,16); if( DxLib_Init() < 0 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); int 動H=LoadGraph(u8"動画名.mp4"); PlayMovieToGraph(動H); int t=0,t_plus=1000000; while( ProcessMessage() == 0 ) { ClearDrawScreen() ; DrawExtendGraph(0,0,600,600,動H,0); if(t==0&&(GetMouseInput()&MOUSE_INPUT_LEFT )!=0) { t=30; int t_now=TellMovieToGraph(動H)+t_plus; SeekMovieToGraph(動H,t_now) ; PlayMovieToGraph(動H) ; }if(t>0)t--; ScreenFlip(); } DxLib_End(); return 0; }
メンテ

Page: 1 | 2 |

Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.13 )
名前:紺帽子 日時:2020/09/04 21:35

atoiDx等にてエラーが発生しないことを確認できました。 atoiDx等について変換できない文字列を読み飛ばすのは仕様でしょうか? const char *s = "XYZ123"; int n1 = atoiDx(s); //=> 123 int n2 = atoi(s); //=> 0 動画の件では添付したwebmについてはすべて正しく再生できました。 逆に添付したmp4の映像が乱れてしまいました(以前は正しく再生できていました)。 手元のその他webmやmp4について再生を行ったところ 正常に再生できるものと映像が乱れるものに分かれました。 特に大きく映像が乱れるものはアクセス違反で落ちることがあります。
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.14 )
名前:管理人 日時:2020/09/06 00:03

> atoiDx等について変換できない文字列を読み飛ばすのは仕様でしょうか? いえ、仕様ではなくバグです (_ _; 修正しましたので、よろしければお試しください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > 動画の件では添付したwebmについてはすべて正しく再生できました。 > 逆に添付したmp4の映像が乱れてしまいました(以前は正しく再生できていました)。 すみません、添付していただいた webmを再生できるようにしたところ、mp4が正常に再生できなくなっていました こちらも上記のバージョンで修正しましたので、よろしければお試しください m(_ _;m
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.15 )
名前:管理人 日時:2020/09/08 02:03

> 紺帽子さん メールありがとうございます 再度こちらでご返信を… > atoi系の処理なのですが >  > const char *s1 = "\n\t 0123"; > int n1 = atoiDx(s1); //=> 0 > int n2 = atoi(s1); //=> 123 >  > const char *s2 = "+XYZ123"; > int n3 = atoiDx(s2); //=> 123 > int n4 = atoi(s2); //=> 0 >  > 現在上記のような結果になっています。 > 先頭の空白類や0などは標準関数だと無視されます。 ご指摘ありがとうございます atoiDx もスペース文字や改行文字を無視する処理を追加しました > 動画のほうは、webmについて読み込み時と再生時に起こっていたアクセス違反はなく > なりました。 > またmp4も既存のファイルは正しく再生できるようになりました。 お試しいただきありがとうございます 正常に再生されるようになったようで何よりです > 映像が正しく表示されないwebmを添付しました。 > webmは解像度によって不具合が起こるようです。 ファイルのご提供ありがとうございます 添付していただいた webmも正常に再生されるように修正しましたので よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > 小さい動画でも読み込みできるか試していたところ > ハングするmp4が作成できたので一緒に添付します。 こちら試してみたところ、OS の API ( Media Foundation ) の中でエラーが発生してしまっているようで 何時まで待っても API から処理が返ってこない、という状態になってしまっていました エラーが返ってくるなどの場合は対処のしようがあるのですが… なので、とりあえず現状では仕様となります (_ _;
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.16 )
名前:たろう 日時:2020/09/08 21:07

たろうです。またすみません<(_ _)> DXライブラリをNo15のものに変更して試したのですが、 下のクリックすると早送りするプログラムで、 30分以上など長めのmp4の動画を読み込んで 画面をクリックしたままで進めていくと、 途中から映像だけ進んで、音声だけ初めから開始されてしまいます そこでさらにクリックするとまた音声もついてきたり 始めから開始されたりと、コロコロ変わるようです 5つほど動画は試しましたが、一つ以外は全て上記の現象が起こりましたので 大抵の動画で再現されると思います。 またwebmについては私は-1が戻れば満足なのですが、念のため試しましたところ 以下の動画で映像のみ再生され音が出ないようです (※windows10ですがコーデックは追加で何も入れていないので当たり前かもしれません) ttps://steamcdn-a.akamaihd.net/steam/apps/256760563/movie480.webm?t=1567094719 何度も申し訳ございません 宜しくお願いいたします<(_ _)> ------------------------------------------------------------------------------------- #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); SetGraphMode(600,600,16); if( DxLib_Init() < 0 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); int 動H=LoadGraph("動画名.mp4"); PlayMovieToGraph(動H); int t=0,t_plus=60000; while( ProcessMessage() == 0 ) { ClearDrawScreen() ; DrawExtendGraph(0,0,600,600,動H,0); DrawFormatString( 0,0,GetColor(255,255,255),u8"(%d)" ,TellMovieToGraph(動H) ); if(t==0&&(GetMouseInput()&MOUSE_INPUT_LEFT )!=0) { t=30; int t_now=TellMovieToGraph(動H)+t_plus; SeekMovieToGraph(動H,t_now); PlayMovieToGraph(動H); }if(t>0)t--; ScreenFlip(); } DxLib_End(); return 0; }
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.17 )
名前:紺帽子 日時:2020/09/08 21:55

atoi系はまだ直っていないようです。 const char *s1 = "+ 1"; atoiDx(s1); //=> 1 atoi(s1); //=> 0 const char *s2 = "++1"; atoiDx(s2); //=> 1 atoi(s2); //=> 0 const char *s3 = "+XYZ-1"; atoiDx(s3); //=> -1 atoi(s3); //=> 0 const char *s4 = "+XYZ+1"; atoiDx(s4); //=> 1 atoi(s4); //=> 0 const char *s5 = "\v1"; atoiDx(s5); //=> 0 atoi(s5); //=> 1 const char *s6 = "\f1"; atoiDx(s6); //=> 0 atoi(s6); //=> 1 ハングする動画について、Windows Media Playerで再生すると "ファイルの再生中にWindows Media Playerに問題が発生しました。" のダイアログがでて再生できませんでした。 ハングはしないので回避する方法はありそうです。 その他の動画については問題なく再生できるようになりました。 アクセス違反と映像の乱れは完全になくなりました。 ただ連続再生していると音声にごくまれに次のような現象が発生しています。 再生中の動画ファイルについて発生し、次の動画が再生されると直ります。 ・動画の最初から最後までプチノイズがはいる ・動画の最初から最後まで音声が一切再生されない ・動画の途中から音が小さくなる 再現性がなく必ず起こるわけではありません。 多くの動画を連続再生した後半に起こります。 再生はSetAlwaysRunFlag(TRUE);を設定して非アクティブ状態でも再生が行われるようにしています。 // 連続再生に使用しているプログラム #include "DxLib.h" #include <fstream> #include <string> #include <vector> // プレイリストを読み取る void ReadPlaylist(const char* filename, std::vector<std::string>& buffer) { std::fstream in(filename); if (!in.is_open()) { return; } std::string line; // バッファ while (std::getline(in, line)) { // 一行ずつ処理する if (line.empty() || line[0] == '#') { continue; } // 空行とコメント行は無視する buffer.push_back(line); // ほかは動画ファイル名と見做して格納する } } int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { // プレイリストから動画ファイル名を読み取って連続で再生するプログラム SetGraphMode(1280, 720, 32); SetMainWindowText(DXLIB_VERSION_STR_T); SetAlwaysRunFlag(TRUE); // 非アクティブでも動画再生されるように ChangeWindowMode(TRUE); if (DxLib_Init() < 0) { return -1; } // 再生する動画ファイル名をテキストから読み込む std::vector<std::string> playlist; ReadPlaylist("playlist.txt", playlist); // 連続再生する for (std::size_t i = 0; i < playlist.size(); ++i) { clsDx(); printfDx("%u/%u %s\n", i + 1, playlist.size(), playlist[i].c_str()); PlayMovie(playlist[i].c_str(), 1, DX_MOVIEPLAYTYPE_BCANCEL); if (CheckHitKey(KEY_INPUT_ESCAPE)) { break; } } DxLib_End(); return 0; } > たろうさん スレッドを乗っ取ってしまって申し訳ありません。 > またwebmについては私は-1が戻れば満足なのですが、念のため試しましたところ > 以下の動画で映像のみ再生され音が出ないようです > (※windows10ですがコーデックは追加で何も入れていないので当たり前かもしれません) > ttps://steamcdn-a.akamaihd.net/steam/apps/256760563/movie480.webm?t=1567094719 そのWebMは音声にOggVorbisを使用しているようです。 WebM+OggVorbisの場合は音声はでないのは仕様とのことです。 このスレッドのNo.12を見てください。 たろうさんのプログラムを使用して私の環境で10分近く動画を進めてから ウィンドウの非アクティブ化やタイトルバーをクリックして動画を一旦止めると 音声だけ最初から再生されるという現象が発生しました。 SetAlwaysRunFlag(TRUE);を使用してから同じ動作をすると問題が発生しないようでした。
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.18 )
名前:たろう 日時:2020/09/08 22:43

紺帽子さん、プログラムを試していただきありがとうございます すみませんNo12の件見落としていましたm(__)m
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.19 )
名前:管理人 日時:2020/09/10 02:56

> たろうさん > 30分以上など長めのmp4の動画を読み込んで > 画面をクリックしたままで進めていくと、 > 途中から映像だけ進んで、音声だけ初めから開始されてしまいます 手元でも同様の現象を確認しました クリックするタイミングや処理の状況によってこの現象が発生してしまうバグがありました 修正版をアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > 紺帽子さん > atoi系はまだ直っていないようです。 ご指摘ありがとうございます 載せていただいた記述でも atoi と同様の結果が得られるように修正しましたので、 よろしければお試しください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > ハングする動画について、Windows Media Playerで再生すると > "ファイルの再生中にWindows Media Playerに問題が発生しました。" > のダイアログがでて再生できませんでした。 > ハングはしないので回避する方法はありそうです。 手元の環境で Windows Media Player で再生しようとした場合は "ファイルの再生中にWindows Media Playerに問題が発生しました。"のダイアログは表示されず、 再生中状態になるものの再生時間のバーは動かない、という状態になりました ( ただ、停止ボタンや閉じるボタンは反応する ) 推測ですが、Windows Media Player は再生ボタンや停止ボタンに対応する処理を行うスレッドと 再生処理を行うスレッドが分かれていて、再生処理を行うスレッドはDXライブラリの場合と同じように Media Foundation の API の中から処理が戻ってこない状態に陥っているのではないかと思います ( DXライブラリは閉じるボタンに対応する処理や再生処理が全部一つのスレッドで行っているので 「アプリの応答がありません」状態に陥る ) > ただ連続再生していると音声にごくまれに次のような現象が発生しています。 > 再生中の動画ファイルについて発生し、次の動画が再生されると直ります。 > ・動画の最初から最後までプチノイズがはいる > ・動画の最初から最後まで音声が一切再生されない > ・動画の途中から音が小さくなる 9月6日にメールで頂いたwebmファイルで載せていただいた連続再生プログラムで確認してみたのですが、 手元の環境では再現しませんでした こちらの現象が発生したのはメールで頂いたwebmファイルとは異なるファイルでしょうか? > たろうさんのプログラムを使用して私の環境で10分近く動画を進めてから > ウィンドウの非アクティブ化やタイトルバーをクリックして動画を一旦止めると > 音声だけ最初から再生されるという現象が発生しました。 > SetAlwaysRunFlag(TRUE);を使用してから同じ動作をすると問題が発生しないようでした。 こちらも手元の環境では再現しませんでした ただ、たろうさんからご報告いただいた現象の修正が、こちらの現象にも関わっている可能性が高いので ( 同じ『音声だけ最初から再生される』という現象なので )こちらの現象も一緒に直ったかもしれません よろしければ上記の修正版でもこちらの現象が発生するかお試しください m(_ _;m
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.20 )
名前:たろう 日時:2020/09/10 20:18

いつもすみません、たろうです 「途中から映像だけ進んで、音声だけ初めから開始せれる」件につきましては 修正版で先ほど問題なく動作する事を確認いたしました。 お忙しい所ご対応いただきありがとうございました<(_ _)>
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.21 )
名前:たろう 日時:2020/09/11 09:51

たろうです。またすみません 音楽ファイルですが、症状的に関連だと思いますのでここで引き続き失礼します<(_ _)> 5分半以上(?)の長いmp3ファイルを下のプログラムで再生すると CheckSoundMemで終了を取得できないようです またGetSoundTotalTimeも、実際よりも倍くらい長い時間が表示されます 引き続きすみません、お手すきの際にご確認いただけますでしょうか? 宜しくお願いいたします<(_ _)> #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); SetGraphMode(600,600,16); if( DxLib_Init() < 0 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); int 動H=LoadSoundMem("音楽ファイル.mp3"); ChangeVolumeSoundMem(50,動H); PlaySoundMem(動H,DX_PLAYTYPE_BACK); int t=0,t_plus=10000; //char *ex="おならおならおなら.extoo"; char *p; p = strrchr(ex,'.');int lg=7;if(NULL != p){lg=strlen(p);} while( ProcessMessage() == 0 ) { ClearDrawScreen() ; DrawFormatString( 0,0,GetColor(255,255,255),"total(%d)",GetSoundTotalTime(動H) ); DrawFormatString( 0,30,GetColor(255,255,255),"now(%d)",GetSoundCurrentTime(動H) ); DrawFormatString( 0,60,GetColor(255,255,255),"play(%d)",CheckSoundMem(動H) ); if(t==0&&(GetMouseInput()&MOUSE_INPUT_LEFT )!=0) { t=15; int t_now=GetSoundCurrentTime(動H)+t_plus; StopSoundMem(動H); SetSoundCurrentTime(t_now,動H); PlaySoundMem(動H,DX_PLAYTYPE_BACK, FALSE); }if(t>0)t--; if(CheckSoundMem(動H)) { //if(GetSoundTotalTime(動H)<=GetSoundCurrentTime(動H))StopSoundMem(動H); } else { SetSoundCurrentTime(0,動H);ChangeVolumeSoundMem(50,動H); PlaySoundMem(動H,DX_PLAYTYPE_BACK, FALSE); } ScreenFlip(); } DxLib_End(); return 0; }
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.22 )
名前:たろう 日時:2020/09/13 16:57

次々とすみません、たろうです。 追加で再生すると問題のある動画を幾つか見つけましたので もしかするとMedia Foundationやファイル自体の問題なのかもしれませんが ご確認いただけると助かります。 ファイルは↓こちらにあげました(5日で消えます) ttps://file-post.net/en/s0/d1/1599979484_291465917_120/?id=8FESla4RO3jn (ぱす:sdfagsga) ※どれもVLCメディアプレイヤーでは問題なく再生されます 「終了が受け取れない.mp3」 No.21の件の、終了を取得出来ずGetSoundTotalTimeの数値もおかしいmp3です 長ければ大抵のファイルで異常は起こると思いますが念のため付けました 「音だけ倍速になる.mp4」 始めは無音ですが、ファイルの途中にシークで移動すると音が倍速で流れます 音声のSampling rate が 22.05 kHz だとこの現象が起きるようです 以下の動画二つは著作権の問題があるので、元は二時間ほどの動画ですが 何だか分からないようカットや編集をしたものです 「音がおかしい.mp4」 再生すると異音がなって、閉じるとフリーズします 「たまに音がなくなる_edit.mp4」 動画の様々な位置をシーク&再生を繰り返していると 特定の場所で音がなくなって、回復しなくなります 下のプログラムで8回ほどクリックすると その特定の場所に進み音が消えると思います 特定の場所とは言っても、例えばこの動画を無劣化で短くしてしまうと その位置が変わったりします。 (※実際は110秒辺りを指定しているだけなのに動画をクロップしていないのはそのためです) #include "DxLib.h" int TtoF(LONGLONG T,int hd) { LONGLONG oneF=(GetOneFrameTimeMovieToGraph(hd));if(oneF==0)return 0; return (int)(T*1000/oneF);} int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); SetGraphMode(600,600,16); if( DxLib_Init() < 0 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); int 動H=LoadGraph("たまに音がなくなる_edit.mp4"); PlayMovieToGraph(動H); int t=0,t_plus=6000,i=0; while( ProcessMessage() == 0 ) { ClearDrawScreen() ; DrawExtendGraph(0,0,600,600,動H,0); DrawFormatString( 0,0,GetColor(255,255,255),"(%d)" ,TellMovieToGraph(動H) ); if(t==0&&(GetMouseInput()&MOUSE_INPUT_LEFT )!=0) { t=30; int t_now=109640+i*60;i++; SeekMovieToGraphToFrame(動H,TtoF(t_now,動H)); //SeekMovieToGraph(動H,t_now);//フレームではなくミリ秒で渡しても結果は同様 PlayMovieToGraph(動H); }if(t>0)t--; ScreenFlip(); } DxLib_End(); return 0; }
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.23 )
名前:管理人 日時:2020/09/14 00:36

> たろうさん Media Foundation 関連の不具合が多くてすみません… > 5分半以上(?)の長いmp3ファイルを下のプログラムで再生すると > CheckSoundMemで終了を取得できないようです > またGetSoundTotalTimeも、実際よりも倍くらい長い時間が表示されます こちらの現象は確認できませんでした 『終了が受け取れない.mp3』でも、サウンドデータの終端に来ると正常に if(CheckSoundMem(動H)) で偽の側が実行され、再度先頭からの再生が始まりました > またGetSoundTotalTimeも、実際よりも倍くらい長い時間が表示されます 『終了が受け取れない.mp3』では画面に total(357447) と表示され、表記を変えると 357447 / 1000 / 60 = 5.95745分で、実際の 5分57秒の再生時間が正しく表示されていました たろうさんの環境では total(357447) と表示されていないのでしょうか? > 「音だけ倍速になる.mp4」 > 始めは無音ですが、ファイルの途中にシークで移動すると音が倍速で流れます > 音声のSampling rate が 22.05 kHz だとこの現象が起きるようです 手元の環境でも現象が再現しました 音が再生されるように修正してみましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > 「音がおかしい.mp4」 > 再生すると異音がなって、閉じるとフリーズします 「音がおかしい.mp4」のサウンドデータは 6チャンネルサウンドで、DXライブラリが 2チャンネルまでしか対応していなかったのが原因でした こちらも修正しましたので、よろしければお試しください m(_ _;m > 「たまに音がなくなる_edit.mp4」 > 動画の様々な位置をシーク&再生を繰り返していると > 特定の場所で音がなくなって、回復しなくなります > 下のプログラムで8回ほどクリックすると > その特定の場所に進み音が消えると思います こちらも現象が再現しました 恐らくこちらも修正できたと思いますので、よろしければお試しください m(_ _;m > 紺帽子さん メールありがとうございます 再度こちらでご返信いたします > atoi系で次のような結果になりました。 > いままで0が返っていたものが-1が返るようになってしまいました。 >  > const char *s1 = "XYZ123"; > int n1 = atoiDx(s1); //=> -1 > int n2 = atoi(s1); //=> 0 >  > const char *s2 = ""; > int n3 = atoiDx(s2); //=> -1 > int n4 = atoi(s2); //=> 0 ご指摘ありがとうございます 修正しましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > プチノイズに関しては詳細を添付ファイルにまとめました。 > 自分の環境において比較的高い確率で再現できました。 添付していただいた Source.cpp のプログラムを 30回ほど実行しましたがプチノイズの現象は 発生しませんでした VisualStudio のデバッグ実行の場合のみ再現するとのことですので、環境による影響や デバッガによる影響があるかもしれません 現在DXライブラリは標準で WASAPI を使用してサウンドを再生しているのですが、 DxLib_Init の前に SetEnableWASAPIFlag( FALSE ); という記述を追加して より再生処理が安定している DirectSound を使用する設定にすると紺帽子さんの環境でも プチノイズが発生しなくなるかもしれません ( ただ、DirectSound は WASAPI よりも若干サウンドの再生遅延時間が長いです ) > 動画のシークに関しての質問なのですが、 > 例えば次のような引数の場合は、当然長さ的に関数が失敗して-1を返すと思います。 > SeekMovieToGraph(MovieHandle, INT_MIN); > SeekMovieToGraph(MovieHandle, INT_MAX); > シークに成功すると動画が停止状態になるのは仕様と思いますが > シークに失敗した場合も動画が停止状態になるのは仕様ですか? はい、仕様です ただ、再生したままシークすると動作が不安定になるかと思い SeekMovieToGraph の冒頭で 動画の再生を停止していたのですが、本日試した限りでは再生中も問題無くシークすることが できたので、上記の暫定最新版では仕様を変更してシークでは再生を止めないようにしました
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.24 )
名前:たろう 日時:2020/09/14 15:46

いつもお忙しい中ご対応いただき、ありがとうございます。 すみません、確認させていただきましたが、まだ問題があるようです 「終了が受け取れない.mp3」 につきましては、私の環境ではtotal(714919)と表示されてしまいます。 すみません「714919の地点では終了が返らずに止まる」というのが正確でした。 つまり(357447)を通過すれば終了が返りますが、早送りを使ってそれを超えてしまうと 終了が得られないという状態です。 同じファイルで同じプログラムなのに数値が変わってしまうというのは 開発環境(visual studio community 2015を使っています)の違いでしょうか? もしくは例えば、GetSoundTotalTimeがLONGLONGで返ってくることと関係はないでしょうか? もしくは単純に下のプログラムに問題があればご指摘いただければありがたいですm(__)m 知識が足りず、何が参考になるか分かりませんが、念のため末尾にログを貼ります 「音だけ倍速になる.mp4」 につきましては、正常に再生される事を確認いたしました。 ありがとうございました<(_ _)> 「音がおかしい.mp4」 につきましては、本来の長い動画の状態で開きますとフリーズしてしまいます。 ttps://file-post.net/en/s0/d1/1600061160_222872759_120/?id=UkYf5jIZNTFw (ぱす:sdfagsga) ↑ここにそれを再現するための動画を上げましたので、そちらの「音がおかしい2.mp4」 を無劣化で4倍に拡大したものを下のプログラムで(Movを1にして)開いていただけば、だいたい 70パーセントくらいの所をシークするとフリーズすると思います。 また、動画を他の動画プレイヤーで開くと聞こえるはずの「男のうめき声」が 選択しているチャンネルの問題でしょうか、聞こえなくなっているのも確認できると思います ※すみません、分割圧縮がうまくいかず、またアップロード上限500Mなので、このような形になりましたm(__)m 私の場合Avidemuxで4回連結(約82分)してvideo、audioともコピーでmp4で吐き出したものを使うと上記のエラーが再現されます 「たまに音がなくなる_edit.mp4」 につきましては下のプログラムで試していただけると分かりやすいのですが シークバーを適当にポチポチやったりドラッグで移動を繰り返していると 動画が止まってしまいます。 以上です、お手すきの時にご確認いただけたらと思います 宜しくお願いいたします<(_ _)> ---------------------------------------------------テスト用プログラム--------------------------------------------------- #include "DxLib.h" #define Mov 0//音楽0 動画1 #define Vol 255//音量 int Total(int hd) { if(Mov){return (int)(GetMovieTotalFrameToGraph(hd)*(GetOneFrameTimeMovieToGraph(hd)/(double)1000));} else {return (int)GetSoundTotalTime(hd);} } int TtoF(LONGLONG T,int hd) { LONGLONG oneF=(GetOneFrameTimeMovieToGraph(hd));if(oneF==0)return 0; return (int)(T*1000/oneF);} int SeekBar(int hd,int 総) { static int x=310,y=300,今=0,now=0; int 鼠x=0, 鼠y=0, 鼠o=0; if((GetMouseInput()&MOUSE_INPUT_LEFT )!=0){鼠o=1;} GetMousePoint( &鼠x , &鼠y ) ; if(Mov){now=TellMovieToGraph(hd); } else {now=GetSoundCurrentTime(hd);} double p=(600*(now/(double)総)); DrawBox(x-300 ,y-2 ,x+300 ,y+2 ,GetColor(255,255,255),1); DrawBox(x-1 ,y-10,x+1 ,y+10,GetColor(255,255,255),1); DrawBox(x-298+p,y-10,x-302+p,y+10,GetColor(255,255,255),1); if(鼠o&&x-300<鼠x&&鼠x<x+350&&y-30<鼠y&&鼠y<y+30) { int mx=鼠x-(x-300);if(mx<0){mx=0;}else if(mx>600)mx=600;int des=(mx/(double)600*(double)総); if(Mov){if(des<0)des=0;PauseMovieToGraph(hd);if(GetMovieTotalFrameToGraph(hd)==-1){ SeekMovieToGraph(hd,des);}else{des=TtoF(des,hd);SeekMovieToGraphToFrame(hd,des);} PlayMovieToGraph(hd); } else {if(des<0)des=0;StopSoundMem(hd); SetSoundCurrentTime(des,hd); PlaySoundMem(hd,DX_PLAYTYPE_BACK, FALSE); } } return now; } int 再生中(int hd){if(Mov){return GetMovieStateToGraph(hd)>0;}else{return CheckSoundMem(hd)==1;}return 0;} int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); SetGraphMode(620,600,16); if( DxLib_Init() < 0 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); int 動H; if(Mov){ 動H=LoadGraph("音がおかしい.mp4");} else { 動H=LoadSoundMem("終了が受け取れない.mp3");} int 総=Total(動H); if(Mov){ ChangeMovieVolumeToGraph(Vol,動H); PlayMovieToGraph(動H); } else { ChangeVolumeSoundMem(Vol,動H); PlaySoundMem(動H,DX_PLAYTYPE_BACK); } int t=0,t_plus=10000; while( ProcessMessage() == 0 ) { ClearDrawScreen() ; int play=再生中(動H); if(!play) { if(Mov){ SeekMovieToGraph(動H,0); ChangeMovieVolumeToGraph(Vol,動H); PlayMovieToGraph(動H); } else { SetSoundCurrentTime(0,動H);ChangeVolumeSoundMem(Vol,動H); PlaySoundMem(動H,DX_PLAYTYPE_BACK, FALSE); } } if(Mov)DrawExtendGraph(0,0,600,600,動H,0); int now=SeekBar(動H,総); DrawFormatString( 10,250,GetColor(255,255,255),"total(%d) now(%d) play(%d)",(int)総,(int)now,(int)play ); ScreenFlip(); } DxLib_End(); return 0; } ---------------------------------------------------Log.txt--------------------------------------------------- 0:ChangeWindowMode実行 4:ウインドウモードフラグが立てられました 12:DXライブラリの初期化処理開始 19: システムの情報を出力します 24: DXライブラリ Ver3.22b 29: 論理プロセッサの数 : 12 33: OS Windows10 ( Build 18362 ) 142: 現時点のCPU動作速度:大体3.15GHz 146: MMX命令を使用します 150: SSE命令が使用可能です 153: SSE2命令が使用可能です 158: CPUベンダ:GenuineIntel 177: CPU名:Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz 181: COMの初期化... 成功 192: 非同期読み込み処理の初期化...成功 696: ファイルアクセス処理の初期化...成功 704: メモリ総量:16308.28MB 空きメモリ領域:10074.55MB 708: タイマーの精度を検査します 712: 精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 716: パフォーマンスカウンターを使用します タイマー精度 : 10000.000000 KHz 724: ソフトの二重起動検査... 二重起動はされていませんでした 736: ウインドウクラスを登録します... 登録に成功しました 744: ウインドウモード起動用のウインドウを作成します 748: ディスプレイ情報のセットアップ開始 753: モニターの数:2 ディスプレイデバイスの数:4 757: No.0 モニター名:\\.\DISPLAY1 1920x1080 32bit 60Hz 761: No.1 モニター名:\\.\DISPLAY2 1920x1080 32bit 60Hz 785: ディスプレイ情報のセットアップ完了 792: ウインドウの作成に成功しました 796: ウインドウを表示します 845: IMEを無効にしました 850: ウインドウスタイルをウインドウモード用に変更します... 完了 882: DirectInput関係初期化処理 886: XInput DLL の読み込み中... 成功 897: DirectInput7 の取得中... DirectInput8 の取得を試みます...成功 922: 引き続き初期化処理... 初期化成功 940: ジョイパッドの初期化... 971: 入力装置を見つけました 976: Device Instance Name : JC-U4013S DirectInput Mode 980: Device Product Name : JC-U4013S DirectInput Mode 985: 周期的エフェクトの作成に失敗しました。 989: 周期的エフェクトの作成に失敗しました。 996: ジョイパッドの追加は正常に終了しました 1002: ジョイパッドの初期化は正常に終了しました 1006: マウスデバイスの初期化... 初期化成功 1014: キーボードデバイスの初期化... 初期化成功 1022: DirectInput 関連の初期化は正常に終了しました 1030: WASAPI の初期化を行います 1040: デフォルト遅延時間 : 10.000 ms 1045: 最小遅延時間 : 3.000 ms 1049: 遅延時間 : 10.000 ms 1055: チャンネル数   : 2 ch 1059: 量子化ビット深度 : 32 bit 1063: 有効ビット深度  : 32 bit 1067: サンプリングレート : 48000 Hz 1071: データ形式 : 浮動小数点型 1103: 動作モード : 共有モード 1107: WASAPI の初期化は正常に終了しました 1112: d3d11.dll の読み込み.... 成功 1124: dxgi.dll の読み込み.... 成功 1131: API CreateDXGIFactory2 のアドレスを取得します.... 成功 1139: IDXGIFactory2 を作成します.... 成功 1150: IDXGIAdapter を列挙 1153: Adapter No.0 Desc:NVIDIA GeForce GTX 1060 6GB 1157: Output Device No.0 Name:\\.\DISPLAY2 1161: Output Device No.1 Name:\\.\DISPLAY1 1165: Adapter No.1 Desc:Microsoft Basic Render Driver 1169: API D3D11CreateDevice のアドレスを取得します.... 成功 1177: IDXGIAdapter を取得します.... 成功 1185: Direct3D 11 FeatureLevel 11_0 以上を対象とします 1189: ID3D11Device オブジェクトを取得します.... 成功 1257: IDXGIDevice1 を取得します.... 成功 1265: IDXGIDevice1->SetMaximunFrameLatency( 1 ); を実行しました 1269: [ウインドウモード 620x600] 1273: IDXGISwapChain2 を作成します.... 成功 1291: IDXGIFactory2->CreateSwapChainForHwnd の戻り値:0x00000000 1295: IDXGIOutput を取得します.... 成功 1303: Graphics Device:NVIDIA GeForce GTX 1060 6GB 1307: 画面のフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 1311: 16bit Zバッファフォーマットは DXGI_FORMAT_D16_UNORM です 1315: 24bit Zバッファフォーマットは DXGI_FORMAT_D24_UNORM_S8_UINT です 1320: 32bit Zバッファフォーマットは DXGI_FORMAT_D32_FLOAT です 1324: 16bit カラーフォーマットは DXGI_FORMAT_B5G6R5_UNORM です 1328: 32bit カラーフォーマットは DXGI_FORMAT_B8G8R8X8_UNORM です 1331: アルファ付き 16bit カラーフォーマットは DXGI_FORMAT_B4G4R4A4_UNORM です 1335: アルファ付き 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 1339: アルファテスト用 16bit カラーフォーマットは DXGI_FORMAT_B5G5R5A1_UNORM です 1343: アルファテスト用 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 1347: DXT1テクスチャフォーマットは DXGI_FORMAT_BC1_UNORM です 1351: DXT2テクスチャフォーマットは使えません 1355: DXT3テクスチャフォーマットは DXGI_FORMAT_BC2_UNORM です 1359: DXT4テクスチャフォーマットは使えません 1363: DXT5テクスチャフォーマットは DXGI_FORMAT_BC3_UNORM です 1367: BC7_UNORM テクスチャフォーマットは DXGI_FORMAT_BC7_UNORM です 1370: BC7_UNORM_SRGB テクスチャフォーマットは DXGI_FORMAT_BC7_UNORM_SRGB です 1374: ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 1378: ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 1382: ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 1386: 1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 1390: 1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 1394: 1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 1398: 1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 1402: 2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 1406: 2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 1410: 2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 1415: 2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 1419: 描画用 16bit カラーフォーマットは DXGI_FORMAT_B5G6R5_UNORM です 1423: 描画用 32bit カラーフォーマットは DXGI_FORMAT_B8G8R8X8_UNORM です 1427: 描画用アルファ付き 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 1431: 描画用 ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 1435: 描画用 ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 1439: 描画用 ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 1443: 描画用1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 1447: 描画用1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 1451: 描画用1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 1456: 描画用1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 1460: 描画用2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 1465: 描画用2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 1468: 描画用2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 1473: 描画用2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 1477: 使用する機能レベル:D3D_FEATURE_LEVEL_11_1 1481: 同時にレンダリングできるバッファの数:8 1485: 最大テクスチャサイズ 幅:16384 高さ:16384 1489: 標準描画用の頂点バッファの作成.... 成功 1497: シェーダーコード関係の初期化.... 成功 1515: 各種シェーダー用定数バッファの作成.... 成功 1524: 各種 ID3D11InputLayout の作成.... 成功 1554: 画像の単純転送処理の初期化... 成功 1564: 深度バッファを作成します.... 成功 1573: フォントの初期化を行います 1580: フォントの初期化は正常に終了しました 1656: 文字コードバッファの初期化を行います... 完了しました 1673:DXライブラリの初期化処理終了 12924:ウインドウを閉じようとしています 12934:ウインドウが破棄されようとしています 12940:ソフトを終了する準備が整いました 12947:フォントの初期化を行います 12952:フォントの初期化は正常に終了しました 12975:d3d11.dll の解放 1 12981:dxgi.dll の解放 1 12986:Direct3D11 のオブジェクト数を出力 12990:Direct3D11 のオブジェクト合計数 : 0 12995:DirectInput 関連の終了処理... 完了 13003:サウンド関連の終了処理... 完了 13019:ウィンドウ関連の終了処理... 完了 13099:COMを終了... 完了 13103: 13108:Alloc memory dump 13113: Total size:0(0.000kb) Alloc num:0 13118:
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.25 )
名前:管理人 日時:2020/09/14 23:05

> 「終了が受け取れない.mp3」 > につきましては、私の環境ではtotal(714919)と表示されてしまいます。 > すみません「714919の地点では終了が返らずに止まる」というのが正確でした。 > つまり(357447)を通過すれば終了が返りますが、早送りを使ってそれを超えてしまうと > 終了が得られないという状態です。 357447 を通過すれば終了が返るのですか…謎ですね ところで 357447 を超えてしまった場合はずっと無音なのでしょうか? > 同じファイルで同じプログラムなのに数値が変わってしまうというのは > 開発環境(visual studio community 2015を使っています)の違いでしょうか? 開発環境や戻り値の型のLONGLONGは関係ありません mp3 の再生には各PCにインストールされているコーデックを使用していますので、 PC毎に正常に再生できたりできなかったりします なので動作が安定しないので、mp3 の代わりにDXライブラリの内部にデコード処理の ライブラリを含んでいる ogg 形式を使用されることを推奨しています > 「音がおかしい.mp4」 > につきましては、本来の長い動画の状態で開きますとフリーズしてしまいます。 > ttps://file-post.net/en/s0/d1/1600061160_222872759_120/?id=UkYf5jIZNTFw (ぱす:sdfagsga) > ↑ここにそれを再現するための動画を上げましたので、そちらの「音がおかしい2.mp4」 > を無劣化で4倍に拡大したものを下のプログラムで(Movを1にして)開いていただけば、だいたい > 70パーセントくらいの所をシークするとフリーズすると思います。 私の環境では 70パーセントくらいの所をシークしてもフリーズしませんでした… > また、動画を他の動画プレイヤーで開くと聞こえるはずの「男のうめき声」が > 選択しているチャンネルの問題でしょうか、聞こえなくなっているのも確認できると思います 「音がおかしい.mp4」の動画は 6chサウンドですが、DXライブラリは 2chまでしか 再生しませんので、恐らく「男のうめき声」が 3ch以降に含まれているのではないかと思います > 「たまに音がなくなる_edit.mp4」 > につきましては下のプログラムで試していただけると分かりやすいのですが > シークバーを適当にポチポチやったりドラッグで移動を繰り返していると > 動画が止まってしまいます。 手元の環境ではシークバーをポチポチやっても動画は止まらなかったのですが、 代わりに無音になってしまうという現象が発生しました 無音になってしまう現象のみ修正したのですが、動画が止まる現象も直っている可能性も ありますので、よろしければこちらの修正版をお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.26 )
名前:たろう 日時:2020/09/15 00:49

いつもありがとうございます。 まったく急いでいるわけではありませんので お手すきの時などで結構です、以下ご確認いただければと思います 「終了が受け取れない.mp3」 PCは比較的新しく、またコーデックなどを入れた事はないので 多分windows10デフォルトのmp3のコーデックだと思いますが、なにか 追加で入れたものをお使いになっていますでしょうか? > ところで 357447 を超えてしまった場合はずっと無音なのでしょうか? 超えた位置をシークバーで指定すると無音で714919まで進んでその位置で止まります 357447を通過すれば停止を受け取れますし、再度再生しなければ止まります ・・・という状態だったのですが、今回頂いたバージョンで357447を超えた場所を指定すると フリーズするようになってしまいました。また357447を通過した場合も、通過した瞬間 フリーズ(ウィンドウ自体動かせなくなります)して、最後の1秒ほどの音だけずっと繰り返し 音が鳴り続ける状態になります。強制終了しかできなくなります。 ※前回のバージョンに戻して試しましたが、フリーズは今回のバージョンのみで発生します 「音がおかしい2.mp4」 につきましては、PCのスペックの問題なのでしょうか、長ければ長いほど 異常が発生しやすくなる印象なので、例えば「音がおかしい2.mp4」を8倍の長さなどにしても フリーズしませんでしょうか? そしてこちらについても「音がおかしい2.mp4」は前回のバージョン同様おなじフリーズが発生しますが 前回のバージョンでは再生できていた「音がおかしい.mp4」については、 開くこともできずに起動した瞬間フリーズしてしまうようになりました 「たまに音がなくなる_edit.mp4」 につきましては、シークバーの右端を超えた部分をクリックすると必ずフリーズするようになってしまいました これも前回のバージョンでは起きなかった現象です。 ちなみに上記の「フリーズ」は全て、 基本的にvisualstudioの「デバッグの開始」で試していますが、アクセス違反などで止まるわけではなく ウィンドウが固まって動かせなくなって、「デバッグの停止」でしか終了できなくなる状態です。 何度もすみませんm(__)m 宜しくお願いいたします
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.27 )
名前:管理人 日時:2020/09/15 03:28

すみません、ちゃんとしたご返信は本日か後日します とりあえず直ぐご返答できる部分のみのご返信です > 多分windows10デフォルトのmp3のコーデックだと思いますが、なにか > 追加で入れたものをお使いになっていますでしょうか? 私も特にコーデックを追加したことはありませんが、昔なら GOM Player など、 ユーザーがコーデックをインストールするつもりは無くても、ソフトをインストールしたら 一緒にコーデックもインストールされるというパターンがあるので、知らない内に何か コーデックがインストールされている可能性はあります あと、私の手元の環境は Windows10 のバージョン 2004 であることの影響も 大きいかもしれません( Windows10 の次期バージョンのテスト版を先行してインストールする、 という設定に一時的にしていたことがあるので… 詳細はこちらをご覧ください↓ <Windows 10の新機能を公開前に試せる「Windows Insider Program」最新動向> https://www.atmarkit.co.jp/ait/articles/2007/30/news018.html > 例えば「音がおかしい2.mp4」を8倍の長さなどにしても > フリーズしませんでしょうか? すみません、手元に「音がおかしい2.mp4」を8倍の長さにしたファイルが無いので分かりません > 「たまに音がなくなる_edit.mp4」 > につきましては、シークバーの右端を超えた部分をクリックすると必ずフリーズするようになってしまいました 『シークバーを適当にポチポチやったりドラッグで移動を繰り返している』では 不具合は発生しなくなりましたでしょうか?
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.28 )
名前:たろう 日時:2020/09/15 09:38

いつもご返信いただきありがとうございます VLCは内蔵コーデックなのでそれのみを使っています。 もともと動画プレイヤー的なものは以前から作っていて、追加コーデックなどを入れて、 アンインストールできなくなるとテストが出来なくなる都合上、入れないように気を付けているので それ以外は入って居ないとおもうのですが・・・意図せずという事もありえます 「Windows Insider Program」も試してしまうと元に戻す自信がありませんm(__)m 「たまに音がなくなる_edit.mp4」についてですが 少なくとも1分もすれば大体フリーズしていたので5分くらいかなりしつこくやりましたが、異常は起きませんでした 末尾クリックの件以外は完全に改善されているようです<(_ _)> > すみません、手元に「音がおかしい2.mp4」を8倍の長さにしたファイルが無いので分かりません ということは前回も、そのまま(20分ほど)をお使いになったと思いますが これをAvidemuxなどで無劣化連結4倍以上しないと異常はおきません。 すみません、大きいファイルをなんとかそのままお渡しするべきでした<(_ _)> BQE00322(あっとまーく)nifty.comに4倍にしたファイルのリンクを送りますので、こちらのでお試しいただければと思います シークバーの75%辺りをクリックするとフリーズすると思います お忙しい所すみません、 宜しくお願いいたします<(_ _)>
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.29 )
名前:管理人 日時:2020/09/16 00:11

> 「たまに音がなくなる_edit.mp4」についてですが > 少なくとも1分もすれば大体フリーズしていたので5分くらいかなりしつこくやりましたが、異常は起きませんでした > 末尾クリックの件以外は完全に改善されているようです<(_ _)> ご確認ありがとうございます > ということは前回も、そのまま(20分ほど)をお使いになったと思いますが > これをAvidemuxなどで無劣化連結4倍以上しないと異常はおきません。 すみません、『ここにそれを再現するための動画を上げました』の文で、アップしていただいた動画を そのまま使えば再現できると早合点してしまっていました m(_ _;m ( あと『そちらの「音がおかしい2.mp4」を無劣化で4倍に拡大したものを』の部分を 『再生時間を4倍』ではなく、『描画サイズを4倍』だと勘違いして if(Mov)DrawExtendGraph(0,0,600*4,600*4,動H,0); と書き換えたりしていました… ) アップしていただいた4倍の再生時間の『音がおかしい2.mp4』で手元でも現象が再現できました サウンドデータの再生時間の計算精度が足りていないことが原因でした こちらに修正版をアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > 「終了が受け取れない.mp3」 手元に Windows10 バージョン 1909 での動作を試せる環境があったので確認したところ、 表示が(714919)になる現象が再現しました MP3 の再生には ACM という API を使ったデコードを試して、それが失敗した場合は DirectShow という API を使ったデコードを試すようになっているのですが、 Windows10 バージョン 2004 では ACM を使ったデコードが失敗して、DirectShow を 使ったデコードを行っていて、この場合は正常に動作していました Windows10 バージョン 1909 では ACM を使ったデコードが成功するのですが、 GetSoundTotalTime の戻り値として返す再生総時間の値の計算処理にバグがありました こちらのバグも今回のバージョンで修正してあります m(_ _;m > ・・・という状態だったのですが、今回頂いたバージョンで357447を超えた場所を指定すると > フリーズするようになってしまいました。 > 「たまに音がなくなる_edit.mp4」 > につきましては、シークバーの右端を超えた部分をクリックすると必ずフリーズするようになってしまいました こちらのシークバーを右端まで移動するとフリーズする現象も修正しましたので、 よろしければお試しください m(_ _;m
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.30 )
名前:たろう 日時:2020/09/16 21:05

いつもご対応いただき、ありがとうございます すみません誤解のある表現でした。 「延長」と書くべきところを「拡大」と書いてしまっていました<(_ _)> またバージョン 1909環境でまで確認していただき、ありがとうございます。 さきほど提出させていただいた動画や音楽ファイルにつきまして 上記の問題が全て修正されていることを確認いたしました<(_ _)> その他いろいろな動画にて、色々無茶をして試しましたが 全て問題なく再生できています。 お忙しい中次々と失礼いたしました。 大変助かりました<(_ _)> 私の分は完全に解決です(…と言ってまた何か見つけてしまったらごめんなさい) 紺帽子さんが、よろしければ解決でお願いいたします<(_ _)>
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.31 )
名前:管理人 日時:2020/09/17 02:03

正常に動作するようになったようで何よりです こちらこそバグだらけですみませんでした m(_ _;m
メンテ
Re: 動画の長さを超えた位置指定でフリーズ…を回避する方法 ( No.32 )
名前:紺帽子(解決) 日時:2020/09/17 19:27

atoiDxが正しい値を返すのを確認しました。 動画のほうは現在でも下記の現象が出ています。 ・動画の音にプチノイズが入ることがある ・動画の音が再生されないことがある ・動画の途中から音が小さくなることがある ・動画の終了時に次に進まないことがある 同じ状況で再生しても必ず現象が起きるわけではありません。 SetEnableWASAPIFlag( FALSE );を使用した場合も現象が発生しました。 これらの現象について詳しいことが分かった場合は 改めて報告させていただきますので一旦解決とさせていただきます。 修正ありがとうございました。
メンテ

Page: 1 | 2 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存