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-520DIY
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
Show 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