JustAudio/io/aud_file.cpp
Maurice O'Neal 679fc61feb I've updated the icons to a new hallow outline transparent look. added
stop, next file, previous file buttons along with the added feasures the
buttons represent. i've also added png versions of all of the icons just
in case the svg versions are not practical to use. i also fully built
out a tray icon functionality so the application can now minimize to
system tray. also updated the app logo to a new flat icon type sinewave
look. then finally, i've added the restore button to the tray icon so it
will restore the window back in front from the tray.
2016-10-23 21:26:58 -04:00

108 lines
1.8 KiB
C++

#include "aud_file.h"
AudFile::AudFile(QObject *parent) : QFile(parent)
{
offset = 0;
buffRate = 0;
init = true;
}
AudFile::~AudFile()
{
close();
}
bool AudFile::openFile(const QString &path)
{
close();
init = true;
buffRate = 0;
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)
{
qint64 newPos = offset + off;
if (init)
{
if ((off) && (!buffRate))
{
buffRate = off;
emit duration(getDuration());
}
if (newPos >= size())
{
init = false;
}
}
else
{
emit posChanged(pos());
if (newPos >= size())
{
QTimer::singleShot(2000, this, SLOT(delayFinished()));
}
}
return QFile::seek(newPos);
}
qint64 AudFile::getOffset()
{
return offset;
}
qint64 AudFile::getDuration()
{
return ((size() - offset) / buffRate) * 1000;
}
void AudFile::delayFinished()
{
emit endOfPlayback();
}