• R/O
  • SSH
  • HTTPS

提交

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。


Commit MetaInfo

修订版309 (tree)
时间2022-05-01 00:19:09
作者xops-mikan

Log Message

iniファイルによりゲーム全体の音量を設定できるように。

更改概述

差异

--- trunk/config.cpp (revision 308)
+++ trunk/config.cpp (revision 309)
@@ -51,6 +51,7 @@
5151 ShowArmFlag = false;
5252 ScreenWidth = 0;
5353 ScreenHeight = 0;
54+ mastervolume = 0.0f;
5455 }
5556
5657 //! @brief ディストラクタ
@@ -545,6 +546,11 @@
545546 default: ScreenWidth = DEFAULT_SCREEN_WIDTH; ScreenHeight = DEFAULT_SCREEN_HEIGHT; break;
546547 }
547548
549+ //音量取得
550+ mastervolume = INIConfig.GetINIFileFloat("Sounds", "MasterVolume", 1.0f, NULL);
551+ if( mastervolume < 0.0f ){ mastervolume = 0.0f; }
552+ if( mastervolume > 1.0f ){ mastervolume = 1.0f; }
553+
548554 INIConfig.ReleaseINIFile();
549555
550556 #ifdef ENABLE_DEBUGLOG
@@ -556,6 +562,7 @@
556562 ShowArmFlag = false;
557563 ScreenWidth = DEFAULT_SCREEN_WIDTH;
558564 ScreenHeight = DEFAULT_SCREEN_HEIGHT;
565+ mastervolume = 1.0f;
559566 #endif
560567 return 0;
561568 }
@@ -567,6 +574,7 @@
567574 ShowArmFlag = false;
568575 ScreenWidth = DEFAULT_SCREEN_WIDTH;
569576 ScreenHeight = DEFAULT_SCREEN_HEIGHT;
577+ mastervolume = 1.0f;
570578 }
571579
572580 //! @brief 腕表示フラグを取得
@@ -589,3 +597,10 @@
589597 {
590598 return ScreenHeight;
591599 }
600+
601+//! @brief 音量設定を取得
602+//! @return 値
603+float Config::GetVolume()
604+{
605+ return mastervolume;
606+}
--- trunk/config.h (revision 308)
+++ trunk/config.h (revision 309)
@@ -81,6 +81,7 @@
8181 bool ShowArmFlag; //!< 腕表示フラグ
8282 int ScreenWidth; //!< 画面解像度(幅)
8383 int ScreenHeight; //!< 画面解像度(高さ)
84+ float mastervolume; //!< 音量
8485
8586 public:
8687 Config();
@@ -115,6 +116,7 @@
115116 bool GetShowArmFlag();
116117 int GetScreenWidth();
117118 int GetScreenHeight();
119+ float GetVolume();
118120 };
119121
120122 #endif
\ No newline at end of file
--- trunk/gamemain.cpp (revision 308)
+++ trunk/gamemain.cpp (revision 309)
@@ -105,7 +105,11 @@
105105 volume = 0.0f;
106106 }
107107 else{
108+#ifdef ENABLE_ADDCONFIG
109+ volume = GameConfig.GetVolume();
110+#else
108111 volume = 1.0f;
112+#endif
109113 }
110114 GameSound.SetClass(&SoundCtrl, &Resource, &GameParamInfo);
111115 SoundCtrl.SetVolume(volume);
--- trunk/sound-directsound.cpp (revision 308)
+++ trunk/sound-directsound.cpp (revision 309)
@@ -44,6 +44,7 @@
4444 }
4545 p3DListener = NULL;
4646 mastervolume = 1.0f;
47+ volume_dBper = 1.0f;
4748 }
4849
4950 //! @brief ディストラクタ
@@ -125,10 +126,18 @@
125126 }
126127
127128 //! @brief 再生音量を設定
128-//! @param volume 再生音量 (0.0=無音 1.0=100%)
129+//! @param volume 再生音量 (0.0=無音 1.0=100%)
130+//! @attention 0.01(1%)未満は 0.00(0%)として処理されます。
129131 void SoundControl::SetVolume(float volume)
130132 {
131133 mastervolume = volume;
134+ if( mastervolume < 0.01f ){ mastervolume = 0.0f; }
135+ if( mastervolume > 1.00f ){ mastervolume = 1.0f; }
136+
137+ //dBを考慮して最大音量を決定
138+ if( mastervolume == 0.0f ){ volume_dBper = 0.0f; return; }
139+ if( mastervolume == 1.0f ){ volume_dBper = 1.0f; return; }
140+ volume_dBper = 1.0f - log10f(mastervolume)*-0.2f;
132141 }
133142
134143 //! @brief カメラの座標と角度を設定
@@ -565,7 +574,7 @@
565574 if( volume >= 100 ){ return DSBVOLUME_MAX; }
566575
567576 //float volume2 = 1.0f/200 * (volume + 100);
568- float volume2 = 1.0f/200 * (volume + 100) * mastervolume;
577+ float volume2 = (1.0f/200 * (volume + 100)) * volume_dBper;
569578 int retn = (int)((DSBVOLUME_MIN-DSBVOLUME_MAX) * (1.0f - volume2));
570579 return retn;
571580 }
--- trunk/sound-ezds.cpp (revision 308)
+++ trunk/sound-ezds.cpp (revision 309)
@@ -54,6 +54,7 @@
5454 camera_z = 0.0f;
5555 camera_rx = 0.0f;
5656 mastervolume = 1.0f;
57+ volume_max = 100;
5758 }
5859
5960 //! @brief ディストラクタ
@@ -140,10 +141,18 @@
140141 }
141142
142143 //! @brief 再生音量を設定
143-//! @param volume 再生音量 (0.0=無音 1.0=100%)
144+//! @param volume 再生音量 (0.0=無音 1.0=100%)
145+//! @attention 0.01(1%)未満は 0.00(0%)として処理されます。
144146 void SoundControl::SetVolume(float volume)
145147 {
146148 mastervolume = volume;
149+ if( mastervolume < 0.01f ){ mastervolume = 0.0f; }
150+ if( mastervolume > 1.00f ){ mastervolume = 1.0f; }
151+
152+ //dBを考慮して最大音量を決定
153+ if( mastervolume == 0.0f ){ volume_max = -100; return; }
154+ if( mastervolume == 1.0f ){ volume_max = 100; return; }
155+ volume_max = 100 - (int)(log10f(mastervolume)*-0.2f*200);
147156 }
148157
149158 //! @brief カメラの座標と角度を設定
@@ -224,7 +233,8 @@
224233 //サウンドを再生
225234 if( DSplay == NULL ){ return 0; }
226235 //return DSplay(id, volume, pan);
227- return DSplay(id, (int)(mastervolume * (volume + 100)) - 100, pan);
236+ int volume2 = 1.0f/200 * (volume + 100) * (volume_max + 100) - 100;
237+ return DSplay(id, volume2, pan);
228238 }
229239
230240 //! @brief サウンドを再生(3D再生)
--- trunk/sound.h (revision 308)
+++ trunk/sound.h (revision 309)
@@ -87,7 +87,8 @@
8787 float camera_y; //!< カメラ座標
8888 float camera_z; //!< カメラ座標
8989 float camera_rx; //!< カメラX軸角度
90- float mastervolume; //!< 音量
90+ float mastervolume; //!< 音量(パーセント)
91+ int volume_max; //!< 最大音量
9192
9293
9394 bool CheckSourceDist(float x, float y, float z, bool near, float *out_dist);
@@ -96,7 +97,8 @@
9697 LPDIRECTSOUND8 pDSound; //!< DIRECTSOUND8のポインタ
9798 LPDIRECTSOUNDBUFFER pDSBuffer[MAX_LOADSOUND][MAX_SOUNDLISTS]; //!< セカンダリーバッファー
9899 LPDIRECTSOUND3DLISTENER8 p3DListener; //!< リスナー
99- float mastervolume; //!< 音量
100+ float mastervolume; //!< 音量(パーセント)
101+ float volume_dBper; //!< 最大音量
100102
101103 bool CheckSoundFile(const char* filename, int *filesize, int *fileoffset, WAVEFORMATEX** pwfex);
102104 int GetDSVolume(int volume);