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
bfcb4afc
Commit
bfcb4afc
authored
May 09, 2025
by
nanahira
Committed by
GitHub
May 09, 2025
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add miniaudio (#2727)
parent
0b36a716
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
522 additions
and
111 deletions
+522
-111
.github/workflows/build.yml
.github/workflows/build.yml
+107
-15
.gitignore
.gitignore
+1
-0
gframe/duelclient.cpp
gframe/duelclient.cpp
+1
-0
gframe/game.cpp
gframe/game.cpp
+2
-2
gframe/premake5.lua
gframe/premake5.lua
+28
-13
gframe/sound_manager.cpp
gframe/sound_manager.cpp
+135
-46
gframe/sound_manager.h
gframe/sound_manager.h
+18
-2
premake/miniaudio/premake5.lua
premake/miniaudio/premake5.lua
+131
-0
premake5.lua
premake5.lua
+98
-33
sound/files.txt
sound/files.txt
+1
-0
No files found.
.github/workflows/build.yml
View file @
bfcb4afc
...
@@ -12,6 +12,7 @@ jobs:
...
@@ -12,6 +12,7 @@ jobs:
fail-fast
:
false
fail-fast
:
false
matrix
:
matrix
:
os
:
[
windows-2019
,
windows-2022
]
os
:
[
windows-2019
,
windows-2022
]
audiolib
:
[
miniaudio
,
irrklang
]
runs-on
:
${{ matrix.os }}
runs-on
:
${{ matrix.os }}
...
@@ -90,13 +91,75 @@ jobs:
...
@@ -90,13 +91,75 @@ jobs:
7z x ${{ steps.sqlite.outputs.filepath }}
7z x ${{ steps.sqlite.outputs.filepath }}
move sqlite-amalgamation-3490100 sqlite3
move sqlite-amalgamation-3490100 sqlite3
-
name
:
Download miniaudio
if
:
matrix.audiolib == 'miniaudio'
run
:
|
git clone --depth=1 --branch 0.11.22 https://github.com/mackron/miniaudio
cd miniaudio
xcopy /Y extras\miniaudio_split\miniaudio.* .
cd ..
-
name
:
Download ogg
if
:
matrix.audiolib == 'miniaudio'
id
:
ogg
uses
:
mercury233/action-cache-download-file@v1.0.0
with
:
url
:
https://github.com/xiph/ogg/releases/download/v1.3.5/libogg-1.3.5.tar.gz
-
name
:
Extract ogg
if
:
matrix.audiolib == 'miniaudio'
run
:
|
tar xf ${{ steps.ogg.outputs.filepath }}
move libogg-1.3.5 miniaudio/external/ogg
-
name
:
Download opus
if
:
matrix.audiolib == 'miniaudio'
id
:
opus
uses
:
mercury233/action-cache-download-file@v1.0.0
with
:
url
:
https://github.com/xiph/opus/releases/download/v1.5.2/opus-1.5.2.tar.gz
-
name
:
Extract opus
if
:
matrix.audiolib == 'miniaudio'
run
:
|
tar xf ${{ steps.opus.outputs.filepath }}
move opus-1.5.2 miniaudio/external/opus
-
name
:
Download opusfile
if
:
matrix.audiolib == 'miniaudio'
id
:
opusfile
uses
:
mercury233/action-cache-download-file@v1.0.0
with
:
url
:
https://github.com/xiph/opusfile/releases/download/v0.12/opusfile-0.12.tar.gz
-
name
:
Extract opusfile
if
:
matrix.audiolib == 'miniaudio'
run
:
|
tar xf ${{ steps.opusfile.outputs.filepath }}
move opusfile-0.12 miniaudio/external/opusfile
-
name
:
Download vorbis
if
:
matrix.audiolib == 'miniaudio'
id
:
vorbis
uses
:
mercury233/action-cache-download-file@v1.0.0
with
:
url
:
https://github.com/xiph/vorbis/releases/download/v1.3.7/libvorbis-1.3.7.tar.gz
-
name
:
Extract vorbis
if
:
matrix.audiolib == 'miniaudio'
run
:
|
tar xf ${{ steps.vorbis.outputs.filepath }}
move libvorbis-1.3.7 miniaudio/external/vorbis
-
name
:
Download irrKlang
-
name
:
Download irrKlang
if
:
matrix.audiolib == 'irrklang'
id
:
irrKlang
id
:
irrKlang
uses
:
mercury233/action-cache-download-file@v1.0.0
uses
:
mercury233/action-cache-download-file@v1.0.0
with
:
with
:
url
:
https://www.ambiera.at/downloads/irrKlang-32bit-1.6.0.zip
url
:
https://www.ambiera.at/downloads/irrKlang-32bit-1.6.0.zip
-
name
:
Extract irrKlang
-
name
:
Extract irrKlang
if
:
matrix.audiolib == 'irrklang'
run
:
|
run
:
|
7z x ${{ steps.irrKlang.outputs.filepath }}
7z x ${{ steps.irrKlang.outputs.filepath }}
move irrKlang-1.6.0 irrKlang
move irrKlang-1.6.0 irrKlang
...
@@ -134,16 +197,26 @@ jobs:
...
@@ -134,16 +197,26 @@ jobs:
xcopy /E premake\* .
xcopy /E premake\* .
xcopy /E resource\* .
xcopy /E resource\* .
-
name
:
Use premake to generate Visual Studio solution (2019)
-
name
:
Use premake to generate Visual Studio solution (2019
, miniaudio
)
if
:
matrix.os == 'windows-2019'
if
:
matrix.os == 'windows-2019'
&& matrix.audiolib == 'miniaudio'
run
:
|
run
:
|
.\premake5.exe vs2019 --winxp-support
.\premake5.exe vs2019 --winxp-support
-
name
:
Use premake to generate Visual Studio solution (2022)
-
name
:
Use premake to generate Visual Studio solution (2022
, miniaudio
)
if
:
matrix.os == 'windows-2022'
if
:
matrix.os == 'windows-2022'
&& matrix.audiolib == 'miniaudio'
run
:
|
run
:
|
.\premake5.exe vs2022
.\premake5.exe vs2022
-
name
:
Use premake to generate Visual Studio solution (2019, irrKlang)
if
:
matrix.os == 'windows-2019' && matrix.audiolib == 'irrklang'
run
:
|
.\premake5.exe vs2019 --winxp-support --audio-lib=irrklang
-
name
:
Use premake to generate Visual Studio solution (2022, irrKlang)
if
:
matrix.os == 'windows-2022' && matrix.audiolib == 'irrklang'
run
:
|
.\premake5.exe vs2022 --audio-lib=irrklang
-
name
:
Add msbuild to PATH
-
name
:
Add msbuild to PATH
uses
:
microsoft/setup-msbuild@v2
uses
:
microsoft/setup-msbuild@v2
...
@@ -154,7 +227,7 @@ jobs:
...
@@ -154,7 +227,7 @@ jobs:
-
name
:
Upload build artifacts
-
name
:
Upload build artifacts
uses
:
actions/upload-artifact@v4
uses
:
actions/upload-artifact@v4
with
:
with
:
name
:
YGOPro-${{ matrix.os }}
name
:
YGOPro-${{ matrix.os }}
-${{ matrix.audiolib }}
path
:
|
path
:
|
bin/release/YGOPro.exe
bin/release/YGOPro.exe
...
@@ -197,7 +270,7 @@ jobs:
...
@@ -197,7 +270,7 @@ jobs:
-
name
:
Install dependencies
-
name
:
Install dependencies
run
:
|
run
:
|
sudo apt-get update
sudo apt-get update
sudo apt-get install -y libevent-dev libfreetype6-dev libgl1-mesa-dev libglu1-mesa-dev libsqlite3-dev libxxf86vm-dev
sudo apt-get install -y libevent-dev libfreetype6-dev libgl1-mesa-dev libglu1-mesa-dev libsqlite3-dev libxxf86vm-dev
libopusfile-dev libvorbis-dev
-
name
:
Download premake
-
name
:
Download premake
id
:
premake
id
:
premake
...
@@ -222,6 +295,13 @@ jobs:
...
@@ -222,6 +295,13 @@ jobs:
tar xf ${{ steps.lua.outputs.filepath }}
tar xf ${{ steps.lua.outputs.filepath }}
mv lua-5.4.7 lua
mv lua-5.4.7 lua
-
name
:
Download miniaudio
run
:
|
git clone --depth=1 --branch 0.11.22 https://github.com/mackron/miniaudio
cd miniaudio
cp extras/miniaudio_split/miniaudio.* .
cd ..
-
name
:
Download irrlicht
-
name
:
Download irrlicht
run
:
|
run
:
|
git clone --depth=1 https://github.com/mercury233/irrlicht
git clone --depth=1 https://github.com/mercury233/irrlicht
...
@@ -234,8 +314,8 @@ jobs:
...
@@ -234,8 +314,8 @@ jobs:
-
name
:
Use premake to generate make files
-
name
:
Use premake to generate make files
run
:
|
run
:
|
./premake5 gmake \
./premake5 gmake \
--
no-use-irrklang
\
--
freetype-include-dir="/usr/include/freetype2"
\
--
freetype-include-dir="/usr/include/freetype2
"
--
opus-include-dir="/usr/include/opus
"
-
name
:
Make
-
name
:
Make
run
:
|
run
:
|
...
@@ -283,9 +363,9 @@ jobs:
...
@@ -283,9 +363,9 @@ jobs:
# git pull origin master
# git pull origin master
# cd ..
# cd ..
#
- name: Install dependencies
-
name
:
Install dependencies
#
run: |
run
:
|
# brew install freetype libevent libx11 sqlite zlib
brew install freetype libevent libx11 sqlite opus opusfile libvorbis
-
name
:
Download premake
-
name
:
Download premake
id
:
premake
id
:
premake
...
@@ -310,6 +390,13 @@ jobs:
...
@@ -310,6 +390,13 @@ jobs:
tar xf ${{ steps.lua.outputs.filepath }}
tar xf ${{ steps.lua.outputs.filepath }}
mv lua-5.4.7 lua
mv lua-5.4.7 lua
-
name
:
Download miniaudio
run
:
|
git clone --depth=1 --branch 0.11.22 https://github.com/mackron/miniaudio
cd miniaudio
cp extras/miniaudio_split/miniaudio.* .
cd ..
-
name
:
Download irrlicht
-
name
:
Download irrlicht
run
:
|
run
:
|
git clone --depth=1 https://github.com/mercury233/irrlicht
git clone --depth=1 https://github.com/mercury233/irrlicht
...
@@ -324,21 +411,26 @@ jobs:
...
@@ -324,21 +411,26 @@ jobs:
run
:
|
run
:
|
./premake5 gmake \
./premake5 gmake \
--cc=clang \
--cc=clang \
--
no-use-irrklang
\
--
freetype-include-dir="/usr/local/include/freetype2"
\
--
freetype-include-dir="/usr/local/include/freetype2
"
--
opus-include-dir="/usr/local/include/opus
"
-
name
:
Use premake to generate make files (ARM64)
-
name
:
Use premake to generate make files (ARM64)
if
:
runner.arch == 'ARM64'
if
:
runner.arch == 'ARM64'
run
:
|
run
:
|
./premake5 gmake \
./premake5 gmake \
--cc=clang \
--cc=clang \
--no-use-irrklang \
--event-include-dir="/opt/homebrew/include" \
--event-include-dir="/opt/homebrew/include" \
--event-lib-dir="/opt/homebrew/lib" \
--event-lib-dir="/opt/homebrew/lib" \
--freetype-include-dir="/opt/homebrew/include/freetype2" \
--freetype-include-dir="/opt/homebrew/include/freetype2" \
--freetype-lib-dir="/opt/homebrew/lib" \
--freetype-lib-dir="/opt/homebrew/lib" \
--sqlite-include-dir="/opt/homebrew/opt/sqlite/include" \
--sqlite-include-dir="/opt/homebrew/opt/sqlite/include" \
--sqlite-lib-dir="/opt/homebrew/opt/sqlite/lib"
--sqlite-lib-dir="/opt/homebrew/opt/sqlite/lib" \
--miniaudio-include-dir="/opt/homebrew/include" \
--miniaudio-lib-dir="/opt/homebrew/lib" \
--opus-include-dir="/opt/homebrew/include/opus" \
--opus-lib-dir="/opt/homebrew/lib" \
--vorbis-include-dir="/opt/homebrew/include" \
--vorbis-lib-dir="/opt/homebrew/lib"
-
name
:
Make
-
name
:
Make
run
:
|
run
:
|
...
...
.gitignore
View file @
bfcb4afc
...
@@ -32,6 +32,7 @@
...
@@ -32,6 +32,7 @@
/irrklang
/irrklang
/ikpmp3
/ikpmp3
/lua
/lua
/miniaudio
/sqlite3
/sqlite3
/gframe/*.ico
/gframe/*.ico
/gframe/ygopro.rc
/gframe/ygopro.rc
...
...
gframe/duelclient.cpp
View file @
bfcb4afc
...
@@ -3034,6 +3034,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
...
@@ -3034,6 +3034,7 @@ bool DuelClient::ClientAnalyze(unsigned char* msg, int len) {
case
MSG_CHAIN_DISABLED
:
{
case
MSG_CHAIN_DISABLED
:
{
int
ct
=
BufferIO
::
ReadUInt8
(
pbuf
);
int
ct
=
BufferIO
::
ReadUInt8
(
pbuf
);
if
(
!
mainGame
->
dInfo
.
isReplay
||
!
mainGame
->
dInfo
.
isReplaySkiping
)
{
if
(
!
mainGame
->
dInfo
.
isReplay
||
!
mainGame
->
dInfo
.
isReplaySkiping
)
{
soundManager
.
PlaySoundEffect
(
SOUND_NEGATE
);
mainGame
->
showcardcode
=
mainGame
->
dField
.
chains
[
ct
-
1
].
code
;
mainGame
->
showcardcode
=
mainGame
->
dField
.
chains
[
ct
-
1
].
code
;
mainGame
->
showcarddif
=
0
;
mainGame
->
showcarddif
=
0
;
mainGame
->
showcard
=
3
;
mainGame
->
showcard
=
3
;
...
...
gframe/game.cpp
View file @
bfcb4afc
...
@@ -1411,7 +1411,7 @@ void Game::LoadConfig() {
...
@@ -1411,7 +1411,7 @@ void Game::LoadConfig() {
gameConf
.
window_height
=
std
::
strtol
(
valbuf
,
nullptr
,
10
);
gameConf
.
window_height
=
std
::
strtol
(
valbuf
,
nullptr
,
10
);
}
else
if
(
!
std
::
strcmp
(
strbuf
,
"resize_popup_menu"
))
{
}
else
if
(
!
std
::
strcmp
(
strbuf
,
"resize_popup_menu"
))
{
gameConf
.
resize_popup_menu
=
std
::
strtol
(
valbuf
,
nullptr
,
10
)
>
0
;
gameConf
.
resize_popup_menu
=
std
::
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
=
std
::
strtol
(
valbuf
,
nullptr
,
10
)
>
0
;
gameConf
.
enable_sound
=
std
::
strtol
(
valbuf
,
nullptr
,
10
)
>
0
;
}
else
if
(
!
std
::
strcmp
(
strbuf
,
"sound_volume"
))
{
}
else
if
(
!
std
::
strcmp
(
strbuf
,
"sound_volume"
))
{
...
@@ -1527,7 +1527,7 @@ void Game::SaveConfig() {
...
@@ -1527,7 +1527,7 @@ void Game::SaveConfig() {
std
::
fprintf
(
fp
,
"window_width = %d
\n
"
,
gameConf
.
window_width
);
std
::
fprintf
(
fp
,
"window_width = %d
\n
"
,
gameConf
.
window_width
);
std
::
fprintf
(
fp
,
"window_height = %d
\n
"
,
gameConf
.
window_height
);
std
::
fprintf
(
fp
,
"window_height = %d
\n
"
,
gameConf
.
window_height
);
std
::
fprintf
(
fp
,
"resize_popup_menu = %d
\n
"
,
gameConf
.
resize_popup_menu
?
1
:
0
);
std
::
fprintf
(
fp
,
"resize_popup_menu = %d
\n
"
,
gameConf
.
resize_popup_menu
?
1
:
0
);
#ifdef YGOPRO_USE_
IRRKLANG
#ifdef YGOPRO_USE_
AUDIO
std
::
fprintf
(
fp
,
"enable_sound = %d
\n
"
,
(
chkEnableSound
->
isChecked
()
?
1
:
0
));
std
::
fprintf
(
fp
,
"enable_sound = %d
\n
"
,
(
chkEnableSound
->
isChecked
()
?
1
:
0
));
std
::
fprintf
(
fp
,
"enable_music = %d
\n
"
,
(
chkEnableMusic
->
isChecked
()
?
1
:
0
));
std
::
fprintf
(
fp
,
"enable_music = %d
\n
"
,
(
chkEnableMusic
->
isChecked
()
?
1
:
0
));
std
::
fprintf
(
fp
,
"#Volume of sound and music, between 0 and 100
\n
"
);
std
::
fprintf
(
fp
,
"#Volume of sound and music, between 0 and 100
\n
"
);
...
...
gframe/premake5.lua
View file @
bfcb4afc
...
@@ -10,10 +10,6 @@ project "YGOPro"
...
@@ -10,10 +10,6 @@ project "YGOPro"
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_EVENT
then
if
BUILD_EVENT
then
includedirs
{
"../event/include"
}
includedirs
{
"../event/include"
}
else
else
...
@@ -42,18 +38,38 @@ project "YGOPro"
...
@@ -42,18 +38,38 @@ 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
}
if
AUDIO_LIB
==
"miniaudio"
then
if
not
IRRKLANG_PRO
then
defines
{
"YGOPRO_USE_MINIAUDIO"
}
libdirs
{
IRRKLANG_LIB_DIR
}
includedirs
{
"../miniaudio"
}
links
{
"miniaudio"
}
if
MINIAUDIO_SUPPORT_OPUS_VORBIS
then
defines
{
"YGOPRO_MINIAUDIO_SUPPORT_OPUS_VORBIS"
}
includedirs
{
"../miniaudio/extras/decoders/libopus"
,
"../miniaudio/extras/decoders/libvorbis"
}
if
not
MINIAUDIO_BUILD_OPUS_VORBIS
then
links
{
"opusfile"
,
"vorbisfile"
,
"opus"
,
"vorbis"
,
"ogg"
}
libdirs
{
OPUS_LIB_DIR
,
VORBIS_LIB_DIR
,
OGG_LIBDIR
}
end
end
end
if
AUDIO_LIB
==
"irrklang"
then
defines
{
"YGOPRO_USE_IRRKLANG"
}
includedirs
{
IRRKLANG_INCLUDE_DIR
}
if
not
IRRKLANG_PRO
then
libdirs
{
IRRKLANG_LIB_DIR
}
end
if
IRRKLANG_PRO_BUILD_IKPMP3
then
links
{
"ikpmp3"
}
end
end
end
end
end
filter
"system:windows"
filter
"system:windows"
defines
{
"_IRR_WCHAR_FILESYSTEM"
}
defines
{
"_IRR_WCHAR_FILESYSTEM"
}
files
"ygopro.rc"
files
"ygopro.rc"
if
USE_IRRKLANG
then
links
{
"opengl32"
,
"ws2_32"
,
"winmm"
,
"gdi32"
,
"kernel32"
,
"user32"
,
"imm32"
}
if
USE_AUDIO
and
AUDIO_LIB
==
"irrklang"
then
links
{
"irrKlang"
}
links
{
"irrKlang"
}
if
IRRKLANG_PRO
then
if
IRRKLANG_PRO
then
defines
{
"IRRKLANG_STATIC"
}
defines
{
"IRRKLANG_STATIC"
}
...
@@ -64,7 +80,6 @@ project "YGOPro"
...
@@ -64,7 +80,6 @@ project "YGOPro"
filter
{}
filter
{}
end
end
end
end
links
{
"opengl32"
,
"ws2_32"
,
"winmm"
,
"gdi32"
,
"kernel32"
,
"user32"
,
"imm32"
}
filter
"not system:windows"
filter
"not system:windows"
links
{
"event_pthreads"
,
"dl"
,
"pthread"
}
links
{
"event_pthreads"
,
"dl"
,
"pthread"
}
filter
"system:macosx"
filter
"system:macosx"
...
@@ -74,12 +89,12 @@ project "YGOPro"
...
@@ -74,12 +89,12 @@ project "YGOPro"
buildoptions
{
"--target=arm64-apple-macos12"
}
buildoptions
{
"--target=arm64-apple-macos12"
}
linkoptions
{
"-arch arm64"
}
linkoptions
{
"-arch arm64"
}
end
end
if
USE_
IRRKLANG
then
if
USE_
AUDIO
and
AUDIO_LIB
==
"irrklang"
then
links
{
"irrklang"
}
links
{
"irrklang"
}
end
end
filter
"system:linux"
filter
"system:linux"
links
{
"GL"
,
"X11"
,
"Xxf86vm"
}
links
{
"GL"
,
"X11"
,
"Xxf86vm"
}
if
USE_
IRRKLANG
then
if
USE_
AUDIO
and
AUDIO_LIB
==
"irrklang"
then
links
{
"IrrKlang"
}
links
{
"IrrKlang"
}
linkoptions
{
IRRKLANG_LINK_RPATH
}
linkoptions
{
IRRKLANG_LINK_RPATH
}
end
end
gframe/sound_manager.cpp
View file @
bfcb4afc
#include "sound_manager.h"
#include "sound_manager.h"
#include "myfilesystem.h"
#include "myfilesystem.h"
#if defined(YGOPRO_USE_MINIAUDIO) && defined(YGOPRO_MINIAUDIO_SUPPORT_OPUS_VORBIS)
#include <miniaudio_libopus.h>
#include <miniaudio_libvorbis.h>
#endif
#ifdef IRRKLANG_STATIC
#ifdef IRRKLANG_STATIC
#include "../ikpmp3/ikpMP3.h"
#include "../ikpmp3/ikpMP3.h"
#endif
#endif
...
@@ -9,10 +13,34 @@ namespace ygo {
...
@@ -9,10 +13,34 @@ 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
;
RefreshBGMList
();
RefreshBGMList
();
rnd
.
reset
((
unsigned
int
)
std
::
time
(
nullptr
));
rnd
.
reset
((
unsigned
int
)
std
::
time
(
nullptr
));
#ifdef YGOPRO_USE_MINIAUDIO
engineConfig
=
ma_engine_config_init
();
#ifdef YGOPRO_MINIAUDIO_SUPPORT_OPUS_VORBIS
ma_decoding_backend_vtable
*
pCustomBackendVTables
[]
=
{
ma_decoding_backend_libvorbis
,
ma_decoding_backend_libopus
};
resourceManagerConfig
=
ma_resource_manager_config_init
();
resourceManagerConfig
.
ppCustomDecodingBackendVTables
=
pCustomBackendVTables
;
resourceManagerConfig
.
customDecodingBackendCount
=
sizeof
(
pCustomBackendVTables
)
/
sizeof
(
pCustomBackendVTables
[
0
]);
resourceManagerConfig
.
pCustomDecodingBackendUserData
=
NULL
;
if
(
ma_resource_manager_init
(
&
resourceManagerConfig
,
&
resourceManager
)
!=
MA_SUCCESS
)
{
return
false
;
}
engineConfig
.
pResourceManager
=
&
resourceManager
;
#endif
if
(
ma_engine_init
(
&
engineConfig
,
&
engineSound
)
!=
MA_SUCCESS
||
ma_engine_init
(
&
engineConfig
,
&
engineMusic
)
!=
MA_SUCCESS
)
{
return
false
;
}
else
{
return
true
;
}
#endif // YGOPRO_USE_MINIAUDIO
#ifdef YGOPRO_USE_IRRKLANG
engineSound
=
irrklang
::
createIrrKlangDevice
();
engineSound
=
irrklang
::
createIrrKlangDevice
();
engineMusic
=
irrklang
::
createIrrKlangDevice
();
engineMusic
=
irrklang
::
createIrrKlangDevice
();
if
(
!
engineSound
||
!
engineMusic
)
{
if
(
!
engineSound
||
!
engineMusic
)
{
...
@@ -24,10 +52,11 @@ bool SoundManager::Init() {
...
@@ -24,10 +52,11 @@ bool SoundManager::Init() {
return
true
;
return
true
;
}
}
#endif // YGOPRO_USE_IRRKLANG
#endif // YGOPRO_USE_IRRKLANG
// TODO: Implement other sound engines
#endif // YGOPRO_USE_AUDIO
return
false
;
return
false
;
}
}
void
SoundManager
::
RefreshBGMList
()
{
void
SoundManager
::
RefreshBGMList
()
{
#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
);
...
@@ -36,11 +65,17 @@ void SoundManager::RefreshBGMList() {
...
@@ -36,11 +65,17 @@ void SoundManager::RefreshBGMList() {
RefershBGMDir
(
L"disadvantage"
,
BGM_DISADVANTAGE
);
RefershBGMDir
(
L"disadvantage"
,
BGM_DISADVANTAGE
);
RefershBGMDir
(
L"win"
,
BGM_WIN
);
RefershBGMDir
(
L"win"
,
BGM_WIN
);
RefershBGMDir
(
L"lose"
,
BGM_LOSE
);
RefershBGMDir
(
L"lose"
,
BGM_LOSE
);
#endif
}
}
void
SoundManager
::
RefershBGMDir
(
std
::
wstring
path
,
int
scene
)
{
void
SoundManager
::
RefershBGMDir
(
std
::
wstring
path
,
int
scene
)
{
std
::
wstring
search
=
L"./sound/BGM/"
+
path
;
std
::
wstring
search
=
L"./sound/BGM/"
+
path
;
FileSystem
::
TraversalDir
(
search
.
c_str
(),
[
this
,
&
path
,
scene
](
const
wchar_t
*
name
,
bool
isdir
)
{
FileSystem
::
TraversalDir
(
search
.
c_str
(),
[
this
,
&
path
,
scene
](
const
wchar_t
*
name
,
bool
isdir
)
{
if
(
!
isdir
&&
(
IsExtension
(
name
,
L".mp3"
)
||
IsExtension
(
name
,
L".ogg"
)))
{
if
(
!
isdir
&&
(
IsExtension
(
name
,
L".mp3"
)
#if defined(YGOPRO_MINIAUDIO_SUPPORT_OPUS_VORBIS) || defined(YGOPRO_USE_IRRKLANG)
||
IsExtension
(
name
,
L".ogg"
)
#endif
))
{
std
::
wstring
filename
=
path
+
L"/"
+
name
;
std
::
wstring
filename
=
path
+
L"/"
+
name
;
BGMList
[
BGM_ALL
].
push_back
(
filename
);
BGMList
[
BGM_ALL
].
push_back
(
filename
);
BGMList
[
scene
].
push_back
(
filename
);
BGMList
[
scene
].
push_back
(
filename
);
...
@@ -48,137 +83,151 @@ void SoundManager::RefershBGMDir(std::wstring path, int scene) {
...
@@ -48,137 +83,151 @@ void SoundManager::RefershBGMDir(std::wstring path, int scene) {
});
});
}
}
void
SoundManager
::
PlaySoundEffect
(
int
sound
)
{
void
SoundManager
::
PlaySoundEffect
(
int
sound
)
{
#ifdef YGOPRO_USE_
IRRKLANG
#ifdef YGOPRO_USE_
AUDIO
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
;
}
case
SOUND_NEGATE
:
{
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
,
"gainlp
"
);
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
,
"coinflip
"
);
break
;
break
;
}
}
case
SOUND_DICE
:
{
case
SOUND_DICE
:
{
engineSound
->
play2D
(
"./sound/diceroll.wav
"
);
strcpy
(
soundName
,
"diceroll
"
);
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
,
"chatmessage
"
);
break
;
break
;
}
}
default:
default:
break
;
break
;
}
}
char
soundPath
[
40
];
std
::
snprintf
(
soundPath
,
40
,
"./sound/%s.wav"
,
soundName
);
SetSoundVolume
(
mainGame
->
gameConf
.
sound_volume
);
#ifdef YGOPRO_USE_MINIAUDIO
ma_engine_play_sound
(
&
engineSound
,
soundPath
,
nullptr
);
#endif
#ifdef YGOPRO_USE_IRRKLANG
engineSound
->
play2D
(
soundPath
);
#endif
#endif
#endif // YGOPRO_USE_AUDIO
}
}
void
SoundManager
::
PlayDialogSound
(
irr
::
gui
::
IGUIElement
*
element
)
{
void
SoundManager
::
PlayDialogSound
(
irr
::
gui
::
IGUIElement
*
element
)
{
#ifdef YGOPRO_USE_AUDIO
if
(
element
==
mainGame
->
wMessage
)
{
if
(
element
==
mainGame
->
wMessage
)
{
PlaySoundEffect
(
SOUND_INFO
);
PlaySoundEffect
(
SOUND_INFO
);
}
else
if
(
element
==
mainGame
->
wQuery
)
{
}
else
if
(
element
==
mainGame
->
wQuery
)
{
...
@@ -200,50 +249,90 @@ void SoundManager::PlayDialogSound(irr::gui::IGUIElement * element) {
...
@@ -200,50 +249,90 @@ void SoundManager::PlayDialogSound(irr::gui::IGUIElement * element) {
}
else
if
(
element
==
mainGame
->
wFTSelect
)
{
}
else
if
(
element
==
mainGame
->
wFTSelect
)
{
PlaySoundEffect
(
SOUND_QUESTION
);
PlaySoundEffect
(
SOUND_QUESTION
);
}
}
#endif // YGOPRO_USE_AUDIO
}
}
void
SoundManager
::
PlayMusic
(
char
*
song
,
bool
loop
)
{
bool
SoundManager
::
IsPlayingMusic
(
wchar_t
*
music
)
{
#ifdef YGOPRO_USE_MINIAUDIO
if
(
music
)
{
return
!
mywcsncasecmp
(
currentPlayingMusic
,
music
,
1024
)
&&
ma_sound_is_playing
(
&
soundBGM
);
}
else
{
return
ma_sound_is_playing
(
&
soundBGM
);
}
#endif
#ifdef YGOPRO_USE_IRRKLANG
#ifdef YGOPRO_USE_IRRKLANG
if
(
music
)
{
char
cmusic
[
1024
];
BufferIO
::
EncodeUTF8
(
music
,
cmusic
);
return
engineMusic
->
isCurrentlyPlaying
(
cmusic
);
}
else
{
return
soundBGM
&&
!
soundBGM
->
isFinished
();
}
#endif
return
false
;
}
void
SoundManager
::
PlayMusic
(
wchar_t
*
music
,
bool
loop
)
{
#ifdef YGOPRO_USE_AUDIO
if
(
!
mainGame
->
chkEnableMusic
->
isChecked
())
if
(
!
mainGame
->
chkEnableMusic
->
isChecked
())
return
;
return
;
if
(
!
engineMusic
->
isCurrentlyPlaying
(
song
))
{
if
(
!
IsPlayingMusic
(
music
))
{
engineMusic
->
stopAllSounds
();
StopBGM
();
engineMusic
->
setSoundVolume
(
mainGame
->
gameConf
.
music_volume
);
SetMusicVolume
(
mainGame
->
gameConf
.
music_volume
);
soundBGM
=
engineMusic
->
play2D
(
song
,
loop
,
false
,
true
);
#ifdef YGOPRO_USE_MINIAUDIO
BufferIO
::
CopyWStr
(
music
,
currentPlayingMusic
,
1024
);
ma_sound_init_from_file_w
(
&
engineMusic
,
music
,
MA_SOUND_FLAG_ASYNC
|
MA_SOUND_FLAG_STREAM
,
nullptr
,
nullptr
,
&
soundBGM
);
ma_sound_set_looping
(
&
soundBGM
,
loop
);
ma_sound_start
(
&
soundBGM
);
#endif
#ifdef YGOPRO_USE_IRRKLANG
char
cmusic
[
1024
];
BufferIO
::
EncodeUTF8
(
music
,
cmusic
);
soundBGM
=
engineMusic
->
play2D
(
cmusic
,
loop
,
false
,
true
);
#endif
}
}
#endif
#endif
}
}
void
SoundManager
::
PlayBGM
(
int
scene
)
{
void
SoundManager
::
PlayBGM
(
int
scene
)
{
#ifdef YGOPRO_USE_
IRRKLANG
#ifdef YGOPRO_USE_
AUDIO
if
(
!
mainGame
->
chkEnableMusic
->
isChecked
())
if
(
!
mainGame
->
chkEnableMusic
->
isChecked
())
return
;
return
;
if
(
!
mainGame
->
chkMusicMode
->
isChecked
())
if
(
!
mainGame
->
chkMusicMode
->
isChecked
())
scene
=
BGM_ALL
;
scene
=
BGM_ALL
;
char
BGMName
[
1024
];
if
(
scene
!=
bgm_scene
||
!
IsPlayingMusic
())
{
if
(
scene
!=
bgm_scene
||
(
soundBGM
&&
soundBGM
->
isFinished
()))
{
int
count
=
BGMList
[
scene
].
size
();
int
count
=
BGMList
[
scene
].
size
();
if
(
count
<=
0
)
if
(
count
<=
0
)
return
;
return
;
bgm_scene
=
scene
;
bgm_scene
=
scene
;
int
bgm
=
rnd
.
get_random_integer
(
0
,
count
-
1
);
int
bgm
=
rnd
.
get_random_integer
(
0
,
count
-
1
);
auto
name
=
BGMList
[
scene
][
bgm
].
c_str
();
auto
name
=
BGMList
[
scene
][
bgm
].
c_str
();
wchar_t
fname
[
1024
];
wchar_t
BGMName
[
1024
];
myswprintf
(
fname
,
L"./sound/BGM/%ls"
,
name
);
myswprintf
(
BGMName
,
L"./sound/BGM/%ls"
,
name
);
BufferIO
::
EncodeUTF8
(
fname
,
BGMName
);
PlayMusic
(
BGMName
,
false
);
PlayMusic
(
BGMName
,
false
);
}
}
#endif
#endif
}
}
void
SoundManager
::
StopBGM
()
{
void
SoundManager
::
StopBGM
()
{
#ifdef YGOPRO_USE_MINIAUDIO
if
(
!
currentPlayingMusic
[
0
])
return
;
memset
(
currentPlayingMusic
,
0
,
sizeof
(
currentPlayingMusic
));
ma_sound_uninit
(
&
soundBGM
);
#endif
#ifdef YGOPRO_USE_IRRKLANG
#ifdef YGOPRO_USE_IRRKLANG
engineMusic
->
stopAllSounds
();
engineMusic
->
stopAllSounds
();
#endif
#endif
}
}
void
SoundManager
::
SetSoundVolume
(
double
volume
)
{
void
SoundManager
::
SetSoundVolume
(
double
volume
)
{
#ifdef YGOPRO_USE_MINIAUDIO
ma_engine_set_volume
(
&
engineSound
,
volume
);
#endif
#ifdef YGOPRO_USE_IRRKLANG
#ifdef YGOPRO_USE_IRRKLANG
engineSound
->
setSoundVolume
(
volume
);
engineSound
->
setSoundVolume
(
volume
);
#endif
#endif
}
}
void
SoundManager
::
SetMusicVolume
(
double
volume
)
{
void
SoundManager
::
SetMusicVolume
(
double
volume
)
{
#ifdef YGOPRO_USE_MINIAUDIO
ma_engine_set_volume
(
&
engineMusic
,
volume
);
#endif
#ifdef YGOPRO_USE_IRRKLANG
#ifdef YGOPRO_USE_IRRKLANG
engineMusic
->
setSoundVolume
(
volume
);
engineMusic
->
setSoundVolume
(
volume
);
#endif
#endif
...
...
gframe/sound_manager.h
View file @
bfcb4afc
...
@@ -3,6 +3,9 @@
...
@@ -3,6 +3,9 @@
#include "game.h"
#include "game.h"
#include "../ocgcore/mtrandom.h"
#include "../ocgcore/mtrandom.h"
#ifdef YGOPRO_USE_MINIAUDIO
#include <miniaudio.h>
#endif
#ifdef YGOPRO_USE_IRRKLANG
#ifdef YGOPRO_USE_IRRKLANG
#include <irrKlang.h>
#include <irrKlang.h>
#endif
#endif
...
@@ -12,8 +15,19 @@ namespace ygo {
...
@@ -12,8 +15,19 @@ namespace ygo {
class
SoundManager
{
class
SoundManager
{
private:
private:
std
::
vector
<
std
::
wstring
>
BGMList
[
8
];
std
::
vector
<
std
::
wstring
>
BGMList
[
8
];
int
bgm_scene
;
int
bgm_scene
{}
;
mt19937
rnd
;
mt19937
rnd
;
#ifdef YGOPRO_USE_MINIAUDIO
ma_engine_config
engineConfig
;
#ifdef YGOPRO_MINIAUDIO_SUPPORT_OPUS_VORBIS
ma_resource_manager_config
resourceManagerConfig
;
ma_resource_manager
resourceManager
;
#endif
ma_engine
engineSound
;
ma_engine
engineMusic
;
ma_sound
soundBGM
;
wchar_t
currentPlayingMusic
[
1024
]{};
#endif
#ifdef YGOPRO_USE_IRRKLANG
#ifdef YGOPRO_USE_IRRKLANG
irrklang
::
ISoundEngine
*
engineSound
;
irrklang
::
ISoundEngine
*
engineSound
;
irrklang
::
ISoundEngine
*
engineMusic
;
irrklang
::
ISoundEngine
*
engineMusic
;
...
@@ -26,7 +40,8 @@ public:
...
@@ -26,7 +40,8 @@ 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
);
void
PlayMusic
(
char
*
song
,
bool
loop
);
bool
IsPlayingMusic
(
wchar_t
*
music
=
0
);
void
PlayMusic
(
wchar_t
*
music
,
bool
loop
);
void
PlayBGM
(
int
scene
);
void
PlayBGM
(
int
scene
);
void
StopBGM
();
void
StopBGM
();
void
SetSoundVolume
(
double
volume
);
void
SetSoundVolume
(
double
volume
);
...
@@ -45,6 +60,7 @@ extern SoundManager soundManager;
...
@@ -45,6 +60,7 @@ extern SoundManager soundManager;
#define SOUND_DESTROYED 108
#define SOUND_DESTROYED 108
#define SOUND_BANISHED 109
#define SOUND_BANISHED 109
#define SOUND_TOKEN 110
#define SOUND_TOKEN 110
#define SOUND_NEGATE 111
#define SOUND_ATTACK 201
#define SOUND_ATTACK 201
#define SOUND_DIRECT_ATTACK 202
#define SOUND_DIRECT_ATTACK 202
...
...
premake/miniaudio/premake5.lua
0 → 100644
View file @
bfcb4afc
project
"miniaudio"
kind
"StaticLib"
files
{
"miniaudio.c"
,
"miniaudio.h"
}
defines
{
"MA_NO_ENCODING"
,
"MA_NO_GENERATION"
,
"MA_NO_NEON"
}
if
MINIAUDIO_SUPPORT_OPUS_VORBIS
then
files
{
"extras/decoders/libopus/*"
,
"extras/decoders/libvorbis/*"
}
if
MINIAUDIO_BUILD_OPUS_VORBIS
then
files
{
"external/ogg/src/bitwise.c"
,
"external/ogg/src/framing.c"
,
"external/opus/src/opus.c"
,
"external/opus/src/opus_decoder.c"
,
"external/opus/src/opus_multistream.c"
,
"external/opus/src/opus_multistream_decoder.c"
,
"external/opus/celt/bands.c"
,
"external/opus/celt/celt.c"
,
"external/opus/celt/celt_decoder.c"
,
"external/opus/celt/celt_lpc.c"
,
"external/opus/celt/cwrs.c"
,
"external/opus/celt/entcode.c"
,
"external/opus/celt/entdec.c"
,
"external/opus/celt/entenc.c"
,
"external/opus/celt/kiss_fft.c"
,
"external/opus/celt/laplace.c"
,
"external/opus/celt/mathops.c"
,
"external/opus/celt/mdct.c"
,
"external/opus/celt/modes.c"
,
"external/opus/celt/pitch.c"
,
"external/opus/celt/quant_bands.c"
,
"external/opus/celt/rate.c"
,
"external/opus/celt/vq.c"
,
"external/opus/celt/x86/pitch_avx.c"
,
"external/opus/celt/x86/pitch_sse.c"
,
"external/opus/celt/x86/vq_sse2.c"
,
"external/opus/celt/x86/x86_celt_map.c"
,
"external/opus/celt/x86/x86cpu.c"
,
"external/opus/silk/bwexpander.c"
,
"external/opus/silk/bwexpander_32.c"
,
"external/opus/silk/CNG.c"
,
"external/opus/silk/code_signs.c"
,
"external/opus/silk/dec_API.c"
,
"external/opus/silk/decode_core.c"
,
"external/opus/silk/decode_frame.c"
,
"external/opus/silk/decode_indices.c"
,
"external/opus/silk/decode_parameters.c"
,
"external/opus/silk/decode_pitch.c"
,
"external/opus/silk/decode_pulses.c"
,
"external/opus/silk/decoder_set_fs.c"
,
"external/opus/silk/gain_quant.c"
,
"external/opus/silk/init_decoder.c"
,
"external/opus/silk/lin2log.c"
,
"external/opus/silk/log2lin.c"
,
"external/opus/silk/LPC_analysis_filter.c"
,
"external/opus/silk/LPC_fit.c"
,
"external/opus/silk/LPC_inv_pred_gain.c"
,
"external/opus/silk/NLSF_decode.c"
,
"external/opus/silk/NLSF_stabilize.c"
,
"external/opus/silk/NLSF_unpack.c"
,
"external/opus/silk/NLSF2A.c"
,
"external/opus/silk/pitch_est_tables.c"
,
"external/opus/silk/PLC.c"
,
"external/opus/silk/resampler.c"
,
"external/opus/silk/resampler_private_AR2.c"
,
"external/opus/silk/resampler_private_down_FIR.c"
,
"external/opus/silk/resampler_private_IIR_FIR.c"
,
"external/opus/silk/resampler_private_up2_HQ.c"
,
"external/opus/silk/resampler_rom.c"
,
"external/opus/silk/shell_coder.c"
,
"external/opus/silk/sort.c"
,
"external/opus/silk/stereo_decode_pred.c"
,
"external/opus/silk/stereo_MS_to_LR.c"
,
"external/opus/silk/sum_sqr_shift.c"
,
"external/opus/silk/table_LSF_cos.c"
,
"external/opus/silk/tables_gain.c"
,
"external/opus/silk/tables_LTP.c"
,
"external/opus/silk/tables_NLSF_CB_NB_MB.c"
,
"external/opus/silk/tables_NLSF_CB_WB.c"
,
"external/opus/silk/tables_other.c"
,
"external/opus/silk/tables_pitch_lag.c"
,
"external/opus/silk/tables_pulses_per_block.c"
,
"external/opusfile/src/info.c"
,
"external/opusfile/src/internal.c"
,
"external/opusfile/src/opusfile.c"
,
"external/opusfile/src/stream.c"
,
"external/vorbis/lib/bitrate.c"
,
"external/vorbis/lib/block.c"
,
"external/vorbis/lib/codebook.c"
,
"external/vorbis/lib/envelope.c"
,
"external/vorbis/lib/floor0.c"
,
"external/vorbis/lib/floor1.c"
,
"external/vorbis/lib/info.c"
,
"external/vorbis/lib/lpc.c"
,
"external/vorbis/lib/lsp.c"
,
"external/vorbis/lib/mapping0.c"
,
"external/vorbis/lib/mdct.c"
,
"external/vorbis/lib/psy.c"
,
"external/vorbis/lib/registry.c"
,
"external/vorbis/lib/res0.c"
,
"external/vorbis/lib/sharedbook.c"
,
"external/vorbis/lib/smallft.c"
,
"external/vorbis/lib/synthesis.c"
,
"external/vorbis/lib/vorbisfile.c"
,
"external/vorbis/lib/window.c"
,
}
includedirs
{
"external/ogg/include"
,
"external/opus/include"
,
"external/opus/celt"
,
"external/opus/silk"
,
"external/opusfile/include"
,
"external/vorbis/include"
,
}
defines
{
"OPUS_BUILD"
,
"USE_ALLOCA"
,
"HAVE_LRINTF"
,
"OP_HAVE_LRINTF"
,
"OPUS_X86_PRESUME_SSE"
,
"OPUS_X86_PRESUME_SSE2"
,
"OPUS_HAVE_RTCD"
,
"OPUS_X86_MAY_HAVE_SSE"
,
"OPUS_X86_MAY_HAVE_SSE4_1"
,
"OPUS_X86_MAY_HAVE_AVX2"
,
}
else
includedirs
{
OPUS_INCLUDE_DIR
,
VORBIS_INCLUDE_DIR
,
OGG_INCLUDE_DIR
}
end
end
filter
"system:linux"
links
{
"dl"
,
"pthread"
,
"m"
}
premake5.lua
View file @
bfcb4afc
-- default global settings
-- default global settings
BUILD_LUA
=
true
BUILD_LUA
=
true
LUA_LIB_NAME
=
"lua"
BUILD_EVENT
=
os
.
istarget
(
"windows"
)
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
=
true
BUILD_IRRLICHT
=
true
USE_IRRKLANG
=
true
USE_AUDIO
=
true
AUDIO_LIB
=
"miniaudio"
MINIAUDIO_SUPPORT_OPUS_VORBIS
=
true
MINIAUDIO_BUILD_OPUS_VORBIS
=
os
.
istarget
(
"windows"
)
IRRKLANG_PRO
=
false
IRRKLANG_PRO
=
false
LUA_LIB_NAME
=
"lua"
IRRKLANG_PRO_BUILD_IKPMP3
=
false
-- read settings from command line or environment variables
-- read settings from command line or environment variables
...
@@ -15,7 +21,7 @@ newoption { trigger = "build-lua", category = "YGOPro - lua", description = "" }
...
@@ -15,7 +21,7 @@ newoption { trigger = "build-lua", category = "YGOPro - lua", description = "" }
newoption
{
trigger
=
"no-build-lua"
,
category
=
"YGOPro - lua"
,
description
=
""
}
newoption
{
trigger
=
"no-build-lua"
,
category
=
"YGOPro - lua"
,
description
=
""
}
newoption
{
trigger
=
"lua-include-dir"
,
category
=
"YGOPro - lua"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"lua-include-dir"
,
category
=
"YGOPro - lua"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"lua-lib-dir"
,
category
=
"YGOPro - lua"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"lua-lib-dir"
,
category
=
"YGOPro - lua"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"lua-lib-name"
,
category
=
"YGOPro - lua"
,
description
=
""
,
value
=
"NAME"
,
default
=
"lua"
}
newoption
{
trigger
=
"lua-lib-name"
,
category
=
"YGOPro - lua"
,
description
=
""
,
value
=
"NAME"
,
default
=
LUA_LIB_NAME
}
newoption
{
trigger
=
"build-event"
,
category
=
"YGOPro - event"
,
description
=
""
}
newoption
{
trigger
=
"build-event"
,
category
=
"YGOPro - event"
,
description
=
""
}
newoption
{
trigger
=
"no-build-event"
,
category
=
"YGOPro - event"
,
description
=
""
}
newoption
{
trigger
=
"no-build-event"
,
category
=
"YGOPro - event"
,
description
=
""
}
...
@@ -37,8 +43,24 @@ newoption { trigger = "no-build-irrlicht", category = "YGOPro - irrlicht", descr
...
@@ -37,8 +43,24 @@ 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-audio"
,
category
=
"YGOPro"
,
description
=
""
}
newoption
{
trigger
=
"no-use-irrklang"
,
category
=
"YGOPro - irrklang"
,
description
=
""
}
newoption
{
trigger
=
"audio-lib"
,
category
=
"YGOPro"
,
description
=
""
,
value
=
"miniaudio, irrklang"
,
default
=
AUDIO_LIB
}
newoption
{
trigger
=
"miniaudio-include-dir"
,
category
=
"YGOPro - miniaudio"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"miniaudio-lib-dir"
,
category
=
"YGOPro - miniaudio"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"miniaudio-support-opus-vorbis"
,
category
=
"YGOPro - miniaudio"
,
description
=
""
}
newoption
{
trigger
=
"no-miniaudio-support-opus-vorbis"
,
category
=
"YGOPro - miniaudio"
,
description
=
""
}
newoption
{
trigger
=
"build-opus-vorbis"
,
category
=
"YGOPro - miniaudio"
,
description
=
""
}
newoption
{
trigger
=
"no-build-opus-vorbis"
,
category
=
"YGOPro - miniaudio"
,
description
=
""
}
newoption
{
trigger
=
"opus-include-dir"
,
category
=
"YGOPro - miniaudio"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"opus-lib-dir"
,
category
=
"YGOPro - miniaudio"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"vorbis-include-dir"
,
category
=
"YGOPro - miniaudio"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"vorbis-lib-dir"
,
category
=
"YGOPro - miniaudio"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"ogg-include-dir"
,
category
=
"YGOPro - miniaudio"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"ogg-lib-dir"
,
category
=
"YGOPro - miniaudio"
,
description
=
""
,
value
=
"PATH"
}
newoption
{
trigger
=
"use-irrklang"
,
category
=
"YGOPro - irrklang"
,
description
=
"Deprecated, use audio-lib=irrklang"
}
newoption
{
trigger
=
"no-use-irrklang"
,
category
=
"YGOPro - irrklang"
,
description
=
"Deprecated, use no-audio"
}
newoption
{
trigger
=
"irrklang-include-dir"
,
category
=
"YGOPro - irrklang"
,
description
=
""
,
value
=
"PATH"
}
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-lib-dir"
,
category
=
"YGOPro - irrklang"
,
description
=
""
,
value
=
"PATH"
}
...
@@ -108,37 +130,75 @@ if not BUILD_IRRLICHT then
...
@@ -108,37 +130,75 @@ if not BUILD_IRRLICHT then
IRRLICHT_LIB_DIR
=
GetParam
(
"irrlicht-lib-dir"
)
or
os
.
findlib
(
"irrlicht"
)
IRRLICHT_LIB_DIR
=
GetParam
(
"irrlicht-lib-dir"
)
or
os
.
findlib
(
"irrlicht"
)
end
end
if
GetParam
(
"use-irrklang"
)
then
if
GetParam
(
"no-audio"
)
then
USE_IRRKLANG
=
true
USE_AUDIO
=
false
elseif
GetParam
(
"no-use-miniaudio"
)
then
print
(
"Warning: --no-use-miniaudio is deprecated, use --no-audio"
)
USE_AUDIO
=
false
elseif
GetParam
(
"use-miniaudio"
)
then
print
(
"Warning: --use-miniaudio is deprecated, use --audio-lib=miniaudio"
)
USE_AUDIO
=
true
AUDIO_LIB
=
"miniaudio"
elseif
GetParam
(
"no-use-irrklang"
)
then
elseif
GetParam
(
"no-use-irrklang"
)
then
USE_IRRKLANG
=
false
print
(
"Warning: --no-use-irrklang is deprecated, use --no-audio"
)
end
USE_AUDIO
=
false
if
USE_IRRKLANG
then
elseif
GetParam
(
"use-irrklang"
)
then
IRRKLANG_INCLUDE_DIR
=
GetParam
(
"irrklang-include-dir"
)
or
"../irrklang/include"
print
(
"Warning: --use-irrklang is deprecated, use --audio-lib=irrklang"
)
if
os
.
istarget
(
"windows"
)
then
USE_AUDIO
=
true
IRRKLANG_LIB_DIR
=
"../irrklang/lib/Win32-visualStudio"
AUDIO_LIB
=
"irrklang"
elseif
os
.
istarget
(
"linux"
)
then
IRRKLANG_LIB_DIR
=
"../irrklang/bin/linux-gcc-64"
IRRKLANG_LINK_RPATH
=
"-Wl,-rpath=./irrklang/bin/linux-gcc-64/"
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
end
if
GetParam
(
"irrklang-pro"
)
and
os
.
istarget
(
"windows"
)
then
if
USE_AUDIO
then
IRRKLANG_PRO
=
true
AUDIO_LIB
=
GetParam
(
"audio-lib"
)
or
AUDIO_LIB
elseif
GetParam
(
"no-irrklang-pro"
)
then
if
AUDIO_LIB
==
"miniaudio"
then
IRRKLANG_PRO
=
false
if
GetParam
(
"miniaudio-support-opus-vorbis"
)
then
end
MINIAUDIO_SUPPORT_OPUS_VORBIS
=
true
if
IRRKLANG_PRO
then
elseif
GetParam
(
"no-miniaudio-support-opus-vorbis"
)
then
-- irrklang pro can't use the pro lib to debug
MINIAUDIO_SUPPORT_OPUS_VORBIS
=
false
IRRKLANG_PRO_RELEASE_LIB_DIR
=
GetParam
(
"irrklang-pro-release-lib-dir"
)
or
"../irrklang/lib/Win32-vs2019"
end
IRRKLANG_PRO_DEBUG_LIB_DIR
=
GetParam
(
"irrklang-pro-debug-lib-dir"
)
or
"../irrklang/lib/Win32-visualStudio-debug"
if
MINIAUDIO_SUPPORT_OPUS_VORBIS
then
if
GetParam
(
"no-build-opus-vorbis"
)
then
MINIAUDIO_BUILD_OPUS_VORBIS
=
false
elseif
GetParam
(
"build-opus-vorbis"
)
then
MINIAUDIO_BUILD_OPUS_VORBIS
=
true
end
if
not
MINIAUDIO_BUILD_OPUS_VORBIS
then
OPUS_INCLUDE_DIR
=
GetParam
(
"opus-include-dir"
)
or
os
.
findheader
(
"opus"
)
OPUS_LIB_DIR
=
GetParam
(
"opus-lib-dir"
)
or
os
.
findlib
(
"opusfile"
)
VORBIS_INCLUDE_DIR
=
GetParam
(
"vorbis-include-dir"
)
or
os
.
findheader
(
"vorbis"
)
VORBIS_LIB_DIR
=
GetParam
(
"vorbis-lib-dir"
)
or
os
.
findlib
(
"vorbis"
)
OGG_INCLUDE_DIR
=
GetParam
(
"ogg-include-dir"
)
or
os
.
findheader
(
"ogg"
)
OCG_LIB_DIR
=
GetParam
(
"ogg-lib-dir"
)
or
os
.
findlib
(
"ogg"
)
end
end
elseif
AUDIO_LIB
==
"irrklang"
then
print
(
"Warning: irrKlang is deprecated and may be removed in future, please consider switching to miniaudio"
)
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=./irrklang/bin/linux-gcc-64/"
elseif
os
.
istarget
(
"macosx"
)
then
IRRKLANG_LIB_DIR
=
"../irrklang/bin/macosx-gcc"
end
IRRKLANG_LIB_DIR
=
GetParam
(
"irrklang-lib-dir"
)
or
IRRKLANG_LIB_DIR
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
IRRKLANG_PRO_BUILD_IKPMP3
=
GetParam
(
"build-ikpmp3"
)
or
IRRKLANG_PRO
else
error
(
"Unknown audio library: "
..
AUDIO_LIB
)
end
end
end
BUILD_IKPMP3
=
USE_IRRKLANG
and
(
GetParam
(
"build-ikpmp3"
)
or
IRRKLANG_PRO
)
if
GetParam
(
"winxp-support"
)
and
os
.
istarget
(
"windows"
)
then
if
GetParam
(
"winxp-support"
)
and
os
.
istarget
(
"windows"
)
then
WINXP_SUPPORT
=
true
WINXP_SUPPORT
=
true
end
end
...
@@ -233,6 +293,11 @@ workspace "YGOPro"
...
@@ -233,6 +293,11 @@ workspace "YGOPro"
if
BUILD_SQLITE
then
if
BUILD_SQLITE
then
include
"sqlite3"
include
"sqlite3"
end
end
if
BUILD_IKPMP3
then
if
USE_AUDIO
then
include
"ikpmp3"
if
AUDIO_LIB
==
"miniaudio"
then
include
"miniaudio"
end
if
IRRKLANG_PRO_BUILD_IKPMP3
then
include
"ikpmp3"
end
end
end
sound/files.txt
View file @
bfcb4afc
...
@@ -8,6 +8,7 @@ equip.wav
...
@@ -8,6 +8,7 @@ equip.wav
destroyed.wav
destroyed.wav
banished.wav
banished.wav
token.wav
token.wav
negate.wav
attack.wav
attack.wav
directattack.wav
directattack.wav
draw.wav
draw.wav
...
...
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