QAudioBufferOutput Class - audioBufferReceived (for music visualization)
Solved
General and Desktop
-
Hi. I'm currently playing an mp3 via QMediaPlayer. Now I want to get access to the audiobuffer for drawing fancy bars etc while the music plays. So:
header-file:class MainWindow : public QMainWindow { ... QMediaPlayer *my_playerB; QAudioOutput *my_audioOutputB; QAudioBufferOutput *audioBufferOutputB; ... private slots: void Oida(const QAudioBuffer &buffer); void Oida2(); }
Sourcecode:
void MainWindow::Oida(const QAudioBuffer &buffer) { qDebug() << "Oida"; } void MainWindow::Oida2() { qDebug() << "Oida2"; } void MainWindow::on_pushButtonOpenGL_clicked() { my_playerB->setSource(QUrl::fromLocalFile("/home/thomas/Musik/coolmusic.mp3")); audioBufferOutputB = new QAudioBufferOutput(); my_playerB->setAudioBufferOutput(audioBufferOutputB); connect(audioBufferOutputB, SIGNAL(audioBufferReceived(QAudioBuffer&)), this, SLOT(Oida(QAudioBuffer&))); connect(my_playerB, SIGNAL(audioBufferOutputChanged()), this, SLOT(Oida2())); my_playerB->play(); }
I'm getting "QObject::connect: No such signal QAudioBufferOutput::audioBufferReceived(QAudioBuffer&)". Why?
And both functions are not called. Again: Why?
I hope someone can help me. Thx in advance. -
connect(audioBufferOutputB, SIGNAL(audioBufferReceived(QAudioBuffer)), this, SLOT(Oida(QAudioBuffer)));
Got it. All I had to do was removing '&' and it works!
-
-
Hi,
An additional suggestion: adopt the new connect style using function address rather than the macro based version. You will have compile time error rather than run-time warnings printed in case of an error.