Hello Сизов,
Thursday, June 16, 2005, 10:05:50 AM, you wrote:
>> Не могу найти нормальную rpm-ку и flac-плагин к нему, на sf.net только
>> исходники которые мне скомпилить так и не удалось, точнее сам bmp
>> скомпилился но когда я его запускаю появляется белый прямоугольник,
>> похоже что он не может загрузить скин.
ССВ> я AmaroK пользую, мне нравиться, перекодировка тэгов присутсвует
Только id3v1. id3v2 не перекодируется по причинами идеологического
характера. Более того, если в файле есть одновременно id3v1 и id3v2,
берётся id3v1 (что меня совершенно не устраивает ввиду фиксированной
длины полей).
Впрочем, на каждую идеологическую заморочку есть грязный хак,
приводящий её в соответствие с Real World (примечание: просьба за
качество хака ногами не пинать :)
amarok-1.2.1/amarok/src/metabundle.cpp.old 2005-02-27 23:03:16.000000000
+0300
+++ amarok-1.2.1/amarok/src/metabundle.cpp 2005-04-04 13:06:30.017072208
+0400
@ -12,6 +12,7 @@
#include "metabundle.h"
#include "playlistitem.h"
#include <qfile.h> //decodePath()
+#include <qtextcodec.h>
#include <taglib/fileref.h>
#include <taglib/id3v1genres.h> //used to load genre list
#include <taglib/mpegfile.h>
@ -153,6 +154,11 @@
}
}
+QString recode (QString x, QTextCodec *codec) {
+ QCString qcs(x.latin1());
+ return codec->toUnicode(qcs);
+}
+
void
MetaBundle::readTags( TagLib::AudioProperties::ReadStyle readStyle )
{
@ -162,6 +168,7 @@
const QString path = m_url.path();
TagLib::FileRef fileref;
TagLib::Tag *tag = 0;
+ bool isv2 = false;
if( AmarokConfig::recodeID3v1Tags() && path.endsWith( ".mp3", false ) )
{
@ -171,7 +178,8 @@
if( mpeg->isValid() )
// we prefer ID3v1 over ID3v2 if recoding tags because
// apparently this is what people who ignore ID3 standards want
- tag = mpeg->ID3v1Tag() ? (TagLib::Tag*)mpeg->ID3v1Tag() : (TagLib::Tag*)mpeg->ID3v2Tag();
+ tag = (TagLib::Tag*)mpeg->ID3v2Tag();
+ isv2 = mpeg->ID3v2Tag();
}
else {
@ -180,6 +188,12 @@
if( !fileref.isNull() )
tag = fileref.tag();
}
+
+ QTextCodec *codec = 0;
+
+ if( AmarokConfig::recodeID3v1Tags() && AmarokConfig::recodeEncoding() >
0 ) {
+ codec = QTextCodec::codecForIndex (AmarokConfig::recodeEncoding());
+ }
if( !fileref.isNull() ) {
if ( tag ) {
@ -195,6 +209,12 @@
m_isValidMedia = true;
}
+ if (path.endsWith( ".mp3", false ) && codec && isv2) {
+ m_title = recode( m_title, codec );
+ m_artist = recode( m_artist, codec );
+ m_album = recode( m_album, codec );
+ m_comment = recode( m_comment, codec );
+ }
init( fileref.audioProperties() );
}