2017-02-10 4 views
0

私はこのようなQMediaPlayerでサウンドを再生するために管理1.ケース:私はメモリにサウンドをロードする場合QMediaPlayerは - メモリにロードされたサウンドを再生

QMediaPlayer* media = new QMediaPlayer(); 
media->setMedia("sound.mp3"); 
media->play(); 

ケースは2すべてがもokですそして、このようにそれを再生する:私はfile.txtのような本当の音ではないファイルを再生しようとすると

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(); 

問題です。 最初の場合、プレーヤーはすぐに停止します。

無効QMediaPlayer :: setMedia(constのQMediaContent &メディア、のQIODevice *ストリーム= Q_NULLPTR):プレイヤーは状態PlayingStateQMediaPlayer::BufferedMediaQMediaPlayer::NoError)に残っている第二ケース

ドキュメントの

現在のメディアソースを設定します。

ストリームが供給されている場合。 の代わりにメディアデータが読み取られます。この場合、メディアソースは、 などのメディアについての追加情報を解決するために使用される場合があります。ストリームはオープンで読み取り可能でなければなりません。 廃棄にそのメディアに関連したすべてのI/O操作の現在のメディア・ソースにして 中止に関連するすべての情報をプレイヤーが発生しますヌルQMediaContentへのメディアの設定

だから、私はその後、メディアプレーヤがあるため、ヌルQMediaContentのMIMEタイプなどの追加情報がなくてもメモリからデータを読み込みますmedia->setMedia(QMediaContent(), buffer);を使用している場合。たぶんmediaplayerは、メモリにロードされたテキストファイルを再生しようとすると、MIMEタイプが不足しているためにPlayingStateに残っている可能性があります。

私は、ロードされたデータと一緒に有効なQMediaContentを使用しようとします...同じ結果:mediaplayerはエラーなしでPlayingStateに残ります。 media->setMedia(QMediaContent(QUrl::fromLocalFile(QFileInfo(s).absoluteFilePath())), buffer);

この問題を回避するために、QMediaPlayerでメモリにロードされたサウンドを再生するにはどうすればよいですか?

答えて

-2
static QMediaPlayer player; 
player.setMedia(QUrl::fromLocalFile("sound.mp3")); 
player.play(); 
+2

なぜこのコードが問題の解決策であるか説明できますか? – eyllanesc

+0

このコードスニペットは解決策であるかもしれませんが、説明を含めて本当にあなたの投稿の質を向上させるのに役立ちます。将来の読者の質問に答えていることを覚えておいてください。これらの人々はあなたのコード提案の理由を知りません。 –

+0

私の限られた経験では、ファイルを再生できます。Dディスクの下のファイルを再生すると、それは "D:\\ sound。Mp3" – tom

関連する問題