Implement volume in audiocapture plugin.

This plugin uses QAudioInput as audio source for the recording, just
forward the volume to it.

Change-Id: Ice3ec5e48195b13d5f738b79a357dfc261ad8955
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
This commit is contained in:
Yoann Lopes
2015-11-16 16:04:28 +01:00
parent 7221ed82d2
commit 9937c67dec
3 changed files with 71 additions and 7 deletions

View File

@@ -88,6 +88,8 @@ AudioCaptureSession::AudioCaptureSession(QObject *parent)
, m_audioInput(0)
, m_deviceInfo(QAudioDeviceInfo::defaultInputDevice())
, m_wavFile(true)
, m_volume(1.0)
, m_muted(false)
{
m_format = m_deviceInfo.preferredFormat();
}
@@ -312,6 +314,8 @@ void AudioCaptureSession::record()
file.write((char*)&header,sizeof(CombinedHeader));
}
setVolumeHelper(m_muted ? 0 : m_volume);
file.startProbes(m_format);
m_audioInput->start(qobject_cast<QIODevice*>(&file));
} else {
@@ -400,4 +404,51 @@ void AudioCaptureSession::setCaptureDevice(const QString &deviceName)
m_deviceInfo = QAudioDeviceInfo::defaultInputDevice();
}
qreal AudioCaptureSession::volume() const
{
return m_volume;
}
bool AudioCaptureSession::isMuted() const
{
return m_muted;
}
void AudioCaptureSession::setVolume(qreal v)
{
qreal boundedVolume = qBound(qreal(0), v, qreal(1));
if (m_volume == boundedVolume)
return;
m_volume = boundedVolume;
if (!m_muted)
setVolumeHelper(m_volume);
emit volumeChanged(m_volume);
}
void AudioCaptureSession::setMuted(bool muted)
{
if (m_muted == muted)
return;
m_muted = muted;
setVolumeHelper(m_muted ? 0 : m_volume);
emit mutedChanged(m_muted);
}
void AudioCaptureSession::setVolumeHelper(qreal volume)
{
if (!m_audioInput)
return;
m_audioInput->setVolume(volume);
}
QT_END_NAMESPACE

View File

@@ -96,11 +96,19 @@ public:
void setCaptureDevice(const QString &deviceName);
void setVolume(qreal v);
qreal volume() const;
void setMuted(bool muted);
bool isMuted() const;
signals:
void stateChanged(QMediaRecorder::State state);
void statusChanged(QMediaRecorder::Status status);
void positionChanged(qint64 position);
void actualLocationChanged(const QUrl &location);
void volumeChanged(qreal volume);
void mutedChanged(bool muted);
void error(int error, const QString &errorString);
private slots:
@@ -114,6 +122,8 @@ private:
void setStatus(QMediaRecorder::Status status);
void setVolumeHelper(qreal volume);
QDir defaultDir() const;
QString generateFileName(const QString &requestedName,
const QString &extension) const;
@@ -129,6 +139,8 @@ private:
QAudioDeviceInfo m_deviceInfo;
QAudioFormat m_format;
bool m_wavFile;
qreal m_volume;
bool m_muted;
// WAV header stuff

View File

@@ -50,6 +50,10 @@ AudioMediaRecorderControl::AudioMediaRecorderControl(QObject *parent)
this, SIGNAL(statusChanged(QMediaRecorder::Status)));
connect(m_session, SIGNAL(actualLocationChanged(QUrl)),
this, SIGNAL(actualLocationChanged(QUrl)));
connect(m_session, &AudioCaptureSession::volumeChanged,
this, &AudioMediaRecorderControl::volumeChanged);
connect(m_session, &AudioCaptureSession::mutedChanged,
this, &AudioMediaRecorderControl::mutedChanged);
connect(m_session, SIGNAL(error(int,QString)),
this, SIGNAL(error(int,QString)));
}
@@ -85,13 +89,12 @@ qint64 AudioMediaRecorderControl::duration() const
bool AudioMediaRecorderControl::isMuted() const
{
return false;
return m_session->isMuted();
}
qreal AudioMediaRecorderControl::volume() const
{
//TODO: implement muting and audio gain
return 1.0;
return m_session->volume();
}
void AudioMediaRecorderControl::setState(QMediaRecorder::State state)
@@ -101,14 +104,12 @@ void AudioMediaRecorderControl::setState(QMediaRecorder::State state)
void AudioMediaRecorderControl::setMuted(bool muted)
{
if (muted)
qWarning("Muting the audio recording is not supported.");
m_session->setMuted(muted);
}
void AudioMediaRecorderControl::setVolume(qreal volume)
{
if (!qFuzzyCompare(volume, qreal(1.0)))
qWarning("Changing the audio recording volume is not supported.");
m_session->setVolume(volume);
}
QT_END_NAMESPACE