本文整理汇总了C++中MusicMetadata::Length方法的典型用法代码示例。如果您正苦于以下问题:C++ MusicMetadata::Length方法的具体用法?C++ MusicMetadata::Length怎么用?C++ MusicMetadata::Length使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MusicMetadata
的用法示例。
在下文中一共展示了MusicMetadata::Length方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getStats
void Playlist::getStats(uint *trackCount, uint *totalLength, uint currenttrack, uint *playedLength) const
{
uint64_t total = 0, played = 0;
*trackCount = m_shuffledSongs.size();
if ((int)currenttrack >= m_shuffledSongs.size())
currenttrack = 0;
uint track = 0;
SongList::const_iterator it = m_shuffledSongs.begin();
for (; it != m_shuffledSongs.end(); ++it, ++track)
{
MusicMetadata *mdata = (*it);
if (mdata)
{
total += mdata->Length();
if (track < currenttrack)
played += mdata->Length();
}
}
if (playedLength)
*playedLength = played / 1000;
*totalLength = total / 1000;
}
示例2: computeSize
void Playlist::computeSize(double &size_in_MB, double &size_in_sec)
{
//double child_MB;
//double child_sec;
// Clear return values
size_in_MB = 0.0;
size_in_sec = 0.0;
SongList::const_iterator it = m_songs.begin();
for (; it != m_songs.end(); ++it)
{
if ((*it)->isCDTrack())
continue;
// Normal track
MusicMetadata *tmpdata = (*it);
if (tmpdata)
{
if (tmpdata->Length() > 0)
size_in_sec += tmpdata->Length();
else
LOG(VB_GENERAL, LOG_ERR, "Computing track lengths. "
"One track <=0");
// Check tmpdata->Filename
QFileInfo finfo(tmpdata->Filename());
size_in_MB += finfo.size() / 1000000;
}
}
}
示例3: ScanFinished
void Ripper::ScanFinished()
{
delete m_scanThread;
m_scanThread = nullptr;
m_tracks->clear();
if (m_decoder)
{
MusicMetadata *metadata;
bool isCompilation = false;
m_artistName.clear();
m_albumName.clear();
m_genreName.clear();
m_year.clear();
for (int trackno = 0; trackno < m_decoder->getNumTracks(); trackno++)
{
RipTrack *ripTrack = new RipTrack;
metadata = m_decoder->getMetadata(trackno + 1);
if (metadata)
{
ripTrack->metadata = metadata;
ripTrack->length = metadata->Length();
if (metadata->Compilation())
{
isCompilation = true;
m_artistName = metadata->CompilationArtist();
}
else if (m_artistName.isEmpty())
{
m_artistName = metadata->Artist();
}
if (m_albumName.isEmpty())
m_albumName = metadata->Album();
if (m_genreName.isEmpty() && !metadata->Genre().isEmpty())
m_genreName = metadata->Genre();
if (m_year.isEmpty() && metadata->Year() > 0)
m_year = QString::number(metadata->Year());
QString title = metadata->Title();
ripTrack->isNew = isNewTune(m_artistName, m_albumName, title);
ripTrack->active = ripTrack->isNew;
m_tracks->push_back(ripTrack);
}
else
delete ripTrack;
}
m_artistEdit->SetText(m_artistName);
m_albumEdit->SetText(m_albumName);
m_genreEdit->SetText(m_genreName);
m_yearEdit->SetText(m_year);
m_compilationCheck->SetCheckState(isCompilation);
if (!isCompilation)
m_switchTitleArtist->SetVisible(false);
else
m_switchTitleArtist->SetVisible(true);
}
BuildFocusList();
updateTrackList();
CloseBusyPopup();
}
示例4: MusicMetadata
//.........这里部分代码省略.........
if (!popm)
{
popm = findPOPM(tag, email);
}
// Fallback to using any POPM tag we can find
if (!popm)
{
if (!tag->frameListMap()["POPM"].isEmpty())
popm = dynamic_cast<PopularimeterFrame *>
(tag->frameListMap()["POPM"].front());
}
if (popm)
{
int rating = popm->rating();
rating = lroundf(static_cast<float>(rating) / 255.0f * 10.0f);
metadata->setRating(rating);
metadata->setPlaycount(popm->counter());
}
// Look for MusicBrainz Album+Artist ID in TXXX Frame
UserTextIdentificationFrame *musicbrainz = find(tag,
"MusicBrainz Album Artist Id");
if (musicbrainz)
{
// If the MusicBrainz ID is the special "Various Artists" ID
// then compilation is TRUE
if (!compilation && !musicbrainz->fieldList().isEmpty())
{
TagLib::StringList l = musicbrainz->fieldList();
for (TagLib::StringList::ConstIterator it = l.begin(); it != l.end(); it++)
{
QString ID = TStringToQString((*it));
if (ID == MYTH_MUSICBRAINZ_ALBUMARTIST_UUID)
{
compilation = true;
break;
}
}
}
}
// TLEN - Ignored intentionally, some encoders write bad values
// e.g. Lame under certain circumstances will always write a length of
// 27 hours
// Length
if (!tag->frameListMap()["TLEN"].isEmpty())
{
int length = tag->frameListMap()["TLEN"].front()->toString().toInt();
LOG(VB_FILE, LOG_DEBUG,
QString("MetaIOID3::read: Length for '%1' from tag is '%2'\n").arg(filename).arg(length));
}
metadata->setCompilation(compilation);
metadata->setLength(getTrackLength(m_file));
// The number of tracks on the album, if supplied
if (!tag->frameListMap()["TRCK"].isEmpty())
{
QString trackFrame = TStringToQString(
tag->frameListMap()["TRCK"].front()->toString())
.trimmed();
int trackCount = trackFrame.section('/', -1).toInt();
if (trackCount > 0)
metadata->setTrackCount(trackCount);
}
LOG(VB_FILE, LOG_DEBUG,
QString("MetaIOID3::read: Length for '%1' from properties is '%2'\n").arg(filename).arg(metadata->Length()));
// Look for MythTVLastPlayed in TXXX Frame
UserTextIdentificationFrame *lastplayed = find(tag, "MythTVLastPlayed");
if (lastplayed)
{
QString lastPlayStr = TStringToQString(lastplayed->toString());
metadata->setLastPlay(QDateTime::fromString(lastPlayStr, Qt::ISODate));
}
// Part of a set
if (!tag->frameListMap()["TPOS"].isEmpty())
{
QString pos = TStringToQString(
tag->frameListMap()["TPOS"].front()->toString()).trimmed();
int discNumber = pos.section('/', 0, 0).toInt();
int discCount = pos.section('/', -1).toInt();
if (discNumber > 0)
metadata->setDiscNumber(discNumber);
if (discCount > 0)
metadata->setDiscCount(discCount);
}
return metadata;
}
示例5: CalcTrackLength
static int CalcTrackLength(const MythUtilCommandLineParser &cmdline)
{
if (cmdline.toString("songid").isEmpty())
{
LOG(VB_GENERAL, LOG_ERR, "Missing --songid option");
return GENERIC_EXIT_INVALID_CMDLINE;
}
int songID = cmdline.toInt("songid");
MusicMetadata *mdata = MusicMetadata::createFromID(songID);
if (!mdata)
{
LOG(VB_GENERAL, LOG_ERR, QString("Cannot find metadata for trackid: %1").arg(songID));
return GENERIC_EXIT_NOT_OK;
}
QString musicFile = mdata->getLocalFilename();
if (musicFile.isEmpty() || !QFile::exists(musicFile))
{
LOG(VB_GENERAL, LOG_ERR, QString("Cannot find file for trackid: %1").arg(songID));
return GENERIC_EXIT_NOT_OK;
}
av_register_all();
AVFormatContext *inputFC = NULL;
AVInputFormat *fmt = NULL;
// Open track
LOG(VB_GENERAL, LOG_DEBUG, QString("CalcTrackLength: Opening '%1'")
.arg(musicFile));
QByteArray inFileBA = musicFile.toLocal8Bit();
int ret = avformat_open_input(&inputFC, inFileBA.constData(), fmt, NULL);
if (ret)
{
LOG(VB_GENERAL, LOG_ERR, "CalcTrackLength: Couldn't open input file" +
ENO);
return GENERIC_EXIT_NOT_OK;
}
// Getting stream information
ret = avformat_find_stream_info(inputFC, NULL);
if (ret < 0)
{
LOG(VB_GENERAL, LOG_ERR,
QString("CalcTrackLength: Couldn't get stream info, error #%1").arg(ret));
avformat_close_input(&inputFC);
inputFC = NULL;
return GENERIC_EXIT_NOT_OK;;
}
int duration = 0;
long long time = 0;
for (uint i = 0; i < inputFC->nb_streams; i++)
{
AVStream *st = inputFC->streams[i];
char buf[256];
avcodec_string(buf, sizeof(buf), st->codec, false);
switch (inputFC->streams[i]->codec->codec_type)
{
case AVMEDIA_TYPE_AUDIO:
{
AVPacket pkt;
av_init_packet(&pkt);
while (av_read_frame(inputFC, &pkt) >= 0)
{
if (pkt.stream_index == (int)i)
time = time + pkt.duration;
av_free_packet(&pkt);
}
duration = time * av_q2d(inputFC->streams[i]->time_base);
break;
}
default:
LOG(VB_GENERAL, LOG_ERR,
QString("Skipping unsupported codec %1 on stream %2")
.arg(inputFC->streams[i]->codec->codec_type).arg(i));
break;
}
}
// Close input file
avformat_close_input(&inputFC);
inputFC = NULL;
if (mdata->Length() / 1000 != duration)
{
//.........这里部分代码省略.........