diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/multimedia/audio/qaudiooutput_win32_p.cpp | 22 | ||||
-rw-r--r-- | src/multimedia/audio/qaudiooutput_win32_p.h | 3 |
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 ); |