トップページ > 記事閲覧
サウンドの遅延について
名前:motoYo 日時: 2019/11/25 17:42

約半年前からDXLibを愛用させていただいております。 趣味で様々なゲームを作っており、現在はリズムゲームを作っています。 大まかなシステムが完成し、プレイテストをしてみたのですが、0.1秒程度サウンドが遅延しているように感じました。 また、別の方が作られているUnityのリズムゲームサンプルでは、その現象は確認できませんでした。 再生するサウンドはすべてメモリに読み込んであるので、読み込み速度の問題では無いと思われます。 また、非垂直同期下において2000fps以上安定して出ているので、処理速度においても問題はないと思われます。 DirectSound/XAudio2どちらでも同様の現象が発生しました。 原因究明と解決のため、お答えいただけると幸いです。 【動作環境】 OS:Windows10 Home 1903 CPU:Intel Core i7-7700 3.60GHz ROM:HDD 1TB RAM:DDR4 16GB GPU:NVIDIA GeForce GTX 1050Ti DXLib:Ver 3.20f(C++版) C++:C++17 Editor:VisualStudio2019
メンテ

Page: 1 | 2 |

Re: サウンドの遅延について ( No.21 )
名前:あいおい? 日時:2019/12/15 15:16

早速試してみました。 699: WASAPI の初期化を行います 714: チャンネル数   : 2 ch 721: 量子化ビット深度 : 24 bit 728: 有効ビット深度  : 24 bit 735: サンプリングレート : 44100 Hz 743: データ形式 : 整数型 752: デフォルト遅延時間 : 10.00 ms 758: 最小遅延時間 : 3.00 ms 765: 遅延時間 : 10.000 ms 877: オーディオクライアントの初期化に失敗しました エラーコード:8889000f 884: 排他モードでの初期化に失敗したので共有モードでの初期化を試行します 889: WASAPI の初期化を行います 898: チャンネル数   : 2 ch 904: 量子化ビット深度 : 32 bit 910: 有効ビット深度  : 32 bit 916: サンプリングレート : 44100 Hz 923: データ形式 : 浮動小数点型 929: デフォルト遅延時間 : 10.00 ms 936: 最小遅延時間 : 3.00 ms 943: 遅延時間 : 10.000 ms 986: 動作モード : 共有モード 993: WASAPI の初期化は正常に終了しました とりあえずこのようなログになってWASAPI共有モードに切り替わりました。正常に切り替わっています。感謝です。 > もしかしたら排他モードではなく共有モードで動作しているのかもしれません > ( 排他モードで初期化に失敗したら共有モードで起動する、というようなコードで… ) MPC-BEで再生できてしまう件、もしかしたら切り替わっているかも? と思い確認しましたが排他モードでしっかりと動いているようです。 (タスクバーのスピーカーアイコンをクリックしたとき、レベルメーターが動いていないのでWindowsのミキサーを通していない→排他モードであるということがわかる) ソニーの音楽再生アプリのMusic Center for PCでも排他で再生できるっぽいです。 ビット深度とサンプリングレートを手動で設定するか自動で設定するかの項目があるのですが、 自動だともちろん再生され、手動ではエラーが発生するときとしないときで分かれることが分かりました(MPC-BEではそのような設定がなかったです)。 AG03のデフォルトのサンプリングレート(コントロールパネルから変更できます)と一致した設定でないとエラーが出る? ようです。 ビット深度は24bit以下ならどれでもOKでした。 あとはDXライブラリのソースコードを参考に、オーディオライブラリであるBASSでフォーマットのチェックをしてみました // DXライブラリから引用 var rates = new int[] { 44100, 48000, 88200, 96000, 176400, 192000 }; // Windows既定のデバイス var device = BassWasapi.DefaultDevice; for (int i = 0; i < rates.Length; i++) { // 排他モードで2ch、rates[i]Hzのサンプリングレートで使用可能か? var format = BassWasapi.CheckFormat(device, rates[i], 2, WasapiInitFlags.Exclusive); // 使用不可ならUnknown、使用可ならビット深度が出力される Debug.WriteLine($"{rates[i]} : {format}"); } return; すると出力が 44100 : Unknown 48000 : Unknown 88200 : Unknown 96000 : Unknown 176400 : Unknown 192000 : Bit24 こうなったので、 BassWasapi.Init(device, 192000, 2, WasapiInitFlags.Exclusive); で初期化をしてやると初期化成功フラグはTrueになりました。 BASS自体のソースコードが公開されていないので参考にならないと思いますが…… (とりあえず、WASAPI自体は動くようになったので、他の環境でも動かない事例が出ない限り、このままでも良いと思います 同じドライバーを使っているSteinberg社のオーディオインターフェースは全滅かもしれませんが)
メンテ
Re: サウンドの遅延について ( No.22 )
名前:管理人 日時:2019/12/16 02:56

