diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/multimedia/audio/qaudiooutput_mac_p.cpp | 25 | ||||
-rw-r--r-- | src/multimedia/audio/qaudiooutput_mac_p.h | 4 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/multimedia/audio/qaudiooutput_mac_p.cpp b/src/multimedia/audio/qaudiooutput_mac_p.cpp index 2d8f595f8..105f41f39 100644 --- a/src/multimedia/audio/qaudiooutput_mac_p.cpp +++ b/src/multimedia/audio/qaudiooutput_mac_p.cpp @@ -297,6 +297,8 @@ QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray& device) stateCode = QAudio::StoppedState; audioThreadState.store(Stopped); + cachedVolume = (qreal)1.; + intervalTimer = new QTimer(this); intervalTimer->setInterval(1000); connect(intervalTimer, SIGNAL(timeout()), SIGNAL(notify())); @@ -408,6 +410,8 @@ bool QAudioOutputPrivate::open() isOpen = true; + setVolume(cachedVolume); + return true; } @@ -661,6 +665,27 @@ void QAudioOutputPrivate::stopTimers() intervalTimer->stop(); } +void QAudioOutputPrivate::setVolume(qreal v) +{ + const qreal normalizedVolume = qBound(qreal(0.0), v, qreal(1.0)); + if (!isOpen) { + cachedVolume = normalizedVolume; + return; + } + + if (AudioUnitSetParameter(audioUnit, + kHALOutputParam_Volume, + kAudioUnitScope_Global, + 0 /* bus */, + (float)normalizedVolume, + 0) == noErr) + cachedVolume = normalizedVolume; +} + +qreal QAudioOutputPrivate::volume() const +{ + return cachedVolume; +} void QAudioOutputPrivate::deviceStopped() { diff --git a/src/multimedia/audio/qaudiooutput_mac_p.h b/src/multimedia/audio/qaudiooutput_mac_p.h index 953551877..fd513c4e7 100644 --- a/src/multimedia/audio/qaudiooutput_mac_p.h +++ b/src/multimedia/audio/qaudiooutput_mac_p.h @@ -106,6 +106,7 @@ public: QMutex mutex; QTimer* intervalTimer; QAbstractAudioDeviceInfo *audioDeviceInfo; + qreal cachedVolume; QAudio::Error errorCode; QAudio::State stateCode; @@ -152,6 +153,9 @@ public: void startTimers(); void stopTimers(); + void setVolume(qreal); + qreal volume() const; + private slots: void deviceStopped(); void inputReady(); |