トップページ > 過去ログ > 記事閲覧
GetCurrentPositionSoundMemについて
名前:みけCAT 日時: 2011/10/02 13:40

DXライブラリのGetCurrentPositionSoundMem関数に付いてですが、 この関数は音の再生中に再生位置を取得する関数という認識でいいのですか? ↓のリファレンスを見ても、 h_tp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_sound.html#R8N15 SetCurrentPositionSoundMem関数と一言一句同じ説明が書いてあってわかりません。 (引数の欄まで同じで、関数に合っていない)

Page: 1 |

Re: GetCurrentPositionSoundMemについて ( No.1 )
名前:みけCAT 日時:2011/10/02 14:01

自分で試してみました。 サンプル単位の現在の再生位置のような感じがしました。 #include "DxLib.h" char Key[256]; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理 SetDrawScreen( DX_SCREEN_BACK ); //裏画面に設定 int white=GetColor(255,255,255); int sound=LoadSoundMem("test.mp3"); PlaySoundMem(sound,DX_PLAYTYPE_BACK); int starttime=GetNowCount(); while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){ //↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されていない //ココに処理を書いていく int currentposition=GetCurrentPositionSoundMem(sound); DrawString(10,10,"GetCurrentPositionSoundMem",white); DrawFormatString(10,30,white,"%d",currentposition); int keikatime=GetNowCount()-starttime; DrawString(10,110,"経過時間",white); DrawFormatString(10,130,white,"%dms",keikatime); DrawString(10,210,"GetCurrentPositionSoundMem*1000/経過時間",white); DrawFormatString(10,230,white,"%d", (long long)currentposition*1000/keikatime); ScreenFlip();//裏画面を表画面に反映 } DxLib_End(); return 0; }
Re: GetCurrentPositionSoundMemについて ( No.2 )
名前:管理人 日時:2011/10/02 23:42

すみません、リファレンスに GetCurrentPositionSoundMem があるのは私のミスです が、その機能についてはみけCATさんのご認識の通りです ただ、サウンドの機能は独立して動作しているのでこの機能を使用してのタイミング取りなどは 大体±20msくらいの誤差が許される処理に限定されると考えてください ( この関数から得られる情報を元にしてBGMを途中から別の曲に切り替えるなどの タイミングがシビアな処理は恐らく綺麗に実現することはできないと思います・・・ BGMに別の音ファイルを使ってタイミングに合わせて音を追加する、くらいならなんとか 違和感無く聞こえるようにはできるかもしれませんが・・・ )
Re: GetCurrentPositionSoundMemについて ( No.3 )
名前:みけCAT 日時:2011/10/05 21:38

そうですか。ありがとうございます。 あとはGetFrequencySoundMemと組み合わせれば秒単位の値が得られるのかな? >ただ、サウンドの機能は独立して動作しているのでこの機能を使用してのタイミング取りなどは >大体±20msくらいの誤差が許される処理に限定されると考えてください 例えば音ゲーの判定に使うのはちょっと厳しいかな?
Re: GetCurrentPositionSoundMemについて ( No.4 )
名前:管理人 日時:2011/10/09 20:38

> あとはGetFrequencySoundMemと組み合わせれば秒単位の値が得られるのかな? はい > 例えば音ゲーの判定に使うのはちょっと厳しいかな? 誤差が許容できる範囲かどうかは実際に試してみないと分からないと思います ただ、PCのサウンドデバイスの中には PlaySoundMem を実行してから実際に 音が鳴るまでの時間が長いものもあるので、GetCurrentPositionSoundMem の 戻り値に対して補正値を設定できるような Config をゲームに実装する 必要があるかもしれません

Page: 1 |