お試しいただきありがとうございます 自動共有モード切替が正常に動作したようで何よりです > MPC-BEで再生できてしまう件、もしかしたら切り替わっているかも? と思い確認しましたが排他モードでしっかりと動いているようです。 > (タスクバーのスピーカーアイコンをクリックしたとき、レベルメーターが動いていないのでWindowsのミキサーを通していない→排他モードであるということがわかる) > すると出力が >  > 44100 : Unknown > 48000 : Unknown > 88200 : Unknown > 96000 : Unknown > 176400 : Unknown > 192000 : Bit24 >  > こうなったので、 >  > BassWasapi.Init(device, 192000, 2, WasapiInitFlags.Exclusive); >  > で初期化をしてやると初期化成功フラグはTrueになりました。 ご情報ありがとうございます 排他モードの初期化が失敗する謎が解けたかもしれません というわけで、もしかしたら排他モードでも初期化が成功するようにできたかもしれないバージョンを アップしましたので、何度も申し訳ありませんが、よろしければお試しください 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 // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) あと、今回のバージョンでは、まだ中途半端な実装ですが ASIO にも対応しましたので、 よろしければ DxLib_Init の呼び出し前に SetEnableASIOFlag( TRUE ) ; という記述を追加して実行してみてください m(_ _)m ( まだログ出力すら整備されておらず、サンプリングレートも 44100Hz 固定なので正常に動作しない確率も高いですが… )
メンテ
Re: サウンドの遅延について ( No.23 )
名前:あいおい? 日時:2019/12/16 18:49

