Question

I am playing audio with the QMediaPlayer and want to visualize the audio levels (for example like in this video).
I already found a example from the Qt 4 documentation but they were manually generating the signal and I found no way to get the audio output buffer with the QMediaPlayer.
How should I solve this problem / are there other audio librarys (crossplatform) that can accomplish this?

thanks

Was it helpful?

Solution

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top