int main(int argc, char *argv[]) { for(int i = 1; i < argc; i++) { cout << "******************** \"" << argv[i] << "\" ********************" << endl; TagLib::FileRef f(argv[i]); if(!f.isNull() && f.tag()) { TagLib::Tag *tag = f.tag(); cout << "-- TAG (basic) --" << endl; cout << "title - \"" << tag->title() << "\"" << endl; cout << "artist - \"" << tag->artist() << "\"" << endl; cout << "album - \"" << tag->album() << "\"" << endl; cout << "year - \"" << tag->year() << "\"" << endl; cout << "comment - \"" << tag->comment() << "\"" << endl; cout << "track - \"" << tag->track() << "\"" << endl; cout << "genre - \"" << tag->genre() << "\"" << endl; TagLib::PropertyMap tags = f.file()->properties(); unsigned int longest = 0; for(TagLib::PropertyMap::ConstIterator i = tags.begin(); i != tags.end(); ++i) { if (i->first.size() > longest) { longest = i->first.size(); } } cout << "-- TAG (properties) --" << endl; for(TagLib::PropertyMap::ConstIterator i = tags.begin(); i != tags.end(); ++i) { for(TagLib::StringList::ConstIterator j = i->second.begin(); j != i->second.end(); ++j) { cout << left << std::setw(longest) << i->first << " - " << '"' << *j << '"' << endl; } } } if(!f.isNull() && f.audioProperties()) { TagLib::AudioProperties *properties = f.audioProperties(); int seconds = properties->length() % 60; int minutes = (properties->length() - seconds) / 60; cout << "-- AUDIO --" << endl; cout << "bitrate - " << properties->bitrate() << endl; cout << "sample rate - " << properties->sampleRate() << endl; cout << "channels - " << properties->channels() << endl; cout << "length - " << minutes << ":" << setfill('0') << setw(2) << seconds << endl; } } return 0; }
void cMediaInfo::readTagProperties(TagLib::PropertyMap& tags) { QString szID; for(TagLib::PropertyMap::ConstIterator i = tags.begin(); i != tags.end(); ++i) { QStringList szValue; szID = QString::fromStdWString(i->first.toWString()); if(!szID.isEmpty()) { for(TagLib::StringList::ConstIterator j = i->second.begin(); j != i->second.end(); ++j) { QString sz = QString::fromStdWString((*j).toWString()); if(!sz.isEmpty()) { if(!szID.compare("LYRICS")) { sz.replace("\"", "'"); sz.replace("\r\n", "\n"); szValue.append(sz); } else szValue.append(sz.split("\n")); } } if(!szID.isEmpty() && !szValue.isEmpty()) m_TAGPropertiesList.add(szID, szValue); } } }
int handle_file(const char* filepath, const char* filekey, AudioFileRecordStore& record_store) { bool record_exists = record_store.find_record(filekey) != NULL; // Scanning a file for tags is expensive, so only do it if required. if(record_exists && !record_store.record_update_required(filekey)) { // no update reqquired so has been handled. return 1; } TagLib::FileRef f(filepath); if (!f.isNull() && f.tag()) { AudioFileRecord &record = record_store.get_record(filekey); record.update_start(); if (verbose) { TagLib::Tag *tag = f.tag(); std::cout << filepath << endl; std::cout << filekey << endl; std::cout << "-- TAG (basic) --" << endl; std::cout << "title - \"" << tag->title() << "\"" << endl; std::cout << "artist - \"" << tag->artist() << "\"" << endl; std::cout << "album - \"" << tag->album() << "\"" << endl; std::cout << "year - \"" << tag->year() << "\"" << endl; std::cout << "comment - \"" << tag->comment() << "\"" << endl; std::cout << "track - \"" << tag->track() << "\"" << endl; std::cout << "genre - \"" << tag->genre() << "\"" << endl; } TagLib::PropertyMap tags = f.file()->properties(); for(TagLib::PropertyMap::ConstIterator i = tags.begin(); i != tags.end(); ++i) { for(TagLib::StringList::ConstIterator j = i->second.begin(); j != i->second.end(); ++j) { record.update(i->first.toCString(true), j->toCString(true)); } } if (f.audioProperties()) { TagLib::AudioProperties *properties = f.audioProperties(); record.update(audio_tags::BITRATE, properties->bitrate()); record.update(audio_tags::LENGTH, properties->length()); record.update(audio_tags::SAMPLERATE, properties->sampleRate()); record.update(audio_tags::CHANNELS, properties->channels()); } record.update_complete(); return 1; } return 0; }
void MetadataReader::compute() { if (!parameter("filename").isConfigured()) { throw EssentiaException("MetadataReader: 'filename' parameter has not been configured"); } #ifdef _WIN32 int len = MultiByteToWideChar(CP_UTF8, 0, _filename.c_str(), -1, NULL, 0); wchar_t *buf = (wchar_t*)malloc(sizeof(wchar_t)*len); memset(buf, 0, len); MultiByteToWideChar(CP_UTF8, 0, _filename.c_str(), -1, buf, len); TagLib::FileRef f(buf); free(buf); #else TagLib::FileRef f(_filename.c_str()); #endif Pool tagPool; if (f.isNull()) { // in case TagLib can't get metadata out of this file, try some basic PCM approach int pcmSampleRate = 0; int pcmChannels = 0; int pcmBitrate = 0; try { pcmMetadata(_filename, pcmSampleRate, pcmChannels, pcmBitrate); // works only for 16bit wavs/pcm; it should output incorrect value for // 24bit or 32bit float files, therefore, print a warning E_WARNING("MetadataReader: TagLib could not get metadata for this file. The output bitrate is estimated treating the input as 16-bit PCM, and therefore may be incorrect."); } catch (EssentiaException& e) { if (parameter("failOnError").toBool()) throw EssentiaException("MetadataReader: File does not exist or does not seem to be of a supported filetype. ", e.what()); } _title.get() = ""; _artist.get() = ""; _album.get() = ""; _comment.get() = ""; _genre.get() = ""; _track.get() = ""; _date.get() = ""; _tagPool.get() = tagPool; _duration.get() = 0; _bitrate.get() = pcmBitrate; _sampleRate.get() = pcmSampleRate; _channels.get() = pcmChannels; return; } TagLib::PropertyMap tags = f.file()->properties(); _title.get() = formatString(tags["TITLE"]); _artist.get() = formatString(tags["ARTIST"]); _album.get() = formatString(tags["ALBUM"]); _comment.get() = formatString(tags["COMMENT"]); _genre.get() = formatString(tags["GENRE"]); _track.get() = formatString(tags["TRACKNUMBER"]); _date.get() = formatString(tags["DATE"]); // populate tag pool for(TagLib::PropertyMap::ConstIterator i = tags.begin(); i != tags.end(); ++i) { string key = i->first.to8Bit(true); if (!_filterMetadata || std::find(_filterMetadataTags.begin(), _filterMetadataTags.end(), key) != _filterMetadataTags.end()) { // remove '.' chars which are used in Pool descriptor names as a separator // convert to lowercase std::replace(key.begin(), key.end(), '.', '_'); std::transform(key.begin(), key.end(), key.begin(), ::tolower); key = _tagPoolName + "." + key; for(TagLib::StringList::ConstIterator str = i->second.begin(); str != i->second.end(); ++str) { tagPool.add(key, str->to8Bit(true)); } } } _tagPool.get() = tagPool; _duration.get() = f.audioProperties()->length(); _bitrate.get() = f.audioProperties()->bitrate(); _sampleRate.get() = f.audioProperties()->sampleRate(); _channels.get() = f.audioProperties()->channels(); // fix for taglib incorrectly returning the bitrate for wave files string ext = toLower(_filename.substr(_filename.size()-3)); if (ext == "wav") { _bitrate.get() = _bitrate.get() * 1024 / 1000; } }