int main() { string dirp, filepath; dirent plikaudio; cout << "podaj ścieżkę do biblioteki: " << flush; getline( cin, dirp ); plikaudio=listujPliki(dirp); filepath = dirp + "/" + plikaudio.d_name; cout << "wczytano plik : "<<filepath << endl; MPEG::File file(filepath.c_str()); if(file.ID3v2Tag()) { ID3v2::FrameList l = file.ID3v2Tag()->frameListMap()["RVAD"]; if(l.isEmpty()) cout << "plik nie posiada tagu replaygain"<< endl; } file.save(); }
QMPlay_Tag::QMPlay_Tag( const char *_fileName ) { using namespace TagLib; fileName = _fileName; isNull = true; canWriteID3 = false; dontUse = false; isFLAC = fileName.right( 5 ) == ".flac"; if ( !isFLAC ) { QByteArray r4 = fileName.right( 4 ); if ( r4 == ".wav" ) { dontUse = true; return; } if ( r4 == ".mp3" ) canWriteID3 = true; } //General tags { Load_FileRef if ( !f->isNull() && f->tag() ) { Tag *tag = f->tag(); title = tag->title(); artist = tag->artist(); album = tag->album(); comment = tag->comment(); genre = tag->genre(); year = tag->year(); track = tag->track(); isNull = false; } delete f; } //ID3v2 picture if ( canWriteID3 ) { Load_MPEG_File ID3v2::Tag *id3v2 = f->ID3v2Tag(); if ( id3v2 && !id3v2->isEmpty() ) { ID3v2::FrameList pict = id3v2->frameList( "APIC" ); if ( !pict.isEmpty() ) { picture = ID3v2::AttachedPictureFrame( pict.front()->render() ).picture(); isNull = false; } } delete f; } //FLAC picture if ( isFLAC ) { Load_FLAC_File if ( f->pictureList().size() ) { FLAC::Picture *p = f->pictureList().front(); if ( p ) { picture = p->data(); isNull = false; } } delete f; } }
/** * Read meta information from id3v2 tags * @param tag: the id3v2 tag * @param p_demux; the demux object * @param p_demux_meta: the demuxer meta * @param p_meta: the meta */ static void ReadMetaFromId3v2( ID3v2::Tag* tag, demux_t* p_demux, demux_meta_t* p_demux_meta, vlc_meta_t* p_meta ) { // Get the unique file identifier ID3v2::FrameList list = tag->frameListMap()["UFID"]; ID3v2::FrameList::Iterator iter; for( iter = list.begin(); iter != list.end(); iter++ ) { ID3v2::UniqueFileIdentifierFrame* p_ufid = dynamic_cast<ID3v2::UniqueFileIdentifierFrame*>(*iter); const char *owner = p_ufid->owner().toCString(); if (!strcmp( owner, "http://musicbrainz.org" )) { /* ID3v2 UFID contains up to 64 bytes binary data * but in our case it will be a '\0' * terminated string */ char psz_ufid[64]; int max_size = __MIN( p_ufid->identifier().size(), 63); strncpy( psz_ufid, p_ufid->identifier().data(), max_size ); psz_ufid[max_size] = '\0'; vlc_meta_SetTrackID( p_meta, psz_ufid ); } } // Get the use text list = tag->frameListMap()["TXXX"]; for( iter = list.begin(); iter != list.end(); iter++ ) { ID3v2::UserTextIdentificationFrame* p_txxx = dynamic_cast<ID3v2::UserTextIdentificationFrame*>(*iter); vlc_meta_AddExtra( p_meta, p_txxx->description().toCString( true ), p_txxx->fieldList().toString().toCString( true ) ); } // Get some more informations #define SET( tagName, metaName ) \ list = tag->frameListMap()[tagName]; \ if( !list.isEmpty() ) \ vlc_meta_Set##metaName( p_meta, \ (*list.begin())->toString().toCString( true ) ); SET( "TCOP", Copyright ); SET( "TENC", EncodedBy ); SET( "TLAN", Language ); SET( "TPUB", Publisher ); #undef SET /* Preferred type of image * The 21 types are defined in id3v2 standard: * http://www.id3.org/id3v2.4.0-frames */ static const int pi_cover_score[] = { 0, /* Other */ 5, /* 32x32 PNG image that should be used as the file icon */ 4, /* File icon of a different size or format. */ 20, /* Front cover image of the album. */ 19, /* Back cover image of the album. */ 13, /* Inside leaflet page of the album. */ 18, /* Image from the album itself. */ 17, /* Picture of the lead artist or soloist. */ 16, /* Picture of the artist or performer. */ 14, /* Picture of the conductor. */ 15, /* Picture of the band or orchestra. */ 9, /* Picture of the composer. */ 8, /* Picture of the lyricist or text writer. */ 7, /* Picture of the recording location or studio. */ 10, /* Picture of the artists during recording. */ 11, /* Picture of the artists during performance. */ 6, /* Picture from a movie or video related to the track. */ 1, /* Picture of a large, coloured fish. */ 12, /* Illustration related to the track. */ 3, /* Logo of the band or performer. */ 2 /* Logo of the publisher (record company). */ }; int i_score = -1; // Try now to get embedded art list = tag->frameListMap()[ "APIC" ]; if( list.isEmpty() ) return; TAB_INIT( p_demux_meta->i_attachments, p_demux_meta->attachments ); for( iter = list.begin(); iter != list.end(); iter++ ) { ID3v2::AttachedPictureFrame* p_apic = dynamic_cast<ID3v2::AttachedPictureFrame*>(*iter); input_attachment_t *p_attachment; const char *psz_mime; char *psz_name, *psz_description; // Get the mime and description of the image. // If the description is empty, take the type as a description psz_mime = p_apic->mimeType().toCString( true ); if( p_apic->description().size() > 0 ) psz_description = strdup( p_apic->description().toCString( true ) ); else { if( asprintf( &psz_description, "%i", p_apic->type() ) == -1 ) psz_description = NULL; } if( !psz_description ) continue; psz_name = psz_description; /* some old iTunes version not only sets incorrectly the mime type * or the description of the image, * but also embeds incorrectly the image. * Recent versions seem to behave correctly */ if( !strncmp( psz_mime, "PNG", 3 ) || !strncmp( psz_name, "\xC2\x89PNG", 5 ) ) { msg_Warn( p_demux, "Invalid picture embedded by broken iTunes version" ); free( psz_description ); continue; } const ByteVector picture = p_apic->picture(); const char *p_data = picture.data(); const unsigned i_data = picture.size(); msg_Dbg( p_demux, "Found embedded art: %s (%s) is %u bytes", psz_name, psz_mime, i_data ); p_attachment = vlc_input_attachment_New( psz_name, psz_mime, psz_description, p_data, i_data ); if( p_attachment ) TAB_APPEND_CAST( (input_attachment_t**), p_demux_meta->i_attachments, p_demux_meta->attachments, p_attachment ); free( psz_description ); if( pi_cover_score[p_apic->type()] > i_score ) { i_score = pi_cover_score[p_apic->type()]; char *psz_url; if( asprintf( &psz_url, "attachment://%s", p_attachment->psz_name ) == -1 ) continue; vlc_meta_SetArtURL( p_meta, psz_url ); free( psz_url ); } } }