> というわけで、もしかしたら排他モードでも初期化が成功するようにできたかもしれないバージョンを > アップしましたので、何度も申し訳ありませんが、よろしければお試しください m(_ _;m 708: DirectInput 関連の初期化は正常に終了しました 718: WASAPI の初期化を行います 731: デフォルト遅延時間 : 10.00 ms 738: 最小遅延時間 : 3.00 ms 744: 遅延時間 : 10.000 ms 759: チャンネル数   : 2 ch 766: 量子化ビット深度 : 24 bit 773: 有効ビット深度  : 24 bit 779: サンプリングレート : 192000 Hz 786: データ形式 : 整数型 968: オーディオクライアントの初期化に失敗しました エラーコード:88890008 974: 排他モードでの初期化に失敗したので共有モードでの初期化を試行します 981: WASAPI の初期化を行います 991: デフォルト遅延時間 : 10.00 ms 998: 最小遅延時間 : 3.00 ms 1005: 遅延時間 : 10.000 ms 1014: チャンネル数   : 2 ch 1021: 量子化ビット深度 : 32 bit 1028: 有効ビット深度  : 32 bit 1036: サンプリングレート : 192000 Hz 1042: データ形式 : 浮動小数点型 1086: 動作モード : 共有モード 1094: WASAPI の初期化は正常に終了しました 依然としてオーディオクライアントの初期化に失敗してしまいますね……エラーコードは変化しましたが > あと、今回のバージョンでは、まだ中途半端な実装ですが ASIO にも対応しましたので、 > よろしければ DxLib_Init の呼び出し前に > > SetEnableASIOFlag( TRUE ) ; > > という記述を追加して実行してみてください m(_ _)m 試してみましたが、DxLib_Init()が呼び出されたタイミングでメモリ違反を起こしてしまうようです 例外がスローされました: 'System.AccessViolationException' (***.exe の中) 型 'System.AccessViolationException' のハンドルされていない例外が ***.exe で発生しました 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。 Log.txtは「730: ASIO の初期化を行います」で止まっています。デバイスのデフォルト設定を44.1kHzにしても変わらずです ASIOは環境を選ぶ機能なので、デバッグが難しそうです……複数のデバイスを検証するなら何人か集まらないと厳しいかもしれないです……。
メンテ
Re: サウンドの遅延について ( No.24 )
名前:Tir 日時:2019/12/17 01:08

一応こちらに書いた方がいいと思ったのでこちらに書きます 暫定最新版においてWASAPIが入った状態でChangeVolumeSoundMemで15以下に設定するといきなり無音になってしまいます
メンテ
Re: サウンドの遅延について ( No.25 )
名前:管理人 日時:2019/12/18 02:28

> あいおい?さん お試しいただきありがとうございます > 依然としてオーディオクライアントの初期化に失敗してしまいますね……エラーコードは変化しましたが 駄目でしたか… オーディオクライアントにはデバイスが指定のフォーマットに対応しているかチェックする機能があるのですが、 もしかしたらその機能が正常に働いていなくて、実際は対応していないフォーマットを『対応している』と返して しまって、そのフォーマットで初期化しようとすることで失敗するのでは、と考え、初期化に失敗した場合は 候補となるフォーマット全てで初期化を試してみる、という処理を追加したのですが、空振りだったようです orz ただ、その後、エラーの原因となりえる別の箇所を見つけて修正してみましたので、本当に何度も申し訳ありませんが よろしければお試しください 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 // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > Log.txtは「730: ASIO の初期化を行います」で止まっています。デバイスのデフォルト設定を44.1kHzにしても変わらずです >  > ASIOは環境を選ぶ機能なので、デバッグが難しそうです……複数のデバイスを検証するなら何人か集まらないと厳しいかもしれないです……。 こちらも駄目でしたか… ASIO 4 ALL では拍子抜けするくらい簡単に再生できたので甘く見ていました… こちらは出力するログをガッツリ増やして、且つメモリ違反の原因となりそうな箇所に手を加えてみましたので よろしければ上記のバージョンで再度 SetEnableASIOFlag( TRUE ); も試してみてください m(_ _;m > Tirさん ご指摘ありがとうございます すみません、WASAPI ではサウンドの波形を1つしか再生できない+音量設定やパン設定の機能も無い関係で 複数のサウンドの合成( ソフトウェアミキシング )や音量に応じた波形のスケーリング処理、パンの処理も すべて自前で行っているのですが、音量の計算精度( bit数 )が全然足りていませんでした( あと計算式も若干誤っていました ) 修正版をアップしましたので、よろしければお試しください 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 )
名前:あいおい? 日時:2019/12/18 20:13

> ただ、その後、エラーの原因となりえる別の箇所を見つけて修正してみましたので、本当に何度も申し訳ありませんが DX.SetEnableWASAPIFlag(DX.TRUE, DX.TRUE, -1, 192000); で実行すると 880: WASAPI の初期化を行います 896: デフォルト遅延時間 : 10.00 ms 903: 最小遅延時間 : 3.00 ms 910: 遅延時間 : 10.000 ms 928: チャンネル数   : 2 ch 936: 量子化ビット深度 : 24 bit 944: 有効ビット深度  : 24 bit 954: サンプリングレート : 192000 Hz 961: データ形式 : 整数型 1024: 動作モード : 排他モード 1031: WASAPI の初期化は正常に終了しました となり正常に排他モードで起動することが確認できました! ありがとうございます! (第4引数にサンプリングレートを指定しても、デバイスのデフォルト値が反映されるようですが) ついでにこの状態でのASIOのログも添付しておきます。 899: ASIO の初期化を行います 907: ASIOドライバの列挙を開始します 914: ASIOドライバのレジストリ階層を取得しました 922: ASIOドライバNo.0 のドライバキー名は Yamaha Steinberg USB ASIO です 929: ASIOドライバNo.0 のドライバキー階層の取得に成功しました 935: ASIOドライバNo.0 のCLSIDは {cb7f9ffd-a33b-48b2-8bc0-437d94f37142} です 963: ASIOドライバNo.0 のCLSIDの情報を発見しました 970: ASIOドライバNo.0 のCLSIDの情報階層の取得に成功しました 977: ASIOドライバNo.0 のドライバのパスキーの取得に成功しました 984: ASIOドライバNo.0 のドライバのパスは C:\Program Files (x86)\Yamaha\Yamaha Steinberg USB Driver\ysusb_asio64.dll です 992: ASIOドライバNo.0 のドライバDllの存在が確認できました 999: ASIOドライバNo.0 のドライバをリストに追加しました 1006: ASIOドライバの列挙が完了しました 1013: ASIOドライバをロードします 1759: ASIOドライバをロードに成功しました 1770: ASIOを初期化します 1775: ASIOを初期化に成功しました 1781: ASIOのバッファサイズを取得します 1787: ASIOのバッファサイズの取得に成功しました 1793: 最小バッファサイズ : 128 1799: 最大バッファサイズ : 128 1804: 優先バッファサイズ : 128 1811: バッファサイズの粒度 : 0 1817: ASIOのチャンネル情報を取得します 1824: ASIOのチャンネル情報の取得に成功しました 1831: フォーマットタイプ : ASIOSTInt32LSB 1838: ASIOのサンプルレートを 44100Hz に設定します 2359: ASIOのサンプルレートの設定に成功しました 2366: ASIOのサンプルレートを取得します 2372: ASIOのサンプルレートの取得に成功しました 2378: サンプルレート : 44100.000 2384: ASIOのバッファを作成します 2575: ASIOのバッファの作成に成功しました 2584: ASIOのサウンドの再生を開始します 2593: ASIO の初期化に成功しました 2604: WASAPI の初期化は正常に終了しました このバージョンではASIOでも起動することができ、正常にASIOが動作することが確認できました (AG03のASIOドライバーでは、ASIOで再生しながらWindowsの音を流すことができるので、それで判断してます) こちらも特に問題はなさそうです。
メンテ
Re: サウンドの遅延について ( No.27 )
名前:motoYo 日時:2019/12/19 07:15

自分のコードに問題があるのかもしれませんが、ASIO対応版以降 外部シンボル "__imp_CLSIDFromString" は未解決です。 とエラーが出て、ビルドできなくなってしまいました。
メンテ
Re: サウンドの遅延について ( No.28 )
名前:管理人 日時:2019/12/20 01:49

> あいおい?さん お試しいただきありがとうございます WASAPI, ASIO 共に正常に動作したようで何よりです > (第4引数にサンプリングレートを指定しても、デバイスのデフォルト値が反映されるようですが) ログに出力されていませんが、指定されたサンプリングレートがデバイスで対応していなかった場合は 他のサンプリングレートを試すので、恐らく指定されたサンプリングレートにAG03は対応していなかったのだと思います 指定したサンプリングレートがデバイスで対応していなかった場合はその旨をログに出力するようにしてみました あと、ASIO の方もバッファサイズ( 遅延時間 )とサンプリングレートを指定するための引数を追加してみましたので、 よろしければお試しください 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 // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) 引数追加後の SetEnableASIOFlag の定義は以下の通りです // サウンドの再生にASIOを使用するかどうかを設定する // Flag      TRUE:使用する FALSE:使用しない( デフォルト ) // BufferSize   再生バッファのサイズ、単位はサンプル数( -1 でデフォルトサンプル数を使用 ) // SamplePerSec  サンプリングレート int SetEnableASIOFlag( int Flag, int BufferSize = -1 , int SamplePerSec = 44100 ) ; > motoYoさん すみません、急いで実装していたので、他の Win32API 呼び出しのように libファイル要らずの 実装にしていなかったのが原因です リンクエラーが発生しないように修正したバージョンをアップしましたので、よろしければお試しください m(_ _)m
メンテ
Re: サウンドの遅延について ( No.29 )
名前:あいおい? 日時:2019/12/20 19:55

> あと、ASIO の方もバッファサイズ( 遅延時間 )とサンプリングレートを指定するための引数を追加してみましたので、 > よろしければお試しください m(_ _)m .NETのUnicode版で DX.DxLib_Init()を実行したときメモリアクセス違反を起こしてしまうようです。 ASIOやWASAPIのフラグをコメントアウトしても発生します。 551: DirectInput関係初期化処理 557: XInput DLL の読み込み中... 成功 579: DirectInput7 の取得中... DirectInput8 の取得を試みます... Log.txtはここで止まっています。 自分のPC環境はあまり変化させていないですが、もしかしたら環境依存の不具合かもしれないです……
メンテ
Re: サウンドの遅延について ( No.30 )
名前:管理人 日時:2019/12/21 03:31

> DX.DxLib_Init()を実行したときメモリアクセス違反を起こしてしまうようです。 すみません、私の環境でも同じ Log.txt の出力でメモリアクセス違反を起こすのを確認しました ただ、原因が分からず、とりあえずリビルドしてみた dllファイルを使ってみたら メモリアクセス違反が起こらなくなりました… 謎ですが、直ったようですのでよろしければお試しになってみてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用
メンテ
Re: サウンドの遅延について ( No.31 )
名前:あいおい? 日時:2019/12/21 14:06

> 謎ですが、直ったようですのでよろしければお試しになってみてください m(_ _;m こちらでも直ったことが確認できました いくつかの設定の組み合わせでWASAPIやASIOを走らせてみたので参考までに。 ASIO on DxLib (freq. 192kHz, buf. 1024, device Yamaha AG03) gist.github.com/AioiLight/0507a6a012b1c6aa3fe33283792499b9 ASIO on DxLib (freq. 44.1kHz, buf. 1024, device Yamaha AG03) gist.github.com/AioiLight/6e64732da86d50345fc2f94096331ca8 WASAPI on DxLib (freq. 192kHz, buf. 10ms, device Yamaha AG03) gist.github.com/AioiLight/44521be99a6583b78776bd5f9989af1e WASAPI(shared) on DxLib (freq. 192kHz, buf. 10ms, device Yamaha AG03) gist.github.com/AioiLight/dc1e06bf02ccaf8d3f32024af8a5634d > ログに出力されていませんが、指定されたサンプリングレートがデバイスで対応していなかった場合は > 他のサンプリングレートを試すので、恐らく指定されたサンプリングレートにAG03は対応していなかったのだと思います このVer.からログが出力されて、対応しているかどうか判別できるようになりました。ありがとうございます。 こちらの環境ではこのテスト版のDXライブラリで概ね良好に動作することを確認できました。 **** (これは改善しようのないことなのかもしれませんが、 WASAPIやASIOで設定されたサンプリングレートと異なるサンプリングレートの音源を効果音として再生すると再生するときに プツプツ音が鳴ります。共有モードでも鳴っているのでサンプリングレートを変換する際に精度が足りてない? 感じがあります)
メンテ
Re: サウンドの遅延について ( No.32 )
名前:管理人 日時:2019/12/22 03:32

正常に動作したようで何よりです ログの掲載もありがとうございます m(_ _)m > (これは改善しようのないことなのかもしれませんが、 > WASAPIやASIOで設定されたサンプリングレートと異なるサンプリングレートの音源を効果音として再生すると再生するときに > プツプツ音が鳴ります。共有モードでも鳴っているのでサンプリングレートを変換する際に精度が足りてない? 感じがあります) 手元にも 192KHz で動作するヘッドホンアンプがあったので192KHzではない音の再生を試してみたのですが、 特にプツプツ音は聞こえませんでした 幾つかご質問させてください 1.プツプツ音は、再生している間ずっとプツプツ鳴り続けるのでしょうか、それとも鳴り始めと鳴り終わりのみプツと鳴るのでしょうか? 2.プツプツ音が確認できる WASAPIのサンプリングレートと、プツプツ音が鳴るサウンドファイルのサンプリングレートを教えていただけないでしょうか? あと、もし可能でしたらプツプツ音が確認できるサウンドファイルをご提供いただけないでしょうか? m(_ _;m
メンテ
Re: サウンドの遅延について ( No.33 )
名前:あいおい? 日時:2019/12/27 03:07

返信遅れました。 > 1.プツプツ音は、再生している間ずっとプツプツ鳴り続けるのでしょうか、それとも鳴り始めと鳴り終わりのみプツと鳴るのでしょうか? 鳴り終わりでプツッと鳴ります。 > 2.プツプツ音が確認できる WASAPIのサンプリングレートと、プツプツ音が鳴るサウンドファイルのサンプリングレートを教えていただけないでしょうか? 192kHz再生時に鳴ります。サウンドファイルのサンプリングレートは44.1kHzです。 デバイスのサンプリングレートをファイルに合わせると鳴らなくなります。 > あと、もし可能でしたらプツプツ音が確認できるサウンドファイルをご提供いただけないでしょうか? m(_ _;m ttps://cdn.discordapp.com/attachments/542364337151672337/659816677776687111/test.wav (音源の最後はフェードアウトさせてるので音源由来の問題ではないはずです) う〜ん、いまいち再現性がないです。 例えば、int spaceにこのファイル、int downにも同じファイルを、サウンドを生成させて(サウンドのハンドルの値は別です)、 spaceはスペースキーを押した瞬間に再生、downは下キーを押した瞬間に再生というコードを組んだ場合、 spaceではプツッと音が鳴らず、downではプツッと音がする……のような感じです。 スペースキーを押したときにdownのサウンドハンドルを再生させるともちろんプツッと音がします。 サウンドの生成タイミングによって何かが違う……ように思えます。憶測ですが。 もちろんどちらのサウンドハンドルもDXライブラリの初期化後に生成しています。
メンテ
Re: サウンドの遅延について ( No.34 )
名前:管理人 日時:2019/12/28 23:24

ご返答ありがとうございます ご提供いただいた test.wav を 192kHz再生時に再生すると鳴り終わりでプツッと 音が鳴るのを確認しました( すみません、想像していたより小さな音で今まで聞き逃していました ) > spaceではプツッと音が鳴らず、downではプツッと音がする……のような感じです。 私の環境では必ず鳴りましたが、調べた結果、鳴る原因が『波形データが入っていないメモリをアクセスしていた』 だったので、不正にアクセスしたメモリ領域に入っていた数値がたまたま 0 だったらプツ音が鳴らないので、 たまたま spaceキーを押したときの再生で不正アクセスしたメモリ領域の数値が 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 // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) 因みに今回からデフォルトの使用APIを WASAPI の共有モードにしています ( 排他モードの場合、サウンドを再生している他のソフトがエラーになってしまって デフォルトの動作としては不適切かなと思ったので… )
メンテ
Re: サウンドの遅延について ( No.35 )
名前:あいおい? 日時:2019/12/29 02:30

> というわけで、波形データが入っていないメモリ領域にアクセスするバグを修正したバージョンを > アップしましたので、よろしければお試しください m(_ _;m こちらでも音が正常に再生されることを確認できました。ありがとうございます。 > 因みに今回からデフォルトの使用APIを WASAPI の共有モードにしています 良いと思います。("DirectX"ではなくなってしまいますが (汗 ) **** ひとつ要望なのですが、WASAPI使用時でサウンドハンドルの再生時間をパフォーマンスカウンタと同じ精度で取得・設定することはできませんか? DirectSoundとは違いCoreAudio APIでは可能なようですが 無理であればスルーしていただいて構いません m(__)m
メンテ
Re: サウンドの遅延について ( No.36 )
名前:管理人 日時:2019/12/30 10:39

お試しいただきありがとうございます 無事プツ音が無くなったようで何よりです > ひとつ要望なのですが、WASAPI使用時でサウンドハンドルの再生時間をパフォーマンスカウンタと同じ精度で取得・設定することはできませんか? > DirectSoundとは違いCoreAudio APIでは可能なようですが 無理であればスルーしていただいて構いません m(__)m 現状で一番高精度に再生位置を取得・設定できる関数は GetCurrentPositionSoundMem と SetCurrentPositionSoundMem というサンプル単位で再生位置を取得・設定するための関数なのですが、 こちらでは駄目でしょうか? // サウンドハンドルの再生位置をサンプル単位で取得する int GetCurrentPositionSoundMem( int SoundHandle ) ; // サウンドハンドルの再生位置をサンプル単位で設定する int SetCurrentPositionSoundMem( int SamplePosition, int SoundHandle ) ; あと、ご紹介いただいた WASAPI のタイマーを使用して取得できる再生位置の精度を 向上させましたので、よろしければこちらをお使いください 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 // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) 因みに WASAPI のタイマーは『WASAPI が再生したサンプル数』を取得する機能で、精度はそのまま再生周波数でした タイマーのAPIで取得できるパフォーマンスカウンタの値は『WASAPI が再生したサンプル数を取得するAPIを 呼び出した時のパフォーマンスカウンタの値』というだけで、パフォーマンスカウンタの精度で再生時間が 取得できるというものではありませんでした
メンテ
Re: サウンドの遅延について ( No.37 )
名前:あいおい? 日時:2019/12/30 12:39

> 現状で一番高精度に再生位置を取得・設定できる関数は GetCurrentPositionSoundMem と > SetCurrentPositionSoundMem というサンプル単位で再生位置を取得・設定するための関数なのですが、 > こちらでは駄目でしょうか? 今までGetSoundCurrentTime(int handle);を使っていたためそちらを使用していませんでした……。 度重なって申し訳ないのですが質問がございます。 GetCurrentPositionSoundMemをGetFrequencySoundMemで割れば、今再生中の位置を秒数で取得できるはずですが、 仮にサンプル数が192000Hzの場合3時間強ほどしか再生位置を取得できないように思えます。 3時間長い音源を使うことはないですが、より大きな値が取得できるのであれば大きな値が指定できる方の方がいいかなと思い…… 年末年始の忙しい時期に申し訳ないです m(__)m
メンテ
Re: サウンドの遅延について ( No.38 )
名前:管理人 日時:2019/12/31 15:25

> 3時間長い音源を使うことはないですが、より大きな値が取得できるのであれば大きな値が指定できる方の方がいいかなと思い…… 既存の符号付き32bitでサンプル位置が指定できない音源となると4GB超えのファイルとなりますが( 2ch 16bit で再生位置 2147483647( 0x7fffffff )で 8GB ) そんなファイルをDXライブラリで扱うことがあるのかどうか… (・・;; とはいえ、確かに世の中のオーディオ系のAPIやライブラリはほぼ全て時間指定系のパラメータが64bitなので、 DXライブラリの32bitによる時間指定や取得はかなり扱える範囲が狭く感じてしまうのも確かですね… というわけで、サウンドの再生位置の変更や取得を64bit化してみましたので、よろしければお試しください 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 // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) あと、実際に32bit越えの時間指定ができるか確認する手段が無かったので、併せて4GB超えのファイルサイズの wavファイル( 内部がRF64形式 )にも対応してみました
メンテ
Re: サウンドの遅延について ( No.39 )
名前:あいおい? 日時:2020/01/01 01:01

> というわけで、サウンドの再生位置の変更や取得を64bit化してみましたので、よろしければお試しください m(_ _)m ありがとうございます! DLLを更新しても正常に動作することが確認できました。32bit越えの時間になる音源ファイルの検証は後日行おうと思います。 個人的には、WASAPIとASIO対応については、これで良いと思います。これと言って不具合もなくなりましたし。 要望を聞いてくださり、ありがとうございました。m(__)m
メンテ
Re: サウンドの遅延について ( No.40 )
名前:管理人 日時:2020/01/01 06:26

お試しいただきありがとうございます 正常に動作しているようで何よりです > 個人的には、WASAPIとASIO対応については、これで良いと思います。これと言って不具合もなくなりましたし。 >  > 要望を聞いてくださり、ありがとうございました。m(__)m こちらこそ幾度にも渡る不具合の検証や予定になかったASIO関係の機能の検証にまでお付き合い頂き本当にありがとうございました m(・・;m もう少しだけソフトウェアミキシングの処理を高速化できそうなので、その辺りを整備したら正式版としてアップしようと思います
メンテ

Page: 1 | 2 |

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

   クッキー保存