24#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
25#define right Qt::right
56const quint32 CKID_RIFF = 0x46464952;
57const quint32 CKID_LIST = 0x5453494c;
58const quint32 CKID_INFO = 0x4f464e49;
59const quint32 CKID_RMID = 0x44494d52;
60const quint32 CKID_data = 0x61746164;
61const quint32 CKID_DISP = 0x50534944;
84 QFile file(m_fileName = fileName);
85 file.open(QIODevice::ReadOnly);
86 QDataStream ds(&file);
100 m_stream->setByteOrder(QDataStream::LittleEndian);
105QString Rmidi::toString(quint32 ckid)
107 QByteArray data(
reinterpret_cast<char *
>(&ckid),
sizeof(quint32));
108 return QString::fromLatin1(data);
111QByteArray Rmidi::readByteArray(
int size)
114 char *buffer =
new char[size];
115 m_stream->readRawData(buffer, size);
116 QByteArray ba(buffer);
121void Rmidi::skip(quint32 cktype,
int size)
125 m_stream->skipRawData(size);
128quint32 Rmidi::readExpectedChunk(quint32 cktype)
130 quint32 chunkType, len = 0;
131 *m_stream >> chunkType;
132 if (chunkType == cktype) {
149quint32 Rmidi::readChunk(quint32& chunkType)
152 *m_stream >> chunkType;
162quint32 Rmidi::readChunkID()
165 *m_stream >> chunkID;
172void Rmidi::processINFO(
int size)
177 while ((size > 0) && !m_stream->atEnd()) {
178 length = readChunk(chunkID);
181 QString cktype = toString(chunkID);
182 QByteArray data = readByteArray(length);
187void Rmidi::processList(
int size)
191 if (m_stream->atEnd())
return;
192 chunkID = readChunkID();
203void Rmidi::processRMID(
int size)
208 while ((size > 0) && !m_stream->atEnd()) {
209 length = readChunk(chunkID);
213 processData(
"RMID", length);
219 skip(chunkID, length);
222 skip(chunkID, length);
228void Rmidi::processData(
const QString& dataType,
int size)
231 QByteArray memdata(size,
'\0');
232 m_stream->readRawData(memdata.data(), size);
240 quint32 length = readExpectedChunk(CKID_RIFF);
242 chunkID = readChunkID();
250 qWarning() <<
"Unsupported format";
251 skip(chunkID, length);
The QObject class is the base class of all Qt objects.
Rmidi(QObject *parent=nullptr)
Constructor.
virtual ~Rmidi()
Destructor.
void readFromStream(QDataStream *ds)
Reads a stream.
void signalRiffData(const QString &dataType, const QByteArray &data)
signalRiffData is emitted for each RMID data element
void signalRiffInfo(const QString &infoType, const QByteArray &info)
signalRMidInfo is emitted for each RIFF INFO element
void readFromFile(QString fileName)
Reads a stream from a disk file.