summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/multimedia/audio/qaudiooutput_mac_p.cpp25
-rw-r--r--src/multimedia/audio/qaudiooutput_mac_p.h4
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();