2016-06-28 4 views
1

QByteArray에서 음악을 재생하고 싶으므로 많은 경우 데이터베이스에서 사운드를 검색하거나 Tcp 등을 사용하여 네트워크를 통해 전송할 수 있습니다.
그래서 사용합니다. 내가 검색 할 때Qt에서 QByteArray에서 음성을 재생하는 방법

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 "" 

내가 많은 솔루션을 참조 코드 줄은 그들 중 하나에 유래 솔루션이하는 Qbuffer을 여기에 배열을 전달하고 setMedia에 넣어하는 것입니다 에 있지만 그것은 작동하지 않았다 그래서이 코드를 실행하거나 QByteArray의 음성 또는 음악을 재생하는 데 도움이 필요합니다.

+1

: 버퍼가 될 수 없다 당신은 그래서 전체 작업 데모 프로그램이있다

buffer.open(QIODevice::ReadOnly); 

로 버퍼를 엽니 다 잊었다 오류 상태이므로 오류의 문자열 표현은 의미가 없습니다. –

답변

3

은 아무 소용이`QBuffer :: errorString` 방법 호출에 없습니다
#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(); 
} 
+1

재생에 대한 첫 번째 감사, 그것은 메인에서 잘 작동하지만 push_button에 사용할 때 나는 버튼을 눌렀을 때 충돌이 발생한다. 질문에서 편집 할 수있다. –

+2

@hello ByteArray와 QBuffer가 계속 살아남을 수 있도록해야한다. 함수이므로, QByteArray * arr = new QByteArray (file.readAll()); QBuffer * 버퍼 = 새로운 QBuffer (arr);'(잠재적으로 QMediaPlayer를 부모로 전달하거나 평생을 관리하십시오). 그러나이 중 아무 것도 원래 질문과 관련이 없습니다 – PeterT

+1

오류가 있음을 확인하지 않고 Qt의 모든 항목에 대해 'errorString' 메서드를 호출하면 무의미하며 잘못된 결론이 도출 될 수 있습니다. 'QBuffer'는'error()'메쏘드가없고 오류를보고 할 방법이 없기 때문에'errorString()'을 호출하는 것은 항상 잘못된 것입니다. 'QMediaPlayer'의'error()'는 먼저'errorString()'을 호출하고 디버그 출력을 내야한다면 에러가있을 때만 검사해야합니다. –