2

M3U フォーマットでプレイリストを作成できるように、曲の長さを秒単位で知りたいのですが、ファイルからその情報を取得する方法がわかりません。私はid3libとQtを使用しています。

私はもう試した:

ID3_Frame* myFrame = myTag.Find(ID3FID_SONGLEN);
ID3_Frame* myFrame = myTag.Find(ID3FID_TIME);
ID3_Frame* myFrame = myTag.Find(ID3FID_SIZE);

しかし、myFrame は NULL でした。のように、他のパラメーターを試して動作しましID3FID_ALBUMた。何を試せばいいのかわからない。id3lib API には何も見つかりませんでした。

Qtがその情報を提供できることは知っていますが、id3libを使用できませんか?

後で編集:MediaObject::totalTime()曲が再生された場合にのみ時間が表示されることを読みましたが、曲が再生されているかどうかに関する情報が必要です。ファイルに書き込むには、この情報が必要です。

後で編集:

長さについて Qt の Phonon を使用しようとしていますが、多くのエラーが発生します。

#include <Phonon/MediaSource>
#include <Phonon/MediaObject>
#include <iostream>
#include <Qstring>

/* stuff */

Phonon::MediaObject *mediaObject = new Phonon::MediaObject();
QString fileName("D:/melodie.mp3");
mediaObject->setCurrentSource(fileName);
cout << mediaObject->totalTime() << endl;

未解決の外部シンボルが大量に発生する

main.obj:-1: エラー: LNK2019: 未解決の外部シンボル "__declspec(dllimport) public: __thiscall Phonon::MediaObject::MediaObject(class QObject *)" (_ imp ??0MediaObject@Phonon@@QAE@PAVQObject@@ @Z) 関数 _main で参照

私は QCreator を使用しています。私のアプリケーションはシンプルで、こんにちはと言うウィンドウだけです (Phonon を使用しない場合は機能します)。実行できません。静的メディアオブジェクトを割り当てました。MediaSource を作成して渡そうとしましたが、機能しません (ここでは、MediaSource* から MediaSource & に変換できないと言っています)。何が問題なのですか?

4

3 に答える 3

1

Phonon::MediaObject::totalTime()ミリ秒単位で曲の長さを取得するために使用できます。

トラックの長さはID3v1またはID3v2の「標準」の一部ではないため、id3libには曲の長さを直接検索する機能はありません。それらは単にタグ付けのためのものです。質問のコードを試したときに0が表示された場合は、それらのタグがまだ設定されていないことを意味している可能性があります。ドキュメントに記載されているように、「...そのようなフレームが見つからない場合、Find()メソッドはNULLポインタを返します。」

于 2012-05-09T22:42:22.830 に答える
1

メディアソースを正しく設定した後、MediaObject::totalTimeを使用します

于 2012-05-09T22:43:13.613 に答える
0

シグナルを使用することをお勧めしますtotalTimeChanged(qint64 newTotalTime)。の状態を手動で確認する必要がないため、トラックの長さをキャプチャするより慎重な方法ですmediaObject

于 2012-08-26T18:45:51.447 に答える