以下、テストで使ったソースです。
↑↓キーで再生開始位置の移動
Pキーで再生・停止です。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE); /* ウィンドウモード */
if( DxLib_Init() == -1 ) return -1; // エラーが起きたら直ちに終了
if( SetDrawScreen( DX_SCREEN_BACK ) != 0 ) return -1; /* 裏画面化 */
SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMPRESS );
// SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMNOPRESS );
// SetCreateSoundDataType( DX_SOUNDDATATYPE_FILE );
// int bgm_handle = LoadSoundMem( "./data/polp.mp3" );
// int bgm_handle = LoadSoundMem( "./data/polp.wav" );
// int bgm_handle = LoadSoundMem( "./data/tm2_traffic001.wav" );
int bgm_handle = LoadSoundMem( "./data/tm2_traffic001.mp3" );
int hit_p = 0;
int second = 0;
int bgm_pos = 0;
while( true ){
if( ProcessMessage() ) break; /* メッセージ処理 */
if( ClearDrawScreen() ) break; /* 画面をクリア */
if( CheckHitKey(KEY_INPUT_ESCAPE) ) break; /* ESCで終了 */
if( CheckHitKey(KEY_INPUT_P) ){
hit_p++;
}else{
hit_p = 0;
}
if( CheckHitKey(KEY_INPUT_UP) ) second += 1;
if( CheckHitKey(KEY_INPUT_DOWN) ) second -= (second==0)?(0):(1);
if( hit_p == 1 ){
if( CheckSoundMem( bgm_handle ) == 1 ){
StopSoundMem( bgm_handle );
} else if( CheckSoundMem( bgm_handle ) == 0 ){
bgm_pos = (second*1000); // BGMの現在の位置を設定(ミリ秒)
// bgm_pos = (second*44100); // BGMの現在の位置を設定(サンプル数)
// bgm_pos = (second*44100*4); // BGMの現在の位置を設定(バイト数)
SetSoundCurrentTime( bgm_pos, bgm_handle ); // BGMの現在位置をセット(ミリ秒)
// SetCurrentPositionSoundMem( bgm_pos, bgm_handle ); // BGMの現在位置をセット(サンプル数)
// SetSoundCurrentPosition( bgm_pos, bgm_handle ); // BGMの現在位置をセット(バイト数)
PlaySoundMem( bgm_handle, DX_PLAYTYPE_BACK, false );
} else {
printfDx( "BGM ERROR\n" );
}
}
DrawFormatString( 0, 0, 0x00FFFFFF, "GetCurrentPositionSoundMem:%d" , GetCurrentPositionSoundMem(bgm_handle) ); /* サンプル数で位置を表示 */
DrawFormatString( 0, 20, 0x00FFFFFF, "GetSoundCurrentPosition :%d" , GetSoundCurrentPosition(bgm_handle)); /* バイト数で位置を表示 */
DrawFormatString( 0, 40, 0x00FFFFFF, "GetSoundCurrentTime :%d" , GetSoundCurrentTime(bgm_handle)); /* ミリ秒で位置を表示 */
DrawFormatString( 0, 60, 0x00FFFFFF, "CheckSoundMem:%d", CheckSoundMem( bgm_handle ) ); /* 再生状態 */
DrawFormatString( 0, 80, 0x00FFFFFF, "SECOND:%d", second ); /* 設定秒数 */
ScreenFlip();
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}