You should look at QAudioProbe
.
The QAudioProbe class allows you to monitor audio being played or recorded.
As the QMediaPlayer
is a subclass of QMediaObject
, you attach the QAudioProbe
to the QMediaPlayer
with bool QAudioProbe::setSource(QMediaObject* source)
, then connect to the void QAudioProbe::audioBufferProbed(const QAudioBuffer& buffer)
signal. The documentation provides an example.
In the slot for the audioBufferProbed
signal you can process the raw audio data to calculate volume, for example by computing the RMS of the sample. Have a look at this article on calculating the RMS efficiently.
To display the volume you could use QProgressBar
, but you may get better performance using the Qt Widgets for Technical Applications library which can also work on a logarithmic scale which will be needed for a volume display.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…