Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赤子奈落
ygopro
Commits
e4081e20
Commit
e4081e20
authored
Feb 16, 2025
by
nanahira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
use miniaudio
parent
ed32d849
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
89068 additions
and
149 deletions
+89068
-149
gframe/event_handler.cpp
gframe/event_handler.cpp
+2
-2
gframe/game.cpp
gframe/game.cpp
+3
-3
gframe/miniaudio/miniaudio.c
gframe/miniaudio/miniaudio.c
+81195
-0
gframe/miniaudio/miniaudio.h
gframe/miniaudio/miniaudio.h
+7766
-0
gframe/miniaudio/premake5.lua
gframe/miniaudio/premake5.lua
+6
-0
gframe/premake5.lua
gframe/premake5.lua
+6
-31
gframe/sound_manager.cpp
gframe/sound_manager.cpp
+77
-67
gframe/sound_manager.h
gframe/sound_manager.h
+9
-6
premake5.lua
premake5.lua
+4
-40
No files found.
gframe/event_handler.cpp
View file @
e4081e20
...
@@ -1934,7 +1934,7 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
...
@@ -1934,7 +1934,7 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
return
true
;
return
true
;
break
;
break
;
}
}
#ifdef YGOPRO_USE_
IRRKLANG
#ifdef YGOPRO_USE_
AUDIO
case
CHECKBOX_ENABLE_MUSIC
:
{
case
CHECKBOX_ENABLE_MUSIC
:
{
if
(
!
mainGame
->
chkEnableMusic
->
isChecked
())
if
(
!
mainGame
->
chkEnableMusic
->
isChecked
())
soundManager
.
StopBGM
();
soundManager
.
StopBGM
();
...
@@ -2053,7 +2053,7 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
...
@@ -2053,7 +2053,7 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
return
true
;
return
true
;
break
;
break
;
}
}
#ifdef YGOPRO_USE_
IRRKLANG
#ifdef YGOPRO_USE_
AUDIO
case
SCROLL_VOLUME
:
{
case
SCROLL_VOLUME
:
{
mainGame
->
gameConf
.
sound_volume
=
(
double
)
mainGame
->
scrSoundVolume
->
getPos
()
/
100
;
mainGame
->
gameConf
.
sound_volume
=
(
double
)
mainGame
->
scrSoundVolume
->
getPos
()
/
100
;
mainGame
->
gameConf
.
music_volume
=
(
double
)
mainGame
->
scrMusicVolume
->
getPos
()
/
100
;
mainGame
->
gameConf
.
music_volume
=
(
double
)
mainGame
->
scrMusicVolume
->
getPos
()
/
100
;
...
...
gframe/game.cpp
View file @
e4081e20
...
@@ -1563,7 +1563,7 @@ bool Game::LoadConfigFromFile(const char* file) {
...
@@ -1563,7 +1563,7 @@ bool Game::LoadConfigFromFile(const char* file) {
gameConf
.
window_height
=
strtol
(
valbuf
,
nullptr
,
10
);
gameConf
.
window_height
=
strtol
(
valbuf
,
nullptr
,
10
);
}
else
if
(
!
std
::
strcmp
(
strbuf
,
"resize_popup_menu"
))
{
}
else
if
(
!
std
::
strcmp
(
strbuf
,
"resize_popup_menu"
))
{
gameConf
.
resize_popup_menu
=
strtol
(
valbuf
,
nullptr
,
10
)
>
0
;
gameConf
.
resize_popup_menu
=
strtol
(
valbuf
,
nullptr
,
10
)
>
0
;
#ifdef YGOPRO_USE_
IRRKLANG
#ifdef YGOPRO_USE_
AUDIO
}
else
if
(
!
std
::
strcmp
(
strbuf
,
"enable_sound"
))
{
}
else
if
(
!
std
::
strcmp
(
strbuf
,
"enable_sound"
))
{
gameConf
.
enable_sound
=
strtol
(
valbuf
,
nullptr
,
10
)
>
0
;
gameConf
.
enable_sound
=
strtol
(
valbuf
,
nullptr
,
10
)
>
0
;
}
else
if
(
!
std
::
strcmp
(
strbuf
,
"sound_volume"
))
{
}
else
if
(
!
std
::
strcmp
(
strbuf
,
"sound_volume"
))
{
...
@@ -1804,7 +1804,7 @@ void Game::SaveConfig() {
...
@@ -1804,7 +1804,7 @@ void Game::SaveConfig() {
fprintf
(
fp
,
"window_width = %d
\n
"
,
gameConf
.
window_width
);
fprintf
(
fp
,
"window_width = %d
\n
"
,
gameConf
.
window_width
);
fprintf
(
fp
,
"window_height = %d
\n
"
,
gameConf
.
window_height
);
fprintf
(
fp
,
"window_height = %d
\n
"
,
gameConf
.
window_height
);
fprintf
(
fp
,
"resize_popup_menu = %d
\n
"
,
gameConf
.
resize_popup_menu
?
1
:
0
);
fprintf
(
fp
,
"resize_popup_menu = %d
\n
"
,
gameConf
.
resize_popup_menu
?
1
:
0
);
#ifdef YGOPRO_USE_
IRRKLANG
#ifdef YGOPRO_USE_
AUDIO
fprintf
(
fp
,
"enable_sound = %d
\n
"
,
(
chkEnableSound
->
isChecked
()
?
1
:
0
));
fprintf
(
fp
,
"enable_sound = %d
\n
"
,
(
chkEnableSound
->
isChecked
()
?
1
:
0
));
fprintf
(
fp
,
"enable_music = %d
\n
"
,
(
chkEnableMusic
->
isChecked
()
?
1
:
0
));
fprintf
(
fp
,
"enable_music = %d
\n
"
,
(
chkEnableMusic
->
isChecked
()
?
1
:
0
));
fprintf
(
fp
,
"#Volume of sound and music, between 0 and 100
\n
"
);
fprintf
(
fp
,
"#Volume of sound and music, between 0 and 100
\n
"
);
...
@@ -2035,7 +2035,7 @@ void Game::initUtils() {
...
@@ -2035,7 +2035,7 @@ void Game::initUtils() {
FileSystem
::
MakeDir
(
"textures/cover2"
);
FileSystem
::
MakeDir
(
"textures/cover2"
);
FileSystem
::
MakeDir
(
"textures/pscale"
);
FileSystem
::
MakeDir
(
"textures/pscale"
);
//sound
//sound
#ifdef YGOPRO_USE_
IRRKLANG
#ifdef YGOPRO_USE_
AUDIO
FileSystem
::
MakeDir
(
"sound"
);
FileSystem
::
MakeDir
(
"sound"
);
FileSystem
::
MakeDir
(
"sound/BGM"
);
FileSystem
::
MakeDir
(
"sound/BGM"
);
FileSystem
::
MakeDir
(
"sound/BGM/advantage"
);
FileSystem
::
MakeDir
(
"sound/BGM/advantage"
);
...
...
gframe/miniaudio/miniaudio.c
0 → 100644
View file @
e4081e20
This diff is collapsed.
Click to expand it.
gframe/miniaudio/miniaudio.h
0 → 100644
View file @
e4081e20
This diff is collapsed.
Click to expand it.
gframe/miniaudio/premake5.lua
0 → 100644
View file @
e4081e20
project
"cminiaudio"
kind
"StaticLib"
files
{
"*.c"
,
"*.h"
}
filter
"system:linux"
links
{
"dl"
,
"pthread"
,
"m"
}
gframe/premake5.lua
View file @
e4081e20
include
"lzma/."
include
"lzma/."
include
"spmemvfs/."
include
"spmemvfs/."
if
USE_AUDIO
then
include
"miniaudio/."
end
project
"YGOPro"
project
"YGOPro"
kind
"WindowedApp"
kind
"WindowedApp"
...
@@ -7,13 +10,6 @@ project "YGOPro"
...
@@ -7,13 +10,6 @@ project "YGOPro"
files
{
"*.cpp"
,
"*.h"
,
"CGUISkinSystem/*.cpp"
,
"CGUISkinSystem/*.h"
,
"CXMLRegistry/*.cpp"
,
"CXMLRegistry/*.h"
}
files
{
"*.cpp"
,
"*.h"
,
"CGUISkinSystem/*.cpp"
,
"CGUISkinSystem/*.h"
,
"CXMLRegistry/*.cpp"
,
"CXMLRegistry/*.h"
}
includedirs
{
"../ocgcore"
}
includedirs
{
"../ocgcore"
}
links
{
"ocgcore"
,
"clzma"
,
"cspmemvfs"
,
LUA_LIB_NAME
,
"sqlite3"
,
"irrlicht"
,
"freetype"
,
"event"
}
links
{
"ocgcore"
,
"clzma"
,
"cspmemvfs"
,
LUA_LIB_NAME
,
"sqlite3"
,
"irrlicht"
,
"freetype"
,
"event"
}
if
BUILD_IKPMP3
then
links
{
"ikpmp3"
}
end
if
BUILD_IKPMP3
then
links
{
"ikpmp3"
}
end
if
BUILD_EVENT
then
if
BUILD_EVENT
then
includedirs
{
"../event/include"
}
includedirs
{
"../event/include"
}
...
@@ -43,29 +39,15 @@ project "YGOPro"
...
@@ -43,29 +39,15 @@ project "YGOPro"
libdirs
{
SQLITE_LIB_DIR
}
libdirs
{
SQLITE_LIB_DIR
}
end
end
if
USE_IRRKLANG
then
if
USE_AUDIO
then
defines
{
"YGOPRO_USE_IRRKLANG"
}
defines
{
"YGOPRO_USE_AUDIO"
}
includedirs
{
IRRKLANG_INCLUDE_DIR
}
links
{
"cminiaudio"
}
if
not
IRRKLANG_PRO
then
libdirs
{
IRRKLANG_LIB_DIR
}
end
end
end
filter
"system:windows"
filter
"system:windows"
defines
{
"_IRR_WCHAR_FILESYSTEM"
}
defines
{
"_IRR_WCHAR_FILESYSTEM"
}
files
"ygopro.rc"
files
"ygopro.rc"
libdirs
{
"$(DXSDK_DIR)Lib/x86"
}
libdirs
{
"$(DXSDK_DIR)Lib/x86"
}
if
USE_IRRKLANG
then
links
{
"irrKlang"
}
if
IRRKLANG_PRO
then
defines
{
"IRRKLANG_STATIC"
}
filter
{
"not configurations:Debug"
}
libdirs
{
IRRKLANG_PRO_RELEASE_LIB_DIR
}
filter
{
"configurations:Debug"
}
libdirs
{
IRRKLANG_PRO_DEBUG_LIB_DIR
}
filter
{}
end
end
links
{
"opengl32"
,
"ws2_32"
,
"winmm"
,
"gdi32"
,
"kernel32"
,
"user32"
,
"imm32"
,
"Dnsapi"
}
links
{
"opengl32"
,
"ws2_32"
,
"winmm"
,
"gdi32"
,
"kernel32"
,
"user32"
,
"imm32"
,
"Dnsapi"
}
filter
"not action:vs*"
filter
"not action:vs*"
buildoptions
{
"-std=c++14"
,
"-fno-rtti"
}
buildoptions
{
"-std=c++14"
,
"-fno-rtti"
}
...
@@ -78,13 +60,6 @@ project "YGOPro"
...
@@ -78,13 +60,6 @@ project "YGOPro"
buildoptions
{
"--target=arm64-apple-macos12"
}
buildoptions
{
"--target=arm64-apple-macos12"
}
linkoptions
{
"-arch arm64"
}
linkoptions
{
"-arch arm64"
}
end
end
if
USE_IRRKLANG
then
links
{
"irrklang"
}
end
filter
"system:linux"
filter
"system:linux"
linkoptions
{
"-static-libstdc++"
,
"-static-libgcc"
}
linkoptions
{
"-static-libstdc++"
,
"-static-libgcc"
}
links
{
"GL"
,
"X11"
,
"Xxf86vm"
}
links
{
"GL"
,
"X11"
,
"Xxf86vm"
}
if
USE_IRRKLANG
then
links
{
"IrrKlang"
}
linkoptions
{
IRRKLANG_LINK_RPATH
}
end
gframe/sound_manager.cpp
View file @
e4081e20
#include "sound_manager.h"
#include "sound_manager.h"
#include "myfilesystem.h"
#include "myfilesystem.h"
#ifdef YGOPRO_USE_IRRKLANG
#include "../ikpmp3/ikpMP3.h"
#endif
namespace
ygo
{
namespace
ygo
{
SoundManager
soundManager
;
SoundManager
soundManager
;
bool
SoundManager
::
Init
()
{
bool
SoundManager
::
Init
()
{
#ifdef YGOPRO_USE_
IRRKLANG
#ifdef YGOPRO_USE_
AUDIO
bgm_scene
=
-
1
;
bgm_scene
=
-
1
;
previous_bgm_scene
=
-
1
;
previous_bgm_scene
=
-
1
;
RefreshBGMList
();
RefreshBGMList
();
bgm_process
=
false
;
bgm_process
=
false
;
rnd
.
reset
((
unsigned
int
)
std
::
time
(
nullptr
));
rnd
.
reset
((
unsigned
int
)
std
::
time
(
nullptr
));
engineSound
=
irrklang
::
createIrrKlangDevice
();
if
(
ma_engine_init
(
nullptr
,
&
engineSound
)
||
ma_engine_init
(
nullptr
,
&
engineMusic
))
{
engineMusic
=
irrklang
::
createIrrKlangDevice
();
if
(
!
engineSound
||
!
engineMusic
)
{
return
false
;
return
false
;
}
else
{
}
else
{
irrklang
::
ikpMP3Init
(
engineMusic
);
return
true
;
return
true
;
}
}
#endif // YGOPRO_USE_IRRKLANG
#endif // YGOPRO_USE_AUDIO
// TODO: Implement other sound engines
return
false
;
return
false
;
}
}
void
SoundManager
::
RefreshBGMList
()
{
void
SoundManager
::
RefreshBGMList
()
{
#ifdef YGOPRO_USE_
IRRKLANG
#ifdef YGOPRO_USE_
AUDIO
RefershBGMDir
(
L""
,
BGM_DUEL
);
RefershBGMDir
(
L""
,
BGM_DUEL
);
RefershBGMDir
(
L"duel"
,
BGM_DUEL
);
RefershBGMDir
(
L"duel"
,
BGM_DUEL
);
RefershBGMDir
(
L"menu"
,
BGM_MENU
);
RefershBGMDir
(
L"menu"
,
BGM_MENU
);
...
@@ -51,138 +44,142 @@ void SoundManager::RefershBGMDir(std::wstring path, int scene) {
...
@@ -51,138 +44,142 @@ void SoundManager::RefershBGMDir(std::wstring path, int scene) {
});
});
}
}
void
SoundManager
::
PlaySoundEffect
(
int
sound
)
{
void
SoundManager
::
PlaySoundEffect
(
int
sound
)
{
#ifdef YGOPRO_USE_IRRKLANG
if
(
!
mainGame
->
chkEnableSound
->
isChecked
())
if
(
!
mainGame
->
chkEnableSound
->
isChecked
())
return
;
return
;
engineSound
->
setSoundVolume
(
mainGame
->
gameConf
.
sound_volume
)
;
char
soundName
[
32
]
;
switch
(
sound
)
{
switch
(
sound
)
{
case
SOUND_SUMMON
:
{
case
SOUND_SUMMON
:
{
engineSound
->
play2D
(
"./sound/summon.wav
"
);
strcpy
(
soundName
,
"summon
"
);
break
;
break
;
}
}
case
SOUND_SPECIAL_SUMMON
:
{
case
SOUND_SPECIAL_SUMMON
:
{
engineSound
->
play2D
(
"./sound/specialsummon.wav
"
);
strcpy
(
soundName
,
"specialsummon
"
);
break
;
break
;
}
}
case
SOUND_ACTIVATE
:
{
case
SOUND_ACTIVATE
:
{
engineSound
->
play2D
(
"./sound/activate.wav
"
);
strcpy
(
soundName
,
"activate
"
);
break
;
break
;
}
}
case
SOUND_SET
:
{
case
SOUND_SET
:
{
engineSound
->
play2D
(
"./sound/set.wav
"
);
strcpy
(
soundName
,
"set
"
);
break
;
break
;
}
}
case
SOUND_FILP
:
{
case
SOUND_FILP
:
{
engineSound
->
play2D
(
"./sound/flip.wav
"
);
strcpy
(
soundName
,
"flip
"
);
break
;
break
;
}
}
case
SOUND_REVEAL
:
{
case
SOUND_REVEAL
:
{
engineSound
->
play2D
(
"./sound/reveal.wav
"
);
strcpy
(
soundName
,
"reveal
"
);
break
;
break
;
}
}
case
SOUND_EQUIP
:
{
case
SOUND_EQUIP
:
{
engineSound
->
play2D
(
"./sound/equip.wav
"
);
strcpy
(
soundName
,
"equip
"
);
break
;
break
;
}
}
case
SOUND_DESTROYED
:
{
case
SOUND_DESTROYED
:
{
engineSound
->
play2D
(
"./sound/destroyed.wav
"
);
strcpy
(
soundName
,
"destroyed
"
);
break
;
break
;
}
}
case
SOUND_BANISHED
:
{
case
SOUND_BANISHED
:
{
engineSound
->
play2D
(
"./sound/banished.wav
"
);
strcpy
(
soundName
,
"banished
"
);
break
;
break
;
}
}
case
SOUND_TOKEN
:
{
case
SOUND_TOKEN
:
{
engineSound
->
play2D
(
"./sound/token.wav
"
);
strcpy
(
soundName
,
"token
"
);
break
;
break
;
}
}
case
SOUND_NEGATE
:
{
case
SOUND_NEGATE
:
{
engineSound
->
play2D
(
"./sound/negate.wav
"
);
strcpy
(
soundName
,
"negate
"
);
break
;
break
;
}
}
case
SOUND_ATTACK
:
{
case
SOUND_ATTACK
:
{
engineSound
->
play2D
(
"./sound/attack.wav
"
);
strcpy
(
soundName
,
"attack
"
);
break
;
break
;
}
}
case
SOUND_DIRECT_ATTACK
:
{
case
SOUND_DIRECT_ATTACK
:
{
engineSound
->
play2D
(
"./sound/directattack.wav
"
);
strcpy
(
soundName
,
"directattack
"
);
break
;
break
;
}
}
case
SOUND_DRAW
:
{
case
SOUND_DRAW
:
{
engineSound
->
play2D
(
"./sound/draw.wav
"
);
strcpy
(
soundName
,
"draw
"
);
break
;
break
;
}
}
case
SOUND_SHUFFLE
:
{
case
SOUND_SHUFFLE
:
{
engineSound
->
play2D
(
"./sound/shuffle.wav
"
);
strcpy
(
soundName
,
"shuffle
"
);
break
;
break
;
}
}
case
SOUND_DAMAGE
:
{
case
SOUND_DAMAGE
:
{
engineSound
->
play2D
(
"./sound/damage.wav
"
);
strcpy
(
soundName
,
"damage
"
);
break
;
break
;
}
}
case
SOUND_RECOVER
:
{
case
SOUND_RECOVER
:
{
engineSound
->
play2D
(
"./sound/gainlp.wav
"
);
strcpy
(
soundName
,
"recover
"
);
break
;
break
;
}
}
case
SOUND_COUNTER_ADD
:
{
case
SOUND_COUNTER_ADD
:
{
engineSound
->
play2D
(
"./sound/addcounter.wav
"
);
strcpy
(
soundName
,
"addcounter
"
);
break
;
break
;
}
}
case
SOUND_COUNTER_REMOVE
:
{
case
SOUND_COUNTER_REMOVE
:
{
engineSound
->
play2D
(
"./sound/removecounter.wav
"
);
strcpy
(
soundName
,
"removecounter
"
);
break
;
break
;
}
}
case
SOUND_COIN
:
{
case
SOUND_COIN
:
{
engineSound
->
play2D
(
"./sound/coinflip.wav
"
);
strcpy
(
soundName
,
"coin
"
);
break
;
break
;
}
}
case
SOUND_DICE
:
{
case
SOUND_DICE
:
{
engineSound
->
play2D
(
"./sound/diceroll.wav
"
);
strcpy
(
soundName
,
"dice
"
);
break
;
break
;
}
}
case
SOUND_NEXT_TURN
:
{
case
SOUND_NEXT_TURN
:
{
engineSound
->
play2D
(
"./sound/nextturn.wav
"
);
strcpy
(
soundName
,
"nextturn
"
);
break
;
break
;
}
}
case
SOUND_PHASE
:
{
case
SOUND_PHASE
:
{
engineSound
->
play2D
(
"./sound/phase.wav
"
);
strcpy
(
soundName
,
"phase
"
);
break
;
break
;
}
}
case
SOUND_MENU
:
{
case
SOUND_MENU
:
{
engineSound
->
play2D
(
"./sound/menu.wav
"
);
strcpy
(
soundName
,
"menu
"
);
break
;
break
;
}
}
case
SOUND_BUTTON
:
{
case
SOUND_BUTTON
:
{
engineSound
->
play2D
(
"./sound/button.wav
"
);
strcpy
(
soundName
,
"button
"
);
break
;
break
;
}
}
case
SOUND_INFO
:
{
case
SOUND_INFO
:
{
engineSound
->
play2D
(
"./sound/info.wav
"
);
strcpy
(
soundName
,
"info
"
);
break
;
break
;
}
}
case
SOUND_QUESTION
:
{
case
SOUND_QUESTION
:
{
engineSound
->
play2D
(
"./sound/question.wav
"
);
strcpy
(
soundName
,
"question
"
);
break
;
break
;
}
}
case
SOUND_CARD_PICK
:
{
case
SOUND_CARD_PICK
:
{
engineSound
->
play2D
(
"./sound/cardpick.wav
"
);
strcpy
(
soundName
,
"cardpick
"
);
break
;
break
;
}
}
case
SOUND_CARD_DROP
:
{
case
SOUND_CARD_DROP
:
{
engineSound
->
play2D
(
"./sound/carddrop.wav
"
);
strcpy
(
soundName
,
"carddrop
"
);
break
;
break
;
}
}
case
SOUND_PLAYER_ENTER
:
{
case
SOUND_PLAYER_ENTER
:
{
engineSound
->
play2D
(
"./sound/playerenter.wav
"
);
strcpy
(
soundName
,
"playerenter
"
);
break
;
break
;
}
}
case
SOUND_CHAT
:
{
case
SOUND_CHAT
:
{
engineSound
->
play2D
(
"./sound/chatmessage.wav
"
);
strcpy
(
soundName
,
"chat
"
);
break
;
break
;
}
}
default:
default:
break
;
break
;
}
}
char
soundPath
[
40
];
snprintf
(
soundPath
,
40
,
"./sound/%s.wav"
,
soundName
);
#ifdef YGOPRO_USE_AUDIO
ma_engine_set_volume
(
&
engineSound
,
mainGame
->
gameConf
.
sound_volume
);
auto
res
=
ma_engine_play_sound
(
&
engineSound
,
soundPath
,
nullptr
);
#endif
#endif
}
}
void
SoundManager
::
PlayDialogSound
(
irr
::
gui
::
IGUIElement
*
element
)
{
void
SoundManager
::
PlayDialogSound
(
irr
::
gui
::
IGUIElement
*
element
)
{
...
@@ -208,25 +205,39 @@ void SoundManager::PlayDialogSound(irr::gui::IGUIElement * element) {
...
@@ -208,25 +205,39 @@ void SoundManager::PlayDialogSound(irr::gui::IGUIElement * element) {
PlaySoundEffect
(
SOUND_QUESTION
);
PlaySoundEffect
(
SOUND_QUESTION
);
}
}
}
}
bool
SoundManager
::
IsCurrentlyPlaying
(
char
*
song
)
{
#ifdef YGOPRO_USE_AUDIO
return
currentPlayingMusic
[
0
]
&&
strcmp
(
currentPlayingMusic
,
song
)
==
0
&&
ma_sound_is_playing
(
&
soundBGM
);
#endif
return
false
;
}
void
SoundManager
::
PlayMusic
(
char
*
song
,
bool
loop
)
{
void
SoundManager
::
PlayMusic
(
char
*
song
,
bool
loop
)
{
#ifdef YGOPRO_USE_
IRRKLANG
#ifdef YGOPRO_USE_
AUDIO
if
(
!
mainGame
->
chkEnableMusic
->
isChecked
())
if
(
!
mainGame
->
chkEnableMusic
->
isChecked
())
return
;
return
;
if
(
!
engineMusic
->
isCurrentlyPlaying
(
song
))
{
if
(
!
IsCurrentlyPlaying
(
song
))
{
engineMusic
->
stopAllSounds
();
StopBGM
();
engineMusic
->
setSoundVolume
(
mainGame
->
gameConf
.
music_volume
);
strcpy
(
currentPlayingMusic
,
song
);
soundBGM
=
engineMusic
->
play2D
(
song
,
loop
,
false
,
true
);
#ifdef _WIN32
wchar_t
song_w
[
1024
];
BufferIO
::
DecodeUTF8
(
song
,
song_w
);
ma_sound_init_from_file_w
(
&
engineMusic
,
song_w
,
MA_SOUND_FLAG_ASYNC
|
MA_SOUND_FLAG_STREAM
,
nullptr
,
nullptr
,
&
soundBGM
);
#else
ma_sound_init_from_file
(
&
engineMusic
,
song
,
MA_SOUND_FLAG_ASYNC
|
MA_SOUND_FLAG_STREAM
,
nullptr
,
nullptr
,
&
soundBGM
);
#endif
ma_sound_set_looping
(
&
soundBGM
,
loop
);
ma_sound_start
(
&
soundBGM
);
}
}
#endif
#endif
}
}
void
SoundManager
::
PlayBGM
(
int
scene
)
{
void
SoundManager
::
PlayBGM
(
int
scene
)
{
#ifdef YGOPRO_USE_
IRRKLANG
#ifdef YGOPRO_USE_
AUDIO
if
(
!
mainGame
->
chkEnableMusic
->
isChecked
()
||
bgm_process
)
if
(
!
mainGame
->
chkEnableMusic
->
isChecked
()
||
bgm_process
)
return
;
return
;
if
(
!
mainGame
->
chkMusicMode
->
isChecked
())
if
(
!
mainGame
->
chkMusicMode
->
isChecked
())
scene
=
BGM_ALL
;
scene
=
BGM_ALL
;
char
BGMName
[
1024
];
char
BGMName
[
1024
];
if
((
(
scene
!=
bgm_scene
)
&&
(
bgm_scene
!=
BGM_CUSTOM
))
||
((
scene
!=
previous_bgm_scene
)
&&
(
bgm_scene
==
BGM_CUSTOM
))
||
(
soundBGM
&&
soundBGM
->
isFinished
()
))
{
if
((
scene
!=
bgm_scene
)
&&
(
bgm_scene
!=
BGM_CUSTOM
)
||
(
scene
!=
previous_bgm_scene
)
&&
(
bgm_scene
==
BGM_CUSTOM
)
||
!
IsCurrentlyPlaying
(
currentPlayingMusic
))
{
int
count
=
BGMList
[
scene
].
size
();
int
count
=
BGMList
[
scene
].
size
();
if
(
count
<=
0
)
if
(
count
<=
0
)
return
;
return
;
...
@@ -241,10 +252,8 @@ void SoundManager::PlayBGM(int scene) {
...
@@ -241,10 +252,8 @@ void SoundManager::PlayBGM(int scene) {
#endif
#endif
}
}
void
SoundManager
::
PlayCustomBGM
(
char
*
BGMName
)
{
void
SoundManager
::
PlayCustomBGM
(
char
*
BGMName
)
{
#ifdef YGOPRO_USE_IRRKLANG
#ifdef YGOPRO_USE_AUDIO
if
(
!
mainGame
->
chkEnableMusic
->
isChecked
()
||
!
mainGame
->
chkMusicMode
->
isChecked
()
||
bgm_process
)
if
(
!
mainGame
->
chkEnableMusic
->
isChecked
()
||
!
mainGame
->
chkMusicMode
->
isChecked
()
||
bgm_process
||
IsCurrentlyPlaying
(
BGMName
))
return
;
if
(
engineMusic
->
isCurrentlyPlaying
(
BGMName
))
return
;
return
;
bgm_process
=
true
;
bgm_process
=
true
;
int
pscene
=
bgm_scene
;
int
pscene
=
bgm_scene
;
...
@@ -256,31 +265,32 @@ void SoundManager::PlayCustomBGM(char* BGMName) {
...
@@ -256,31 +265,32 @@ void SoundManager::PlayCustomBGM(char* BGMName) {
#endif
#endif
}
}
void
SoundManager
::
PlayCustomSound
(
char
*
SoundName
)
{
void
SoundManager
::
PlayCustomSound
(
char
*
SoundName
)
{
#ifdef YGOPRO_USE_
IRRKLANG
#ifdef YGOPRO_USE_
AUDIO
if
(
!
mainGame
->
chkEnableSound
->
isChecked
())
if
(
!
mainGame
->
chkEnableSound
->
isChecked
())
return
;
return
;
engineSound
->
setSoundVolume
(
mainGame
->
gameConf
.
sound_volume
);
ma_engine_set_volume
(
&
engineSound
,
mainGame
->
gameConf
.
sound_volume
);
engineSound
->
play2D
(
SoundName
);
ma_engine_play_sound
(
&
engineSound
,
SoundName
,
nullptr
);
#endif
#endif
}
}
void
SoundManager
::
StopBGM
()
{
void
SoundManager
::
StopBGM
()
{
#ifdef YGOPRO_USE_IRRKLANG
#ifdef YGOPRO_USE_AUDIO
engineMusic
->
stopAllSounds
();
if
(
!
currentPlayingMusic
[
0
])
return
;
memset
(
currentPlayingMusic
,
0
,
sizeof
(
currentPlayingMusic
));
ma_sound_uninit
(
&
soundBGM
);
#endif
#endif
}
}
void
SoundManager
::
StopSound
()
{
void
SoundManager
::
StopSound
()
{
#ifdef YGOPRO_USE_IRRKLANG
// TODO: stop all sounds
engineSound
->
stopAllSounds
();
#endif
}
}
void
SoundManager
::
SetSoundVolume
(
double
volume
)
{
void
SoundManager
::
SetSoundVolume
(
double
volume
)
{
#ifdef YGOPRO_USE_
IRRKLANG
#ifdef YGOPRO_USE_
AUDIO
engineSound
->
setSoundVolume
(
volume
);
ma_engine_set_volume
(
&
engineSound
,
volume
);
#endif
#endif
}
}
void
SoundManager
::
SetMusicVolume
(
double
volume
)
{
void
SoundManager
::
SetMusicVolume
(
double
volume
)
{
#ifdef YGOPRO_USE_
IRRKLANG
#ifdef YGOPRO_USE_
AUDIO
engineMusic
->
setSoundVolume
(
volume
);
ma_engine_set_volume
(
&
engineMusic
,
volume
);
#endif
#endif
}
}
}
}
gframe/sound_manager.h
View file @
e4081e20
...
@@ -3,8 +3,9 @@
...
@@ -3,8 +3,9 @@
#include "game.h"
#include "game.h"
#include "../ocgcore/mtrandom.h"
#include "../ocgcore/mtrandom.h"
#ifdef YGOPRO_USE_IRRKLANG
#ifdef YGOPRO_USE_AUDIO
#include <irrKlang.h>
#define MINIAUDIO_IMPLEMENTATION
#include "miniaudio/miniaudio.h"
#endif
#endif
namespace
ygo
{
namespace
ygo
{
...
@@ -16,10 +17,11 @@ private:
...
@@ -16,10 +17,11 @@ private:
int
previous_bgm_scene
;
int
previous_bgm_scene
;
bool
bgm_process
;
bool
bgm_process
;
mt19937
rnd
;
mt19937
rnd
;
#ifdef YGOPRO_USE_IRRKLANG
#ifdef YGOPRO_USE_AUDIO
irrklang
::
ISoundEngine
*
engineSound
;
ma_engine
engineSound
;
irrklang
::
ISoundEngine
*
engineMusic
;
ma_engine
engineMusic
;
irrklang
::
ISound
*
soundBGM
;
ma_sound
soundBGM
;
char
currentPlayingMusic
[
1024
]{};
#endif
#endif
void
RefershBGMDir
(
std
::
wstring
path
,
int
scene
);
void
RefershBGMDir
(
std
::
wstring
path
,
int
scene
);
...
@@ -28,6 +30,7 @@ public:
...
@@ -28,6 +30,7 @@ public:
void
RefreshBGMList
();
void
RefreshBGMList
();
void
PlaySoundEffect
(
int
sound
);
void
PlaySoundEffect
(
int
sound
);
void
PlayDialogSound
(
irr
::
gui
::
IGUIElement
*
element
);
void
PlayDialogSound
(
irr
::
gui
::
IGUIElement
*
element
);
bool
IsCurrentlyPlaying
(
char
*
song
);
void
PlayMusic
(
char
*
song
,
bool
loop
);
void
PlayMusic
(
char
*
song
,
bool
loop
);
void
PlayBGM
(
int
scene
);
void
PlayBGM
(
int
scene
);
void
PlayCustomBGM
(
char
*
BGMName
);
void
PlayCustomBGM
(
char
*
BGMName
);
...
...
premake5.lua
View file @
e4081e20
...
@@ -5,8 +5,6 @@ BUILD_EVENT = os.istarget("windows")
...
@@ -5,8 +5,6 @@ BUILD_EVENT = os.istarget("windows")
BUILD_FREETYPE
=
os
.
istarget
(
"windows"
)
BUILD_FREETYPE
=
os
.
istarget
(
"windows"
)
BUILD_SQLITE
=
os
.
istarget
(
"windows"
)
BUILD_SQLITE
=
os
.
istarget
(
"windows"
)
BUILD_IRRLICHT
=
not
os
.
istarget
(
"macosx"
)
BUILD_IRRLICHT
=
not
os
.
istarget
(
"macosx"
)
USE_IRRKLANG
=
true
IRRKLANG_PRO
=
false
LUA_LIB_NAME
=
"lua"
LUA_LIB_NAME
=
"lua"
-- read settings from command line or environment variables
-- read settings from command line or environment variables
...
@@ -38,11 +36,6 @@ newoption { trigger = "no-build-irrlicht", category = "YGOPro - irrlicht", descr
...
@@ -38,11 +36,6 @@ newoption { trigger = "no-build-irrlicht", category = "YGOPro - irrlicht", descr
newoption
{
trigger
=
"irrlicht-include-dir"
,
category
=
"YGOPro - irrlicht"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"irrlicht-include-dir"
,
category
=
"YGOPro - irrlicht"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"irrlicht-lib-dir"
,
category
=
"YGOPro - irrlicht"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"irrlicht-lib-dir"
,
category
=
"YGOPro - irrlicht"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"use-irrklang"
,
category
=
"YGOPro - irrklang"
,
description
=
""
}
newoption
{
trigger
=
"no-use-irrklang"
,
category
=
"YGOPro - irrklang"
,
description
=
""
}
newoption
{
trigger
=
"irrklang-include-dir"
,
category
=
"YGOPro - irrklang"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"irrklang-lib-dir"
,
category
=
"YGOPro - irrklang"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"irrklang-pro"
,
category
=
"YGOPro - irrklang - pro"
,
description
=
""
}
newoption
{
trigger
=
"irrklang-pro"
,
category
=
"YGOPro - irrklang - pro"
,
description
=
""
}
newoption
{
trigger
=
"no-irrklang-pro"
,
category
=
"YGOPro - irrklang - pro"
,
description
=
""
}
newoption
{
trigger
=
"no-irrklang-pro"
,
category
=
"YGOPro - irrklang - pro"
,
description
=
""
}
newoption
{
trigger
=
"irrklang-pro-release-lib-dir"
,
category
=
"YGOPro - irrklang - pro"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"irrklang-pro-release-lib-dir"
,
category
=
"YGOPro - irrklang - pro"
,
description
=
""
,
value
=
"PATH"
}
...
@@ -161,36 +154,7 @@ if not BUILD_IRRLICHT then
...
@@ -161,36 +154,7 @@ if not BUILD_IRRLICHT then
IRRLICHT_LIB_DIR
=
GetParam
(
"irrlicht-lib-dir"
)
or
"/usr/local/lib"
IRRLICHT_LIB_DIR
=
GetParam
(
"irrlicht-lib-dir"
)
or
"/usr/local/lib"
end
end
if
GetParam
(
"use-irrklang"
)
then
USE_AUDIO
=
not
GetParam
(
"no-audio"
)
USE_IRRKLANG
=
true
elseif
GetParam
(
"no-use-irrklang"
)
then
USE_IRRKLANG
=
false
end
if
USE_IRRKLANG
then
IRRKLANG_INCLUDE_DIR
=
GetParam
(
"irrklang-include-dir"
)
or
"../irrklang/include"
if
os
.
istarget
(
"windows"
)
then
IRRKLANG_LIB_DIR
=
"../irrklang/lib/Win32-visualStudio"
elseif
os
.
istarget
(
"linux"
)
then
IRRKLANG_LIB_DIR
=
"../irrklang/bin/linux-gcc-64"
IRRKLANG_LINK_RPATH
=
"-Wl,-rpath=./lib/"
elseif
os
.
istarget
(
"macosx"
)
then
IRRKLANG_LIB_DIR
=
"../irrklang/bin/macosx-gcc"
end
IRRKLANG_LIB_DIR
=
GetParam
(
"irrklang-lib-dir"
)
or
IRRKLANG_LIB_DIR
end
if
GetParam
(
"irrklang-pro"
)
and
os
.
istarget
(
"windows"
)
then
IRRKLANG_PRO
=
true
elseif
GetParam
(
"no-irrklang-pro"
)
then
IRRKLANG_PRO
=
false
end
if
IRRKLANG_PRO
then
-- irrklang pro can't use the pro lib to debug
IRRKLANG_PRO_RELEASE_LIB_DIR
=
GetParam
(
"irrklang-pro-release-lib-dir"
)
or
"../irrklang/lib/Win32-vs2019"
IRRKLANG_PRO_DEBUG_LIB_DIR
=
GetParam
(
"irrklang-pro-debug-lib-dir"
)
or
"../irrklang/lib/Win32-visualStudio-debug"
end
BUILD_IKPMP3
=
USE_IRRKLANG
if
GetParam
(
"winxp-support"
)
and
os
.
istarget
(
"windows"
)
then
if
GetParam
(
"winxp-support"
)
and
os
.
istarget
(
"windows"
)
then
WINXP_SUPPORT
=
true
WINXP_SUPPORT
=
true
...
@@ -293,6 +257,6 @@ workspace "YGOPro"
...
@@ -293,6 +257,6 @@ workspace "YGOPro"
if
BUILD_SQLITE
then
if
BUILD_SQLITE
then
include
"sqlite3"
include
"sqlite3"
end
end
if
BUILD_IKPMP3
then
--
if BUILD_IKPMP3 then
include
"ikpmp3"
--
include "ikpmp3"
end
--
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment