2014-04-28 7 views
3

Я воспроизвожу аудио с помощью QMediaPlayer и хочу визуализировать уровни звука (например, как в this video).
Я уже нашел пример из документации Qt 4, но они вручную генерировали сигнал, и я не нашел способа получить буфер вывода звука с помощью QMediaPlayer.
Как решить эту проблему/есть ли другие аудио-библиотеки (кроссплатформенные), которые могут это сделать?Аудио визуализация с помощью QMediaPlayer

благодарит

ответ

4

Вы должны смотреть на QAudioProbe.

Класс QAudioProbe позволяет контролировать воспроизводимый или записанный звук.

Как QMediaPlayer подкласс QMediaObject, прикрепить QAudioProbe к QMediaPlayer с bool QAudioProbe::setSource(QMediaObject* source), а затем подключить к void QAudioProbe::audioBufferProbed(const QAudioBuffer& buffer) сигнала. Пример приведен в документации.

В слоте для сигнала audioBufferProbed вы можете обрабатывать необработанные аудиоданные для расчета громкости, например, путем вычисления RMS образца. Посмотрите на это article on calculating the RMS efficiently.

Для отображения тома вы можете использовать QProgressBar, но вы можете получить более высокую производительность, используя библиотеку Qt Widgets for Technical Applications, которая также может работать с логарифмической шкалой, которая понадобится для отображения тома.

+0

Спасибо, это именно то, что я искал. –

+0

Я пытаюсь сделать что-то подобное и использовал сигнал audioBufferProbed для захвата буфера, но проблема в том, что этот сигнал испускается очень скоро. Разница между двумя эмиссиями составляет почти 10 мс. Есть ли способ контролировать излучение этого сигнала? Из-за этого обработка fft, которая выполняется в слоте, закручивается. Правильно ли я делаю это? – astre

+1

@astre Я не думаю, что есть какой-либо способ контролировать скорость сигнала. Вы можете создать прокси-класс, который будет делать это, чтобы пакет несколько сигналов вместе. Кроме того, вы можете сделать FFT в другом потоке, например, использовать ['QtConcurrent :: run'] (http://qt-project.org/doc/qt-5/qtconcurrent.html#run) для запуска FFT и использовать ['QFutureWatcher'] (http://qt-project.org/doc/qt-5/qfuturewatcher.html) в графическом интерфейсе, чтобы получить результаты для их отображения. –

Смежные вопросы