本文整理汇总了C++中MusicMetadata::setLength方法的典型用法代码示例。如果您正苦于以下问题:C++ MusicMetadata::setLength方法的具体用法?C++ MusicMetadata::setLength怎么用?C++ MusicMetadata::setLength使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MusicMetadata
的用法示例。
在下文中一共展示了MusicMetadata::setLength方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: shoutcastMeta
void DecoderIOFactoryShoutCast::shoutcastMeta(const QString &metadata)
{
LOG(VB_PLAYBACK, LOG_INFO,
QString("DecoderIOFactoryShoutCast: metadata changed - %1")
.arg(metadata));
ShoutCastMetaParser parser;
parser.setMetaFormat(getMetadata().MetadataFormat());
ShoutCastMetaMap meta_map = parser.parseMeta(metadata);
MusicMetadata mdata = getMetadata();
mdata.setTitle(meta_map["title"]);
mdata.setArtist(meta_map["artist"]);
mdata.setAlbum(meta_map["album"]);
mdata.setLength(-1);
DecoderHandlerEvent ev(DecoderHandlerEvent::Meta, mdata);
dispatch(ev);
}
示例2: checkMetatdata
void avfDecoder::checkMetatdata(void)
{
uint8_t *pdata = nullptr;
if (av_opt_get(m_inputContext->getContext(), "icy_metadata_packet", AV_OPT_SEARCH_CHILDREN, &pdata) >= 0)
{
QString s = QString::fromUtf8((const char*) pdata);
if (m_lastMetadata != s)
{
m_lastMetadata = s;
LOG(VB_PLAYBACK, LOG_INFO, QString("avfDecoder: shoutcast metadata changed - %1").arg(m_lastMetadata));
ShoutCastMetaParser parser;
parser.setMetaFormat(gPlayer->getDecoderHandler()->getMetadata().MetadataFormat());
ShoutCastMetaMap meta_map = parser.parseMeta(m_lastMetadata);
MusicMetadata mdata = gPlayer->getDecoderHandler()->getMetadata();
mdata.setTitle(meta_map["title"]);
mdata.setArtist(meta_map["artist"]);
mdata.setAlbum(meta_map["album"]);
mdata.setLength(-1);
DecoderHandlerEvent ev(DecoderHandlerEvent::Meta, mdata);
dispatch(ev);
}
av_free(pdata);
}
if (m_inputContext->getContext()->pb)
{
int available = (int) (m_inputContext->getContext()->pb->buf_end - m_inputContext->getContext()->pb->buffer);
int maxSize = m_inputContext->getContext()->pb->buffer_size;
DecoderHandlerEvent ev(DecoderHandlerEvent::BufferStatus, available, maxSize);
dispatch(ev);
}
}
示例3: run
//.........这里部分代码省略.........
if (isCancelled())
break;
QApplication::postEvent(
m_parent,
new RipStatusEvent(RipStatusEvent::kStatusTextEvent,
QString("Track %1 of %2")
.arg(trackno + 1).arg(m_tracks->size())));
QApplication::postEvent(
m_parent,
new RipStatusEvent(RipStatusEvent::kTrackProgressEvent, 0));
track = m_tracks->at(trackno)->metadata;
if (track)
{
textstatus = track->Title();
QApplication::postEvent(
m_parent,
new RipStatusEvent(
RipStatusEvent::kTrackTextEvent, textstatus));
QApplication::postEvent(
m_parent,
new RipStatusEvent(RipStatusEvent::kTrackProgressEvent, 0));
QApplication::postEvent(
m_parent,
new RipStatusEvent(RipStatusEvent::kTrackPercentEvent, 0));
// do we need to start a new file?
if (m_tracks->at(trackno)->active)
{
titleTrack = track;
titleTrack->setLength(m_tracks->at(trackno)->length);
if (m_quality < 3)
{
if (encodertype == "mp3")
{
outfile = QString("track%1.mp3").arg(trackno);
encoder.reset(new LameEncoder(saveDir + outfile, m_quality,
titleTrack, mp3usevbr));
}
else // ogg
{
outfile = QString("track%1.ogg").arg(trackno);
encoder.reset(new VorbisEncoder(saveDir + outfile, m_quality,
titleTrack));
}
}
else
{
outfile = QString("track%1.flac").arg(trackno);
encoder.reset(new FlacEncoder(saveDir + outfile, m_quality,
titleTrack));
}
if (!encoder->isValid())
{
QApplication::postEvent(
m_parent,
new RipStatusEvent(
RipStatusEvent::kEncoderErrorEvent,
"Encoder failed to open file for writing"));
LOG(VB_GENERAL, LOG_ERR, "MythMusic: Encoder failed"
" to open file for writing");
示例4: initialize
bool avfDecoder::initialize()
{
m_inited = m_userStop = m_finish = false;
m_freq = m_bitrate = 0;
m_stat = m_channels = 0;
m_seekTime = -1.0;
// give up if we dont have an audiooutput set
if (!output())
{
error("avfDecoder: initialise called with a NULL audiooutput");
return false;
}
if (!m_outputBuffer)
{
error("avfDecoder: couldn't allocate memory");
return false;
}
output()->PauseUntilBuffered();
if (m_inputContext)
delete m_inputContext;
m_inputContext = new RemoteAVFormatContext(getURL());
if (!m_inputContext->isOpen())
{
error(QString("Could not open url (%1)").arg(m_url));
deinit();
return false;
}
// if this is a ice/shoutcast or MMS stream start polling for metadata changes and buffer status
if (getURL().startsWith("http://") || getURL().startsWith("mmsh://"))
{
m_mdataTimer = new QTimer;
m_mdataTimer->setSingleShot(false);
connect(m_mdataTimer, SIGNAL(timeout()), this, SLOT(checkMetatdata()));
m_mdataTimer->start(500);
// we don't get metadata updates for MMS streams so grab the metadata from the headers
if (getURL().startsWith("mmsh://"))
{
AVDictionaryEntry *tag = nullptr;
MusicMetadata mdata = gPlayer->getDecoderHandler()->getMetadata();
tag = av_dict_get(m_inputContext->getContext()->metadata, "title", tag, AV_DICT_IGNORE_SUFFIX);
mdata.setTitle(tag->value);
tag = av_dict_get(m_inputContext->getContext()->metadata, "artist", tag, AV_DICT_IGNORE_SUFFIX);
mdata.setArtist(tag->value);
mdata.setAlbum("");
mdata.setLength(-1);
DecoderHandlerEvent ev(DecoderHandlerEvent::Meta, mdata);
dispatch(ev);
}
}
// determine the stream format
// this also populates information needed for metadata
if (avformat_find_stream_info(m_inputContext->getContext(), nullptr) < 0)
{
error("Could not determine the stream format.");
deinit();
return false;
}
// let FFmpeg finds the best audio stream (should only be one), also catter
// should the file/stream not be an audio one
AVCodec *codec;
int selTrack = av_find_best_stream(m_inputContext->getContext(), AVMEDIA_TYPE_AUDIO,
-1, -1, &codec, 0);
if (selTrack < 0)
{
error(QString("Could not find audio stream."));
deinit();
return false;
}
// Store the audio codec of the stream
m_audioDec = gCodecMap->getCodecContext
(m_inputContext->getContext()->streams[selTrack]);
// Store the input format of the context
m_inputFormat = m_inputContext->getContext()->iformat;
if (avcodec_open2(m_audioDec, codec, nullptr) < 0)
{
error(QString("Could not open audio codec: %1")
.arg(m_audioDec->codec_id));
deinit();
return false;
}
//.........这里部分代码省略.........
示例5: 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;
}
示例6: CalcTrackLength
//.........这里部分代码省略.........
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)
{
LOG(VB_GENERAL, LOG_INFO, QString("The length of this track in the database was %1s "
"it is now %2s").arg(mdata->Length() / 1000).arg(duration));
// update the track length in the database
mdata->setLength(duration * 1000);
mdata->dumpToDatabase();
// tell any clients that the metadata for this track has changed
gCoreContext->SendMessage(QString("MUSIC_METADATA_CHANGED %1").arg(songID));
}
else
{
LOG(VB_GENERAL, LOG_INFO, QString("The length of this track is unchanged %1s")
.arg(mdata->Length() / 1000));
}
return GENERIC_EXIT_OK;
}