案例1.我設法播放聲音與QMediaPlayer這樣的:QMediaPlayer - 玩加載到內存中的聲音
QMediaPlayer* media = new QMediaPlayer();
media->setMedia("sound.mp3");
media->play();
案例2.如果我加載聲音到內存一切都OK還併發揮它是這樣的:
QFile file("sound.mp3");
file.open(QIODevice::ReadOnly);
QByteArray* arr = new QByteArray(file.readAll());
file.close();
QBuffer* buffer = new QBuffer(arr);
buffer->open(QIODevice::ReadOnly);
buffer->seek(0);
QMediaPlayer* media = new QMediaPlayer();
media->setMedia(QMediaContent(), buffer);
media->play();
問題是,當我嘗試播放文件,它是不是一個真正的聲音就像file.txt
。 在第一種情況下,玩家立即停止。 在第二種情況下播放器保持在狀態PlayingState
(QMediaPlayer::BufferedMedia
,QMediaPlayer::NoError
)
文檔:
空隙QMediaPlayer :: setMedia(常量QMediaContent &媒體,QIODevice中 *流= Q_NULLPTR)
設置當前媒體源。
如果一個流被提供;將從中讀取媒體數據,而不是解析媒體源的 。在這種情況下,媒體源可能仍然是 ,用於解析有關媒體的其他信息,如MIME 類型。該流必須是開放且可讀的。
將媒體設置爲空QMediaContent將導致播放器丟棄與當前媒體源有關的所有信息,並且使得 停止與該媒體相關的所有I/O操作。
所以,如果我用media->setMedia(QMediaContent(), buffer);
然後媒體播放器會從內存中讀取數據,而不作爲,因爲空QMediaContent的MIME類型的附加信息。也許mediaplayer由於缺少mime類型而保留在PlayingState中,試圖播放加載到內存中的文本文件。
所以我嘗試結合使用有效QMediaContent與加載數據...同樣的結果:媒體播放器留在PlayingState沒有任何錯誤。 media->setMedia(QMediaContent(QUrl::fromLocalFile(QFileInfo(s).absoluteFilePath())), buffer);
如何使用QMediaPlayer播放加載到內存中的聲音以避免此問題?
你能解釋一下爲什麼該代碼是解決問題的辦法? – eyllanesc
儘管此代碼片段可能是解決方案,但其中的解釋確實有助於提高帖子的質量。請記住,你所回答的問題,在未來的讀者,而那些人可能不知道的原因,你的代碼的建議 –
在我有限的經驗,它可以播放的文件,如果你玩的d盤下的文件,可以更換它與「D:\\ sound。Mp3」 – tom