JustAudio/io/aud_file.cpp

67 lines
1.1 KiB
C++
Raw Normal View History

#include "aud_file.h"
AudFile::AudFile(QObject *parent) : QFile(parent)
{
offset = 0;
}
AudFile::~AudFile()
{
close();
}
bool AudFile::openFile(const QString &path)
{
close();
setFileName(path);
bool ret = open(QFile::ReadOnly);
if (ret)
{
offset = 0;
if (peek(3) == "ID3")
{
QByteArray header = read(10);
QByteArray intBytes = header.mid(6);
quint64 num = 0;
quint64 bit = 1;
offset += 10;
if (header[5] & 16) //Footer flag check
{
offset += 10;
}
for (int i = intBytes.size() - 1; i >= 0; --i)
{
int byte = intBytes[i];
for (int inBit = 1; inBit <= 64; inBit *= 2, bit *= 2)
{
if ((byte & inBit) != 0) num |= bit;
}
}
offset += num;
}
seek(0);
}
return ret;
}
bool AudFile::seek(qint64 off)
{
return QFile::seek(offset + off);
}
qint64 AudFile::size() const
{
return QFile::size() - offset;
}