Re: サウンドハンドルの再生時間を秒単位で得る方法について ( No.1 ) |
- 名前:was-blue.0793 日時:2022/06/15 23:00
追記になります。
「44100Hzの場合、441単位でしか値が取れない?」と記述していましたが、検証したところ実際に「441」単位でしか値が取れないような挙動になっていました。
また、再生速度を変更するとそれに応じて取れる値の単位も変化します。(0.5倍速にすると約220単位の値が取得できる)
|
Re: サウンドハンドルの再生時間を秒単位で得る方法について ( No.2 ) |
- 名前:管理人 日時:2022/06/16 02:08
> これでは100FPS以上でゲームを動作させる際に不都合が生じるので、Aの方法を使う場合に更に細かい値を取得できるような方法があればご教示いただけると幸いです。
環境は Windows でしょうか?
現状では仰られている通り 441単位( 10ms単位 )となるのは仕様となります
こちらは Windows の APIレベルの仕様なので、これ以上精度を上げることはできません
( サウンドAPIの要求に応じて逐一波形データをサウンドAPIに渡す方式なのですが、1回辺りの要求サンプル数が10ms分となっていて、
『要求されたサンプルを API に渡す』=『API に渡したサンプルは再生された扱いにして再生時間を進める』
という方式になっているので、『要求される1回辺りのサンプル数が 10ms分』=『再生時間の粒度は10ms』となっています )
PlaySoundMem の直後に GetNowHiPerformanceCount でタイムカウントを取得して、
再生時間を取得したいタイミングで再度 GetNowHiPerformanceCount を実行して、
差分から現在の再生時間を算出する等の方法では 10ms 以上の精度で再生時間を取得できますので、
お手数で申し訳ありませんが GetCurrentPositionSoundMem 以外の方法による再生時間の取得をしてみてください m(_ _;m
|
Re: サウンドハンドルの再生時間を秒単位で得る方法について ( No.3 ) |
- 名前:was-blue.0793 日時:2022/06/16 12:12
>>管理人さん
ご返答ありがとうございます。
環境はWindows版であり、原則10ms単位でしか時間が取れないことはDxLibの仕様であることを了解しました。
ご教示いただいた「別のタイマーを並走させて時間を得る」方法では、処理落ちなどでタイマーの時間と実際の再生時間がズレてしまう懸念があります。
この場合「別に用意したタイマーの示す時間が実際の再生位置であることを保証する」処理が必要になるのですが、現行の仕様で可能でしょうか?
|
Re: サウンドハンドルの再生時間を秒単位で得る方法について ( No.4 ) |
- 名前:管理人 日時:2022/06/18 02:48
> ご教示いただいた「別のタイマーを並走させて時間を得る」方法では、処理落ちなどでタイマーの時間と実際の再生時間がズレてしまう懸念があります。
タイマーはソフトの処理落ちに関係なく時を刻みますので、処理落ちによる再生時間とのずれの心配はありません
> この場合「別に用意したタイマーの示す時間が実際の再生位置であることを保証する」処理が必要になるのですが、現行の仕様で可能でしょうか?
前述の通りタイマーはソフトの処理落ちに関係なく時を刻みますので、基本的にはタイマーの示す時間が実際の再生位置であると考えて問題ないと思います
|