문제

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

도움이 되었습니까?

해결책

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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top