Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Donald Haase
Cockatrice
Commits
a06c7b2f
Commit
a06c7b2f
authored
Sep 11, 2015
by
Fabio Bas
Browse files
Rework the sound engine to use QSound
plus misc fixes
parent
6d56e0df
Changes
3
Hide whitespace changes
Inline
Side-by-side
cockatrice/src/dlg_settings.cpp
View file @
a06c7b2f
...
...
@@ -774,7 +774,7 @@ SoundSettingsPage::SoundSettingsPage()
masterVolumeSlider
->
setValue
(
settingsCache
->
getMasterVolume
());
masterVolumeSlider
->
setToolTip
(
QString
::
number
(
settingsCache
->
getMasterVolume
()));
connect
(
settingsCache
,
SIGNAL
(
masterVolumeChanged
(
int
)),
this
,
SLOT
(
masterVolumeChanged
(
int
)));
connect
(
masterVolumeSlider
,
SIGNAL
(
sliderReleased
()),
soundEngine
,
SLOT
(
playerJoine
d
()));
connect
(
masterVolumeSlider
,
SIGNAL
(
sliderReleased
()),
soundEngine
,
SLOT
(
testSoun
d
()));
connect
(
masterVolumeSlider
,
SIGNAL
(
valueChanged
(
int
)),
settingsCache
,
SLOT
(
setMasterVolume
(
int
)));
...
...
cockatrice/src/soundengine.cpp
View file @
a06c7b2f
#include
"soundengine.h"
#include
"settingscache.h"
#include
<QAudioOutput>
#include
<QAudioFormat>
#include
<QFile>
#include
<QBuffer>
#include
<QStringList>
#if QT_VERSION > 0x050000
#include
<QMediaPlayer>
#include
<QUrl>
#endif
SoundEngine
::
SoundEngine
(
QObject
*
parent
)
:
QObject
(
parent
),
audio
(
0
)
{
enabled
=
false
;
inputBuffer
=
new
QBuffer
(
this
);
connect
(
settingsCache
,
SIGNAL
(
soundPathChanged
()),
this
,
SLOT
(
cacheData
()));
connect
(
settingsCache
,
SIGNAL
(
soundEnabledChanged
()),
this
,
SLOT
(
soundEnabledChanged
()));
cacheData
();
soundEnabledChanged
();
}
#include
<QFileInfo>
#include
<QSound>
void
SoundEngine
::
cacheData
()
{
/*
fileNames = QStringList()
/
*
Phases
*/
/
/
Phases
<< "untap_step" << "upkeep_step" << "draw_step" << "main_1"
<< "start_combat" << "attack_step" << "block_step" << "damage_step" << "end_combat"
<< "main_2" << "end_step"
/
*
Game Actions
*/
/
/
Game Actions
<< "draw_card" << "play_card" << "tap_card" << "untap_card"
<< "shuffle" << "roll_dice" << "life_change"
/
*
Player
*/
/
/
Player
<< "player_join" << "player_leave" << "player_disconnect" << "player_reconnect" << "player_concede"
/
*
Spectator
*/
/
/
Spectator
<< "spectator_join" << "spectator_leave"
/
*
Chat & UI
*/
/
/
Chat & UI
<< "chat_mention" << "all_mention" << "private_message";
*/
#if QT_VERSION < 0x050000 //QT4
for
(
int
i
=
0
;
i
<
fileNames
.
size
();
++
i
)
{
QFile
file
(
settingsCache
->
getSoundPath
()
+
"/"
+
fileNames
[
i
]
+
".wav"
);
if
(
!
file
.
exists
())
continue
;
file
.
open
(
QIODevice
::
ReadOnly
);
file
.
seek
(
44
);
audioCache
.
insert
(
fileNames
[
i
],
file
.
readAll
());
file
.
close
();
}
#else //QT5
QStringList
ext
=
QStringList
()
<<
".mp4"
<<
".mp3"
<<
".wav"
;
for
(
int
i
=
0
;
i
<
fileNames
.
size
();
++
i
)
{
for
(
int
j
=
0
;
j
<
ext
.
size
();
++
j
)
{
QString
filepath
=
settingsCache
->
getSoundPath
()
+
"/"
+
fileNames
[
i
]
+
ext
[
j
];
QFile
file
(
filepath
);
if
(
file
.
exists
()){
QMediaPlayer
*
player
=
new
QMediaPlayer
;
player
->
setMedia
(
QUrl
::
fromLocalFile
(
filepath
));
audioData
.
insert
(
fileNames
[
i
],
player
);
break
;
}
}
}
#endif
#define TEST_SOUND_FILENAME "player_join"
SoundEngine
::
SoundEngine
(
QObject
*
parent
)
:
QObject
(
parent
),
enabled
(
false
)
{
connect
(
settingsCache
,
SIGNAL
(
soundEnabledChanged
()),
this
,
SLOT
(
soundEnabledChanged
()));
soundEnabledChanged
();
}
void
SoundEngine
::
soundEnabledChanged
()
{
#if QT_VERSION < 0x050000 //QT4
if
(
settingsCache
->
getSoundEnabled
())
{
qDebug
(
"SoundEngine: enabling sound"
);
QAudioFormat
format
;
format
.
setSampleRate
(
44100
);
format
.
setChannelCount
(
1
);
format
.
setSampleSize
(
16
);
format
.
setCodec
(
"audio/pcm"
);
format
.
setByteOrder
(
QAudioFormat
::
LittleEndian
);
format
.
setSampleType
(
QAudioFormat
::
SignedInt
);
audio
=
new
QAudioOutput
(
format
,
this
);
}
else
if
(
audio
)
{
qDebug
(
"SoundEngine: disabling sound"
);
audio
->
stop
();
audio
->
deleteLater
();
audio
=
0
;
}
#else //QT5
if
(
settingsCache
->
getSoundEnabled
())
{
#if QT_VERSION < 0x050000 //QT4
if
(
QSound
::
isAvailable
())
{
qDebug
(
"SoundEngine: enabling sound"
);
enabled
=
true
;
}
else
{
qDebug
(
"SoundEngine: sound not available"
);
enabled
=
false
;
}
#else
qDebug
(
"SoundEngine: enabling sound"
);
enabled
=
true
;
}
else
{
enabled
=
true
;
#endif
}
else
{
qDebug
(
"SoundEngine: disabling sound"
);
enabled
=
false
;
for
(
int
i
=
0
;
i
<
fileNames
.
size
();
++
i
)
{
if
(
audioData
.
contains
(
fileNames
[
i
])
&&
audioData
[
fileNames
[
i
]]
->
state
()
!=
QMediaPlayer
::
StoppedState
)
audioData
[
fileNames
[
i
]]
->
stop
();
}
}
#endif
}
#include
<QDebug>
void
SoundEngine
::
playSound
(
QString
fileName
)
{
#if QT_VERSION < 0x050000 //QT4
if
(
!
fileNames
.
contains
(
fileName
)
||
!
audio
)
if
(
!
enabled
)
return
;
audio
->
stop
();
inputBuffer
->
close
();
inputBuffer
->
setData
(
audioCache
[
fileName
]);
inputBuffer
->
open
(
QIODevice
::
ReadOnly
);
audio
->
start
(
inputBuffer
);
#else //QT5
if
(
!
audioData
.
contains
(
fileName
)
||
!
enabled
){
QFileInfo
fi
(
settingsCache
->
getSoundPath
()
+
"/"
+
fileName
+
".wav"
);
qDebug
()
<<
"playing"
<<
fi
.
absoluteFilePath
();
if
(
!
fi
.
exists
())
return
;
}
audioData
[
fileName
]
->
setVolume
(
settingsCache
->
getMasterVolume
());
audioData
[
fileName
]
->
stop
();
audioData
[
fileName
]
->
setPosition
(
0
);
audioData
[
fileName
]
->
play
();
#endif
QSound
::
play
(
fi
.
absoluteFilePath
());
}
void
SoundEngine
::
testSound
()
{
playSound
(
"player_join"
);
playSound
(
TEST_SOUND_FILENAME
);
}
\ No newline at end of file
cockatrice/src/soundengine.h
View file @
a06c7b2f
...
...
@@ -2,30 +2,12 @@
#define SOUNDENGINE_H
#include
<QObject>
#include
<QMap>
#include
<QDateTime>
#include
<QStringList>
#if QT_VERSION > 0x050000
#include
<QMediaPlayer>
#endif
class
QAudioOutput
;
class
QBuffer
;
class
SoundEngine
:
public
QObject
{
Q_OBJECT
private:
QMap
<
QString
,
QByteArray
>
audioCache
;
QBuffer
*
inputBuffer
;
QAudioOutput
*
audio
;
bool
enabled
;
QStringList
fileNames
;
#if QT_VERSION > 0x050000
QMap
<
QString
,
QMediaPlayer
*>
audioData
;
#endif
private
slots
:
void
cacheData
();
void
soundEnabledChanged
();
public:
SoundEngine
(
QObject
*
parent
=
0
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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