トップページ > 記事閲覧
最新版の効果音に付いて
名前:Tir 日時: 2020/01/13 23:03

最新版に更新したところ効果音が沢山鳴る場面で無音になってしまいます それと何故か最新版に更新すると制作中のゲームのリプレイも互換がなくなります
メンテ

Page: 1 |

Re: 最新版の効果音に付いて ( No.1 )
名前:管理人 日時:2020/01/14 02:50

すみません、どちらも音の再生処理を大きく変更したことが原因だと思います > 最新版に更新したところ効果音が沢山鳴る場面で無音になってしまいます すみません、二つほどご質問させてください 1.沢山音が鳴る場面でだけ無音になり、その後また音が鳴るようになるのでしょうか?  それとも一度無音になってしまったら、そのままずっと無音のままなのでしょうか? 2.具体的には何個くらいの音が鳴っているのでしょうか? > それと何故か最新版に更新すると制作中のゲームのリプレイも互換がなくなります こちらは恐らくDXライブラリ内部で GetRand を使用する処理を加えてしまったのが原因だと思います GetRand を使用するとリプレイなどの再現性に影響を与えてしまうことを失念していました GetRand を内部で使用している箇所を削除しましたので、よろしければこちらのバージョンをお試しください 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.2 )
名前:Tir 日時:2020/01/14 15:26

> 1.沢山音が鳴る場面でだけ無音になり、その後また音が鳴るようになるのでしょうか? >  それとも一度無音になってしまったら、そのままずっと無音のままなのでしょうか? はい、また音が鳴るようになります。ただ効果音が少し程度なら音が途切れたりする程度で直ぐに鳴りますが 大量に効果音を鳴らす状況になるとその量に応じてその後の無音時間が長くなります。 > 2.具体的には何個くらいの音が鳴っているのでしょうか? zキーを押している間効果音を鳴らすプログラムを作ってみたところCountが10くらいで押している間は完全に無音になります(効果音の種類にもよるかもしれません) またCountの値が大きくなるほど効果音が鳴るまでに時間が掛かるようになり、zキーを押した時間が長いほどより無音時間が長くなります。 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int Count = 0; SetGraphMode( 640 , 480 , 16 ) ; ChangeWindowMode(true); if (DxLib_Init() == -1) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } int Sound = LoadSoundMem("Sound.wav");//適当な効果音     // ループ while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { // 画面のクリア ClsDrawScreen() ; if (CheckHitKey(KEY_INPUT_UP) == 1) { Count++; } if (CheckHitKey(KEY_INPUT_DOWN) == 1) { Count--; if (Count < 0) Count = 0; } //if (CheckSoundMem(Sound) == 0) { if (CheckHitKey(KEY_INPUT_Z) == 1) { for (int i = 0; i < Count; i++) { PlaySoundMem(Sound, DX_PLAYTYPE_BACK); } } //} clsDx(); printfDx("%d",Count); // 裏画面の内容を表画面に反映させる ScreenFlip() ; } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } 因みにリプレイの方は正常に再生されるようになりましたが、そちらはGetRandを削除しても問題はないでしょうか? リプレイは制作中によく互換がなくなるので個人的には致命的という訳ではなかったので… GetRandを使用した方が処理の負荷がかからないとかならそちらの方がいいと個人的には思うので^^;
メンテ
Re: 最新版の効果音に付いて ( No.3 )
名前:管理人 日時:2020/01/15 00:06

再現用コードのご提供ありがとうございます 手元でも現象が再現しました 音割れ防止用に PlaySoundMem が同時に大量に実行された場合は一つ一つを若干遅らせて 再生するようにした仕組みが原因でした GetRand もこの遅延再生処理もどちらも音割れ防止用だったのですが、これらの仕組みを実装した後に 別の音割れ防止処理を入れたので、GetRand と遅延再生処理は不要になったのですが、音の波形の最大振幅を 抑える効果はあるからと一応残しておいたのが仇となってしまったようです GetRand と同じく遅延再生処理も削除したところ無音になってしまう現象も解消できましたので、よろしければ こちらの修正版をお試しになってみてください 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.4 )
名前:Tir(解決) 日時:2020/01/15 22:02

効果音も問題なく鳴るようになりました。そちらも影響がないみたいで何よりです。
メンテ

Page: 1 |

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

   クッキー保存