.
This commit is contained in:
+110
-276
@@ -1,296 +1,130 @@
|
||||
#ifndef CMEDIAINFO_H
|
||||
#define CMEDIAINFO_H
|
||||
|
||||
|
||||
#include <QObject>
|
||||
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <QList>
|
||||
#include <QLabel>
|
||||
#include <QDateTime>
|
||||
#include <QMetaType>
|
||||
#include <QSqlDatabase>
|
||||
|
||||
#include <taglib/tbytevector.h>
|
||||
#include <taglib/apefile.h>
|
||||
#include <taglib/asffile.h>
|
||||
#include <taglib/flacfile.h>
|
||||
#include <taglib/mp4file.h>
|
||||
#include <taglib/mpcfile.h>
|
||||
#include <taglib/mpegfile.h>
|
||||
#include <taglib/trueaudiofile.h>
|
||||
#include <taglib/wavpackfile.h>
|
||||
#include <taglib/wavfile.h>
|
||||
|
||||
#include <taglib/id3v1tag.h>
|
||||
#include <taglib/id3v2tag.h>
|
||||
#include <taglib/id3v2frame.h>
|
||||
#include <taglib/id3v2header.h>
|
||||
#include <taglib/apetag.h>
|
||||
#include <taglib/tpropertymap.h>
|
||||
|
||||
#include <taglib/attachedpictureframe.h>
|
||||
#include <taglib/synchronizedlyricsframe.h>
|
||||
#include <taglib/unsynchronizedlyricsframe.h>
|
||||
|
||||
#include "ctag.h"
|
||||
#include "cstring.h"
|
||||
#include "cpixmap.h"
|
||||
#include <stdint.h>
|
||||
#include "libid3tag/id3tag.h"
|
||||
#include "cid3field.h"
|
||||
|
||||
|
||||
using namespace TagLib;
|
||||
#define WITH_PICTURE
|
||||
|
||||
|
||||
class cMediaInfo : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum MEDIA_TYPE
|
||||
{
|
||||
MEDIA_TYPE_UNKNOWN = 0,
|
||||
MEDIA_TYPE_APE = 1, // APE
|
||||
MEDIA_TYPE_ASF = 2, // WMA
|
||||
MEDIA_TYPE_FLAC = 3, // FLAC
|
||||
MEDIA_TYPE_MP4 = 4, // AAC, MP4, M4A
|
||||
MEDIA_TYPE_MPC = 5, // MPC
|
||||
MEDIA_TYPE_MPEG = 6, // MP1, MP2, MP3
|
||||
MEDIA_TYPE_TRUEAUDIO = 7, // TTA
|
||||
MEDIA_TYPE_WAVPACK = 8, // WV
|
||||
MEDIA_TYPE_WAV = 9, // WAV
|
||||
};
|
||||
enum CHANNEL_MODE
|
||||
{
|
||||
CHANNEL_MODE_UNKNOWN = 0,
|
||||
CHANNEL_MODE_STEREO = 1,
|
||||
CHANNEL_MODE_JOINTSTEREO = 2,
|
||||
CHANNEL_MODE_MONO = 3,
|
||||
CHANNEL_MODE_DUALMONO = 4
|
||||
};
|
||||
|
||||
explicit cMediaInfo(bool bAPE = true, bool bID3V1 = true, bool bID3V2 = true, bool bProperties = true, QObject *parent = 0);
|
||||
explicit cMediaInfo(QObject *parent = 0);
|
||||
~cMediaInfo();
|
||||
|
||||
bool readFromFile(const QString& szFileName);
|
||||
bool readFromDB();
|
||||
bool writeToDB();
|
||||
|
||||
bool isValid();
|
||||
|
||||
//
|
||||
QString fileName();
|
||||
qint64 fileSize();
|
||||
QDateTime fileDate();
|
||||
MEDIA_TYPE fileType1();
|
||||
QString fileType1Text();
|
||||
|
||||
//
|
||||
qint32 length1();
|
||||
QString length1Text();
|
||||
qint16 bitrate();
|
||||
QString bitrateText();
|
||||
qint32 sampleRate();
|
||||
QString sampleRateText();
|
||||
qint16 channels();
|
||||
QString channelsText();
|
||||
qint16 bitsPerSample();
|
||||
QString bitsPerSampleText();
|
||||
qint16 layer();
|
||||
QString layerText();
|
||||
qint16 version();
|
||||
QString versionText();
|
||||
qint16 sampleWidth();
|
||||
QString sampleWidthText();
|
||||
qint64 sampleFrames();
|
||||
QString sampleFramesText();
|
||||
bool isEncrypted();
|
||||
qint16 trackGain();
|
||||
qint16 albumGain();
|
||||
qint16 trackPeak();
|
||||
qint16 albumPeak();
|
||||
bool protectionEnabled();
|
||||
CHANNEL_MODE channelMode();
|
||||
QString channelModeText();
|
||||
bool isCopyrighted();
|
||||
bool isOriginal();
|
||||
|
||||
// Identification Frames
|
||||
QString contentGroupDescription(); // TIT1
|
||||
QString title(); // TIT2
|
||||
QString subTitle(); // TIT3
|
||||
QString album(); // TALB
|
||||
QString originalAlbum(); // TOAL
|
||||
QString trackNumber(); // TRCK
|
||||
QString partOfSet(); // TPOS
|
||||
QString subTitleOfSet(); // TSST
|
||||
QString internationalStandardRecordingCode(); // TSRC
|
||||
|
||||
// Involved Persons Frames
|
||||
QString leadArtist(); // TPE1
|
||||
QString band(); // TPE2
|
||||
QString conductor(); // TPE3
|
||||
QStringList interpret(); // TPE4
|
||||
QString originalArtist(); // TOPE
|
||||
QString textWriter(); // TEXT
|
||||
QString originalTextWriter(); // TOLY
|
||||
QString composer(); // TCOM
|
||||
//cString21List musicianCredits(); // TMCL
|
||||
//cString21List involvedPeople(); // TIPL
|
||||
QString encodedBy(); // TENC
|
||||
|
||||
// Derived and subjective properties frames
|
||||
qint16 beatsPerMinute(); // TBPM
|
||||
qint32 length(); // TLEN
|
||||
// TKEY
|
||||
QStringList language(); // TLAN
|
||||
QStringList contentType(); // TCON
|
||||
QString fileType(); // TFLT
|
||||
QStringList mediaType(); // TMED
|
||||
QString mood(); // TMOO
|
||||
|
||||
// Rights and license frames
|
||||
QString copyright(); // TCOP
|
||||
QString producedNotice(); // TPRO
|
||||
QString publisher(); // TPUB
|
||||
QString fileOwner(); // TOWN
|
||||
QString internetRadioStationName(); // TRSN
|
||||
QString internetRadioStationOwner(); // TRSO
|
||||
|
||||
// Other text frames
|
||||
QString originalFilename(); // TOFN
|
||||
qint32 playlistDelay(); // TDLY
|
||||
QDateTime encodingTime(); // TDEN
|
||||
QDateTime originalReleaseTime(); // TDOR
|
||||
QDateTime recordingTime(); // TDRC
|
||||
QDateTime releaseTime(); // TDRL
|
||||
QDateTime taggingTime(); // TDTG
|
||||
QStringList swhwSettings(); // TSSE
|
||||
QString albumSortOrder(); // TSOA
|
||||
QString performerSortOrder(); // TSOP
|
||||
QString titleSortOrder(); // TSOT
|
||||
|
||||
cStringTimeList synchronizedLyrics(); // SYLT
|
||||
QStringList unsynchronizedLyrics(); // USLT
|
||||
|
||||
cPixmapList pixmaps(); // APIC
|
||||
signals:
|
||||
|
||||
public slots:
|
||||
|
||||
protected:
|
||||
bool m_bAPE;
|
||||
bool m_bID3V1;
|
||||
bool m_bID3V2;
|
||||
bool m_bProperties;
|
||||
bool m_bIsValid;
|
||||
QString m_szFileName;
|
||||
MEDIA_TYPE m_fileType;
|
||||
|
||||
qint32 m_iLength;
|
||||
qint16 m_iBitrate;
|
||||
qint32 m_iSampleRate;
|
||||
qint16 m_iChannels;
|
||||
qint16 m_iBitsPerSample;
|
||||
qint16 m_iLayer;
|
||||
qint16 m_iVersion;
|
||||
qint16 m_iSampleWidth;
|
||||
qint64 m_ullSampleFrames;
|
||||
bool m_bIsEncrypted;
|
||||
qint16 m_iTrackGain;
|
||||
qint16 m_iAlbumGain;
|
||||
qint16 m_iTrackPeak;
|
||||
qint16 m_iAlbumPeak;
|
||||
bool m_bProtectionEnabled;
|
||||
CHANNEL_MODE m_channelMode;
|
||||
bool m_bIsCopyrighted;
|
||||
bool m_bIsOriginal;
|
||||
|
||||
// ID3V1
|
||||
QStringList m_szAlbumArtistList;
|
||||
QStringList m_szArtistList;
|
||||
QString m_szComment;
|
||||
QStringList m_szComposerList;
|
||||
QStringList m_szGenreList;
|
||||
QString m_szRating;
|
||||
qint16 m_iYear;
|
||||
|
||||
// Identification Frames
|
||||
QString m_szContentGroupDescription; // TIT1
|
||||
QString m_szTitle; // TIT2
|
||||
QString m_szSubTitle; // TIT3
|
||||
QString m_szAlbum; // TALB
|
||||
QString m_szOriginalAlbum; // TOAL
|
||||
QString m_szTrackNumber; // TRCK
|
||||
QString m_szPartOfSet; // TPOS
|
||||
QString m_szSubTitleOfSet; // TSST
|
||||
QString m_szInternationalStandardRecordingCode; // TSRC
|
||||
|
||||
// Involved Persons Frames
|
||||
QString m_szLeadArtist; // TPE1
|
||||
QString m_szBand; // TPE2
|
||||
QString m_szConductor; // TPE3
|
||||
QStringList m_szInterpret; // TPE4
|
||||
QString m_szOriginalArtist; // TOPE
|
||||
QString m_szTextWriter; // TEXT
|
||||
QString m_szOriginalTextWriter; // TOLY
|
||||
QString m_szComposer; // TCOM
|
||||
QString m_szEncodedBy; // TENC
|
||||
|
||||
// Derrived and subjective properties frames
|
||||
qint16 m_iBeatsPerMinute; // TBPM
|
||||
// qint16 m_iLength; // TLEN
|
||||
// TKEY
|
||||
QStringList m_szLanguage; // TLAN
|
||||
QStringList m_szContentType; // TCON
|
||||
QString m_szFileType; // TFLT
|
||||
QStringList m_szMediaType; // TMED
|
||||
QString m_szMood; // TMOO
|
||||
|
||||
// Rights and license frames
|
||||
QString m_szCopyright; // TCOP
|
||||
QString m_szProducedNotice; // TPRO
|
||||
QString m_szPublisher; // TPUB
|
||||
QString m_szFileOwner; // TOWN
|
||||
QString m_szInternetRadioStationName; // TRSN
|
||||
QString m_szInternetRadioStationOwner; // TRSO
|
||||
|
||||
// Other text frames
|
||||
QString m_szOriginalFilename; // TOFN
|
||||
qint32 m_iPlaylistDelay; // TDLY
|
||||
QDateTime m_encodingTime; // TDEN
|
||||
QDateTime m_originalReleaseTime; // TDOR
|
||||
QDateTime m_recordingTime; // TDRC
|
||||
QDateTime m_releaseTime; // TDRL
|
||||
QDateTime m_taggingTime; // TDTG
|
||||
QStringList m_szswhwSettings; // TSSE
|
||||
QString m_szAlbumSortOrder; // TSOA
|
||||
QString m_szPerformerSortOrder; // TSOP
|
||||
QString m_szTitleSortOrder; // TSOT
|
||||
|
||||
cStringTimeList m_szSynchronizedLyrics; // SYLT
|
||||
QString m_szSynchronizedLyricsLanguage;
|
||||
QString m_szSynchronizedLyricsDescription;
|
||||
QStringList m_szUnsynchronizedLyrics; // USLT
|
||||
QString m_szUnsynchronizedLyricsLanguage;
|
||||
QString m_szUnsynchronizedLyricsDescription;
|
||||
|
||||
//ID3V2
|
||||
qint32 m_iID3v2Version;
|
||||
qint32 m_iID3v2Revision;
|
||||
qint32 m_iID3v2Size;
|
||||
//cTAGList m_TAGv2List;
|
||||
cTAGList m_TAGAPEList;
|
||||
cTAGList m_TAGPropertiesList;
|
||||
|
||||
cPixmapList m_pixmapList;
|
||||
|
||||
void clear();
|
||||
|
||||
void readTagV1(ID3v1::Tag* lpTag);
|
||||
void readTagV2(ID3v2::Tag* lpTag);
|
||||
void readTagAPE(APE::Tag* lpTag);
|
||||
void readTagProperties(TagLib::PropertyMap& tags);
|
||||
void importFromFile(const QString& szFileName);
|
||||
|
||||
QDateTime str2TS(const QString& sz);
|
||||
void setFileName(const QString& szFileName);
|
||||
QString getFileName();
|
||||
|
||||
qint32 writeFilename();
|
||||
void setFileCreated(const QDateTime& FileCreated);
|
||||
QDateTime getFileCreated();
|
||||
|
||||
void setFileModified(const QDateTime& FileModified);
|
||||
QDateTime getFileModified();
|
||||
|
||||
void setFileSize(uint64_t dwFileSize);
|
||||
uint64_t getFileSize();
|
||||
|
||||
QString getTAGName(uint16_t dwTag);
|
||||
QString getTAGShortName(uint16_t dwTag);
|
||||
|
||||
void setBitrate(uint16_t dwBitrate);
|
||||
uint16_t getBitrate();
|
||||
|
||||
void setSamplerate(uint16_t dwSamplerate);
|
||||
uint16_t getSamplerate();
|
||||
|
||||
void setChannels(uint16_t dwChannels);
|
||||
uint16_t getChannels();
|
||||
|
||||
void setSeconds(uint16_t dwSeconds);
|
||||
uint16_t getSeconds();
|
||||
|
||||
void setMPEG(uint16_t dwMPEG);
|
||||
uint16_t getMPEG();
|
||||
|
||||
void setVersion(uint16_t dwVersion);
|
||||
uint16_t getVersion();
|
||||
|
||||
void setLayerVersion(uint16_t dwLayerVersion);
|
||||
uint16_t getLayerVersion();
|
||||
|
||||
void setMode(uint16_t dwMode);
|
||||
uint16_t getMode();
|
||||
|
||||
void setValid(bool bValid);
|
||||
bool getValid();
|
||||
|
||||
void setTAG(uint16_t dwTag, uint16_t dwData);
|
||||
void setTAG(uint16_t dwTag, const QString& szData);
|
||||
void setTAG(uint16_t dwTag, const QVariant& v);
|
||||
QVariant getTAG(uint16_t dwTag);
|
||||
uint16_t getTAGi(uint16_t dwTag);
|
||||
QString getTAGs(uint16_t dwTag);
|
||||
bool getTAG(uint16_t dwTag, QString& szData);
|
||||
bool getTAG(uint16_t dwTag, QString& szName, QString& szData);
|
||||
bool getTAG(uint16_t dwTag, uint16_t& dwData);
|
||||
bool getTAG(uint16_t dwTag, QString& szName, uint16_t& dwData);
|
||||
bool getTAG(uint16_t dwTag, id3_byte_t* dwData, uint32_t& dwLen);
|
||||
bool getTAG(uint16_t dwTag, QString& szName, id3_byte_t* dwData, uint32_t& dwLen);
|
||||
bool getTAG(uint16_t dwTag, QPixmap& Pixmap);
|
||||
bool getTAG(uint16_t dwTag, QString& szName, QPixmap& Pixmap);
|
||||
bool getTAG(uint16_t dwTag, cPictureList& PictureList);
|
||||
bool getTAG(uint16_t dwTag, QString& szName, cPictureList& PictureList);
|
||||
|
||||
static uint16_t tagIDFromShortName(const QString& szTAG);
|
||||
protected:
|
||||
QString m_szFileName;
|
||||
QDateTime m_FileCreated;
|
||||
QDateTime m_FileModified;
|
||||
uint64_t m_dwFileSize;
|
||||
cID3FieldList m_ID3FieldList;
|
||||
uint16_t m_dwBitrate;
|
||||
uint16_t m_dwSamplerate;
|
||||
uint16_t m_dwChannels;
|
||||
uint16_t m_dwSeconds;
|
||||
uint16_t m_dwMPEG;
|
||||
uint16_t m_dwVersion;
|
||||
uint16_t m_dwLayerVersion;
|
||||
uint16_t m_dwMode;
|
||||
bool m_bValid;
|
||||
|
||||
void readFileInformation(const QString& szFileName);
|
||||
void importInformation(struct id3_tag* lpTag);
|
||||
uint16_t tagID(char* lpszTagName);
|
||||
QString tag2String(struct id3_frame* lpID3Frame, uint16_t dwField);
|
||||
QString tag2LyricsString(struct id3_frame* lpID3Frame);
|
||||
|
||||
void initFields();
|
||||
signals:
|
||||
|
||||
public slots:
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(cMediaInfo*);
|
||||
|
||||
class cMediaInfoList : public QList<cMediaInfo *>
|
||||
{
|
||||
public:
|
||||
cMediaInfoList();
|
||||
|
||||
cMediaInfo* add(const QString& szFileName, QObject *parent = 0);
|
||||
cMediaInfo* add(const QString& szFileName, cMediaInfo* lpMediaInfo, QObject *parent = 0);
|
||||
cMediaInfo* get(const QString& szFileName);
|
||||
|
||||
protected:
|
||||
void initFields();
|
||||
};
|
||||
|
||||
#endif // CMEDIAINFO_H
|
||||
|
||||
Reference in New Issue
Block a user