如何在Qt中播放来自QByteArray的声音
how to play a voice from QByteArray in Qt
我想播放来自 QByteArray 的音乐,所以我可以在很多情况下使用它来从数据库中检索声音或使用 Tcp 等通过网络传输它。
所以我使用这些行代码
QFile file("E:\amr.mp3"); // sound dir
file.open(QIODevice::ReadOnly);
QByteArray arr = file.readAll(); // change it to QbyteArray
QBuffer buffer(&arr);
qDebug() << "Buffer error = " << buffer.errorString(); // i get error from here "unkow error"
QMediaPlayer *player = new QMediaPlayer();
player->setMedia(QMediaContent(),&buffer);
player->play();
qDebug() << "Player error = " << player->errorString(); // no error ""
我搜索的时候看到很多解决方案,其中一个在Whosebug上
解决方案是制作一个 Qbuffer,将数组传递给它并将其放入 setMedia 但它没有用
所以我需要任何帮助来制作此代码 运行 或任何其他方式来播放来自 QByteArray
的语音或音乐
您只是忘记用
打开缓冲区
buffer.open(QIODevice::ReadOnly);
所以一个完整的工作演示程序是这样的:
#include <QApplication>
#include <QMediaPlayer>
#include <QFile>
#include <QBuffer>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFile file(R"(C:\test.mp3)"); // sound dir
file.open(QIODevice::ReadOnly);
QByteArray arr = file.readAll();
QMediaPlayer *player = new QMediaPlayer(&a);
QBuffer *buffer = new QBuffer(player);
buffer->setData(arr);
buffer->open(QIODevice::ReadOnly);
player->setMedia(QMediaContent(),buffer);
player->play();
return a.exec();
}
我想播放来自 QByteArray 的音乐,所以我可以在很多情况下使用它来从数据库中检索声音或使用 Tcp 等通过网络传输它。
所以我使用这些行代码
QFile file("E:\amr.mp3"); // sound dir
file.open(QIODevice::ReadOnly);
QByteArray arr = file.readAll(); // change it to QbyteArray
QBuffer buffer(&arr);
qDebug() << "Buffer error = " << buffer.errorString(); // i get error from here "unkow error"
QMediaPlayer *player = new QMediaPlayer();
player->setMedia(QMediaContent(),&buffer);
player->play();
qDebug() << "Player error = " << player->errorString(); // no error ""
我搜索的时候看到很多解决方案,其中一个在Whosebug上 解决方案是制作一个 Qbuffer,将数组传递给它并将其放入 setMedia 但它没有用 所以我需要任何帮助来制作此代码 运行 或任何其他方式来播放来自 QByteArray
的语音或音乐您只是忘记用
打开缓冲区buffer.open(QIODevice::ReadOnly);
所以一个完整的工作演示程序是这样的:
#include <QApplication>
#include <QMediaPlayer>
#include <QFile>
#include <QBuffer>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFile file(R"(C:\test.mp3)"); // sound dir
file.open(QIODevice::ReadOnly);
QByteArray arr = file.readAll();
QMediaPlayer *player = new QMediaPlayer(&a);
QBuffer *buffer = new QBuffer(player);
buffer->setData(arr);
buffer->open(QIODevice::ReadOnly);
player->setMedia(QMediaContent(),buffer);
player->play();
return a.exec();
}