音楽の音量変更をするプログラムです。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int SHandle ;
int volume = 255 ;
ChangeWindowMode( TRUE );
SetAlwaysRunFlag( TRUE );
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// test.wavのメモリへの読み込みサウンドハンドルをSHandleに保存します
SHandle = LoadSoundMem( "test.mp3" ) ;
//音量変更
ChangeVolumeSoundMem( volume , SHandle );
// 読みこんだ音をバックグラウンド再生します(『PlaySoundMem』関数使用)
PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;
//裏画面
SetDrawScreen( DX_SCREEN_BACK );
// Aキー押されるまでループ
while(CheckHitKey(KEY_INPUT_A)==0 && ClearDrawScreen()==0)
{
// メッセージ処理
if( ProcessMessage() == -1 )
{
break ; // エラーが起きたらループを抜ける
}
//
//リアルタイムで音量変更するときはコメントアウトしてください
// ↓ ↓ ↓ ↓
//if(CheckHitKey(KEY_INPUT_DOWN) == 1 ){
// volume--;
//}
//if(volume < 0)
// volume = 0;
//if(CheckHitKey(KEY_INPUT_UP) == 1 ){
// volume++;
//}
//if(volume > 255)
// volume = 255;
//ChangeVolumeSoundMem( volume , SHandle );
// ↑ ↑ ↑ ↑
DrawFormatString( 0, 0, GetColor(255,255,255) , "volume = %d %d/10000" , volume , GetVolumeSoundMem( SHandle ));
ScreenFlip();
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
コードは正常という前提で本題です。
リアルタイムで音量を変更していると、0~255の0に近くなるほど急激に音量が下がります。このようなことが前にもおこり、ここで質問させていただきましたがその時は変数を割って求めていたことが原因でした。
しかし今回は数値を割ってもいないし、ただ数値を上下しているだけなのに音量に異常が起きています。
もしかしたらコードが問題なのかもしれませんがなぜなのかわからない状態です。
私の場合、volumeが1のときGetVolumeSoundMem(音量を取得する)は7594/10000、volumeが30で9071/10000、volumeが200のとき9895/10000となります。
VC++2008
Windows7 HP
DxLib 3.10a