summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/multimedia/audio/qaudiooutput_win32_p.cpp22
-rw-r--r--src/multimedia/audio/qaudiooutput_win32_p.h3
2 files changed, 25 insertions, 0 deletions
diff --git a/src/multimedia/audio/qaudiooutput_win32_p.cpp b/src/multimedia/audio/qaudiooutput_win32_p.cpp
index 72e772482..7592643f4 100644
--- a/src/multimedia/audio/qaudiooutput_win32_p.cpp
+++ b/src/multimedia/audio/qaudiooutput_win32_p.cpp
@@ -117,6 +117,7 @@ QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device)
audioSource = 0;
pullMode = true;
finished = false;
+ volumeCache = (qreal)1.;
}
QAudioOutputPrivate::~QAudioOutputPrivate()
@@ -380,6 +381,8 @@ bool QAudioOutputPrivate::open()
timeStampOpened.restart();
elapsedTimeOffset = 0;
+ setVolume(volumeCache);
+
errorState = QAudio::NoError;
if(pullMode) {
deviceState = QAudio::ActiveState;
@@ -667,6 +670,25 @@ QAudio::State QAudioOutputPrivate::state() const
return deviceState;
}
+void QAudioOutputPrivate::setVolume(qreal v)
+{
+ const qreal normalizedVolume = qBound(qreal(0.0), v, qreal(1.0));
+ if (deviceState != QAudio::ActiveState) {
+ volumeCache = normalizedVolume;
+ return;
+ }
+ const qint16 scaled = normalizedVolume * 0xFFFF;
+ DWORD vol = MAKELONG(scaled, scaled);
+ MMRESULT res = waveOutSetVolume(hWaveOut, vol);
+ if (res == MMSYSERR_NOERROR)
+ volumeCache = normalizedVolume;
+}
+
+qreal QAudioOutputPrivate::volume() const
+{
+ return volumeCache;
+}
+
void QAudioOutputPrivate::reset()
{
close();
diff --git a/src/multimedia/audio/qaudiooutput_win32_p.h b/src/multimedia/audio/qaudiooutput_win32_p.h
index a5a4852de..064ca89c0 100644
--- a/src/multimedia/audio/qaudiooutput_win32_p.h
+++ b/src/multimedia/audio/qaudiooutput_win32_p.h
@@ -112,6 +112,8 @@ public:
qint64 elapsedUSecs() const;
QAudio::Error error() const;
QAudio::State state() const;
+ void setVolume(qreal);
+ qreal volume() const;
QIODevice* audioSource;
QAudioFormat settings;
@@ -134,6 +136,7 @@ private:
qint64 totalTimeValue;
bool pullMode;
int intervalTime;
+ qreal volumeCache;
static void QT_WIN_CALLBACK waveOutProc( HWAVEOUT hWaveOut, UINT uMsg,
DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 );