QString PlaybackControls::getTitle(QString file) { QString field; ID3_Tag mTag(file.toStdString().c_str()); ID3_Frame* myFrame = mTag.Find(ID3FID_TITLE); if (myFrame) { ID3_Field* myField = myFrame->GetField(ID3FN_TEXT); if (myField) { field = myField->GetRawText(); } } return field; }
String id3::v2::getString(const ID3_Frame* frame, ID3_FieldID fldName) { if (!frame) { return ""; } ID3_Field* fp = frame->GetField(fldName); if (!fp) { return ""; } ID3_TextEnc enc = fp->GetEncoding(); fp->SetEncoding(ID3TE_ASCII); String text(fp->GetRawText(), fp->Size()); fp->SetEncoding(enc); return text; }
MP3Data * MP3DataGenerator::readMetadata( const char * p_filePath) { // Set up file connection. myID3_Tag = new ID3_Tag(); myID3_Tag->Link( p_filePath); // Storage with default initialization. MP3Data * myMP3Data = new MP3Data(); myMP3Data->setAll( "<undefinded>"); // Retrieve metadata. ID3_Tag::Iterator * tagIter = myID3_Tag->CreateIterator(); ID3_Frame * myFrame = NULL; while( NULL != ( myFrame = tagIter->GetNext())) { if( NULL != myFrame) { ID3_Field * myField = myFrame->GetField( ID3FN_TEXT); // Check if current frame is part of the set aka a field of interest. std::set<ID3_FrameID>::iterator current = interestingID3_FrameIDs->find( myFrame->GetID()); if ( NULL != myField && current != interestingID3_FrameIDs->end()) { ID3_FrameID_LUT * myLUT = new ID3_FrameID_LUT(); std::string frameRealname = std::string( myLUT->getRealname( myFrame->GetID())); // @TODO Show encoding in gui (optional) if( myField->GetEncoding() == ID3TE_ASCII || ID3TE_ISO8859_1) { encoding += frameRealname + ": ISO8859_1 , "; // Genre needs to be converted. if( myFrame->GetID() == ID3FID_CONTENTTYPE) // ID3_FrameID = 32 { const char * genre = myField->GetRawText(); // ID3V1 genre has is an int surrounded by round brackets; ID3V2 genre is text. unsigned int genreIntegerAlias = removeBrackets( genre); if( genreIntegerAlias < ID3_NR_OF_V1_GENRES && genre[0] == '(') myMP3Data->setGenre( ID3_v1_genre_description[ genreIntegerAlias]); else myMP3Data->setGenre( genre); } // All other tags. else if( myFrame->GetID() == ID3FID_TITLE) myMP3Data->setTitle( myField->GetRawText()); else if( myFrame->GetID() == ID3FID_ALBUM) myMP3Data->setAlbum( myField->GetRawText()); else if( myFrame->GetID() == ID3FID_YEAR) myMP3Data->setYear( myField->GetRawText()); else if( myFrame->GetID() == ID3FID_TRACKNUM) myMP3Data->setTracknumber( myField->GetRawText()); else if( myFrame->GetID() == ID3FID_LEADARTIST) myMP3Data->setArtist( myField->GetRawText()); } else if( myField->GetEncoding() == ID3TE_UTF8) { encoding += frameRealname + ": utf8 , "; myMP3Data->setAll( "<unicode utf8 encoding>"); } else if( myField->GetEncoding() == ID3TE_UNICODE || ID3TE_UTF16) { encoding += frameRealname + ": utf16 ,"; // @TODO Conversion to std::string ... myField->GetRawUnicodeText(); myMP3Data->setAll( "<unicode utf16 encoding>"); } else if( myField->GetEncoding() == ID3TE_UTF16BE) { encoding += frameRealname + ": utf16be , "; myMP3Data->setAll( "<unicode utf16be encoding>"); } else if( myField->GetEncoding() == ID3TE_NUMENCODINGS) { encoding += frameRealname + ": numencodings , "; myMP3Data->setAll( "<numencoding>"); } else { encoding += frameRealname + ": unknown , "; myMP3Data->setAll( "<<unknown encoding>"); } } } } // Retrieve file path and file name. myMP3Data->setFilepath( p_filePath); myMP3Data->setFilename( getFilename( p_filePath).c_str()); return myMP3Data; }