|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Исправить ошибку работы с кириллицой в mp3tagger - jar архив |
|
Java - Исправить ошибку работы с кириллицой в mp3tagger - jar архив
|
Пользователь Сообщения: 86 |
Профиль | Отправить PM | Цитировать mp3tagger я использую для экспорта а затем импорта тэга mp3.
Моя задача (почти решена, есть один момент который очень мешает): существующие mp3 файлы с тагами разложенные по папкам экспортнуть tag в текстовый файл, отконвертировать mp3 в wav, затем отконвертировать с помощью lame обратно в mp3 но с переменным битрейдом и заданным качеством, импортировать обратно mp3 tag - для реализации написаны батники. Почему был выбран именно Mp3Tagger: возможность работы с коммандной строки, экспорт/импорт тэга в файл/из файла, настройки можно задать 1 раз через gui, а потом использовать конфиг. Использовать имя файла для промежуточного хранения тага - не катит по причине полноты информации. Этот jar архив умеющий работать с коммандной строкой взят отсюда: http://ostermiller.org/mp3tagger/ Проблема в том что импорт русского текста проходит отлично (если в tag файле прописать под виндой в cp1251 строки - всё импортнётся нормально), а вот экспорт кириллицы кривой - вместо всех символов кириллицы в результирующем mp3 получаем "э" а в экспортированном .tag файле "\uFFFD" Лажа в mp3tagger.jar\com\Ostermiller\Mp3Tagger\Lyric3\Mp3Tags.java в функции getID3() начало - строка 1202 вопросы: 1.меня интересуют значения констант - возможные варианты вместо "ASCII", при вызове String() 2.пробовал ничего не меняя откомпилировать с помощью jdk-1_5_0_02-windows-i586-p.exe - не собирается, вылазит куча ошибок "cannot find symbol" компилировал так: javac.exe mp3tags.java Как правильно скомпилить? 3.как пользоваться дебаггером jdb.exe - есть где-нибудь человеческая инструкция(пошаговое руководство) с примерами? private boolean getID3() throws UnsupportedEncodingException, IOException{ long fileLength; byte[] b; String s; int gen; fileLength = rafMp3.length(); // regular ID3 tag rafMp3.seek(fileLength - 128); //128 bytes at the end of the file b = new byte[128]; rafMp3.read(b); // read those 128 bytes s = new String(b,0,3,"ASCII"); if (s.compareTo("TAG") == 0){ // if there is a ID3 tag it starts with this //the fields are at the regions specified here if ((s = (new String(b,3,30,"ASCII")).trim()).length() > 0) trackName.setHeadline(s); if ((s = (new String(b,33,30,"ASCII")).trim()).length() > 0) artistName.setHeadline(s); if ((s = (new String(b,63,30,"ASCII")).trim()).length() > 0) albumName.setHeadline(s); if ((s = (new String(b,93,4,"ASCII")).trim()).length() > 0) year = s; if (b[125] == 0){ if ((s = (new String(b,97,28,"ASCII")).trim()).length() > 0) comment = s; if ((s = ("" + (0xff & b[126])).trim()).length() > 0) trackNumber = s; } else { if ((s = (new String(b,97,30,"ASCII")).trim()).length() > 0) comment = s; } // the 0xff masks the last part of the byte and treats it like an // unsigned byte. if ((gen = 0xff & b[127]) != GENRE_NONE) // genre is not stored as ASCII! genre = gen; return (true); // found a tag } else { return (false); // didn't find a tag } } |
|
Отправлено: 18:21, 04-06-2008 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать в большинстве случаев - бессмысленная работа по значительному ухудшения качества музыки при незначительной экономии объёмапо хорошему надо записывать теги в ID3v2, он юникодный. cp1251 в id3 вообще никак не регламентирована.
|
Отправлено: 22:55, 04-06-2008 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 86
|
Профиль | Отправить PM | Цитировать У кого mp3плеер на флешевый на 8гиг а то и дисковый на 40-80 тому конечно проблема не актуальна, а в 512-гиг очень даже помогает. По месту выигрывается ~20-30% при исходных 192-320kbps. Это не только сокоащает место на диске но и ускоряет бэкап например. На слух на большинстве треков я не слышу никакой разницы между 160kbps и больше, за редким исключением где 192 таки отличаются. Более 192 вообще не слышу разницу нигде. Перекодированные в vbr с мин=32kbps, макс=320 и quality=2 на слух ни один трек не отличаю от оригинала даже на hi-fi акустике.
Давайте не разводить здесь дискуссию о целесообразности этих действий - ошибка явно в java приложении. Его разработчик просто не предусмотрел использование символов выше 128го в тагах. Mp3Tagv2 он вообще не поддерживает. Вопросы из первого поста попрежнему актуальны. |
Отправлено: 10:45, 05-06-2008 | #3 |
Пользователь Сообщения: 86
|
Профиль | Отправить PM | Цитировать При компиляции пишет вот что:
C:\Appl\jdk\bin>javac mp3tags.java mp3tags.java:37: cannot find symbol symbol : class Headline location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags private Headline trackName; ^ mp3tags.java:38: cannot find symbol symbol : class Headline location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags private Headline artistName; ^ mp3tags.java:39: cannot find symbol symbol : class Headline location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags private Headline albumName; ^ mp3tags.java:43: cannot find symbol symbol : class Lyric location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags private Lyric lyrics; ^ mp3tags.java:86: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags public Mp3Tags(String filename) throws StringTooLongException, IOException, CorruptTagException, UnsupportedEncodingException{ ^ mp3tags.java:86: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags public Mp3Tags(String filename) throws StringTooLongException, IOException, CorruptTagException, UnsupportedEncodingException{ ^ mp3tags.java:500: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags public void newMp3(String filename) throws IOException, CorruptTagException, UnsupportedEncodingException{ ^ mp3tags.java:631: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags public void readTagsFromMp3()throws IOException, UnsupportedEncodingExceptio n, CorruptTagException{ ^ mp3tags.java:891: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags public void writeTagsToMp3() throws IOException, StringTooLongException{ ^ mp3tags.java:1251: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags private boolean getLyrics3() throws UnsupportedEncodingException, IOExceptio n, CorruptTagException{ ^ mp3tags.java:62: cannot find symbol symbol : class Headline location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags trackName = new Headline(); ^ mp3tags.java:63: cannot find symbol symbol : class Headline location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags artistName = new Headline(); ^ mp3tags.java:64: cannot find symbol symbol : class Headline location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags albumName = new Headline(); ^ mp3tags.java:65: cannot find symbol symbol : class Lyric location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags lyrics = new Lyric(); ^ mp3tags.java:897: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new StringTooLongException("Lyrics too long"); ^ mp3tags.java:900: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new StringTooLongException("Information too long"); ^ mp3tags.java:903: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new StringTooLongException("Image too long"); ^ mp3tags.java:906: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new StringTooLongException("Artist name too long"); ^ mp3tags.java:909: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new StringTooLongException("Album length too long"); ^ mp3tags.java:912: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new StringTooLongException("Author length too long"); ^ mp3tags.java:915: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new StringTooLongException("Track name too long"); ^ mp3tags.java:943: operator + cannot be applied to int,Lyric.length length += 18 + lyrics.length(); ^ mp3tags.java:943: inconvertible types found : <nulltype> required: int length += 18 + lyrics.length(); ^ mp3tags.java:967: operator + cannot be applied to int,Headline.length length += 8 + trackName.length(); ^ mp3tags.java:967: inconvertible types found : <nulltype> required: int length += 8 + trackName.length(); ^ mp3tags.java:973: operator + cannot be applied to int,Headline.length length += 8 + artistName.length(); ^ mp3tags.java:973: inconvertible types found : <nulltype> required: int length += 8 + artistName.length(); ^ mp3tags.java:979: operator + cannot be applied to int,Headline.length length += 8 + albumName.length(); ^ mp3tags.java:979: inconvertible types found : <nulltype> required: int length += 8 + albumName.length(); ^ mp3tags.java:1271: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new CorruptTagException("Could not find LYRICSBEGIN delimi ter"); ^ mp3tags.java:1289: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new CorruptTagException("Could not find LYRICSBEGIN de limiter"); ^ mp3tags.java:1297: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new CorruptTagException("Size of a field could not be determined"); ^ mp3tags.java:1301: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new CorruptTagException("Size of a field larger th an space available"); ^ mp3tags.java:1348: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new CorruptTagException("Size of Lyrics3 tag could not be determined"); ^ Note: mp3tags.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: mp3tags.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 34 errors C:\Appl\jdk\bin>javac -Xlint mp3tags.java mp3tags.java:37: cannot find symbol symbol : class Headline location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags private Headline trackName; ^ mp3tags.java:38: cannot find symbol symbol : class Headline location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags private Headline artistName; ^ mp3tags.java:39: cannot find symbol symbol : class Headline location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags private Headline albumName; ^ mp3tags.java:43: cannot find symbol symbol : class Lyric location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags private Lyric lyrics; ^ mp3tags.java:86: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags public Mp3Tags(String filename) throws StringTooLongException, IOException, CorruptTagException, UnsupportedEncodingException{ ^ mp3tags.java:86: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags public Mp3Tags(String filename) throws StringTooLongException, IOException, CorruptTagException, UnsupportedEncodingException{ ^ mp3tags.java:500: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags public void newMp3(String filename) throws IOException, CorruptTagException, UnsupportedEncodingException{ ^ mp3tags.java:631: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags public void readTagsFromMp3()throws IOException, UnsupportedEncodingExceptio n, CorruptTagException{ ^ mp3tags.java:891: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags public void writeTagsToMp3() throws IOException, StringTooLongException{ ^ mp3tags.java:1251: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags private boolean getLyrics3() throws UnsupportedEncodingException, IOExceptio n, CorruptTagException{ ^ mp3tags.java:62: cannot find symbol symbol : class Headline location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags trackName = new Headline(); ^ mp3tags.java:63: cannot find symbol symbol : class Headline location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags artistName = new Headline(); ^ mp3tags.java:64: cannot find symbol symbol : class Headline location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags albumName = new Headline(); ^ mp3tags.java:65: cannot find symbol symbol : class Lyric location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags lyrics = new Lyric(); ^ mp3tags.java:706: warning: [unchecked] unchecked call to addElement(E) as a memb er of the raw type java.util.Vector dirOptions.addElement(optionsToks.nextToken()); ^ mp3tags.java:722: warning: [deprecation] decode(java.lang.String) in java.net.UR LDecoder has been deprecated workingName = URLDecoder.decode(workingName); ^ mp3tags.java:742: warning: [unchecked] unchecked call to addElement(E) as a memb er of the raw type java.util.Vector fieldList.addElement(t.text); ^ mp3tags.java:897: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new StringTooLongException("Lyrics too long"); ^ mp3tags.java:900: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new StringTooLongException("Information too long"); ^ mp3tags.java:903: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new StringTooLongException("Image too long"); ^ mp3tags.java:906: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new StringTooLongException("Artist name too long"); ^ mp3tags.java:909: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new StringTooLongException("Album length too long"); ^ mp3tags.java:912: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new StringTooLongException("Author length too long"); ^ mp3tags.java:915: cannot find symbol symbol : class StringTooLongException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new StringTooLongException("Track name too long"); ^ mp3tags.java:943: operator + cannot be applied to int,Lyric.length length += 18 + lyrics.length(); ^ mp3tags.java:943: inconvertible types found : <nulltype> required: int length += 18 + lyrics.length(); ^ mp3tags.java:967: operator + cannot be applied to int,Headline.length length += 8 + trackName.length(); ^ mp3tags.java:967: inconvertible types found : <nulltype> required: int length += 8 + trackName.length(); ^ mp3tags.java:973: operator + cannot be applied to int,Headline.length length += 8 + artistName.length(); ^ mp3tags.java:973: inconvertible types found : <nulltype> required: int length += 8 + artistName.length(); ^ mp3tags.java:979: operator + cannot be applied to int,Headline.length length += 8 + albumName.length(); ^ mp3tags.java:979: inconvertible types found : <nulltype> required: int length += 8 + albumName.length(); ^ mp3tags.java:1135: warning: [unchecked] unchecked call to addElement(E) as a mem ber of the raw type java.util.Vector v.addElement(new OptionToken(OptionToken.FIELD, fiel d)); ^ mp3tags.java:1142: warning: [unchecked] unchecked call to addElement(E) as a mem ber of the raw type java.util.Vector v.addElement(new OptionToken(OptionToken.DELIM, deli m)); ^ mp3tags.java:1149: warning: [unchecked] unchecked call to addElement(E) as a mem ber of the raw type java.util.Vector v.addElement(new OptionToken(OptionToken.DELIM, deli m)); ^ mp3tags.java:1153: warning: [unchecked] unchecked call to addElement(E) as a mem ber of the raw type java.util.Vector v.addElement(new OptionToken(OptionToken.FIELD, fiel d)); ^ mp3tags.java:1156: warning: [unchecked] unchecked call to addElement(E) as a mem ber of the raw type java.util.Vector v.addElement(new OptionToken(OptionToken.FIELD, "t")); ^ mp3tags.java:1162: warning: [unchecked] unchecked call to addElement(E) as a mem ber of the raw type java.util.Vector v.addElement(new OptionToken(OptionToken.DELIM, deli m)); ^ mp3tags.java:1167: warning: [unchecked] unchecked call to addElement(E) as a mem ber of the raw type java.util.Vector v.addElement(new OptionToken(OptionToken.FIELD, fiel d)); ^ mp3tags.java:1170: warning: [unchecked] unchecked call to addElement(E) as a mem ber of the raw type java.util.Vector v.addElement(new OptionToken(OptionToken.FIELD, "t")); ^ mp3tags.java:1177: warning: [unchecked] unchecked call to addElement(E) as a mem ber of the raw type java.util.Vector v.addElement(new OptionToken(OptionToken.FIELD, field)); ^ mp3tags.java:1184: warning: [unchecked] unchecked call to addElement(E) as a mem ber of the raw type java.util.Vector v.addElement(new OptionToken(OptionToken.DELIM, delim)); ^ mp3tags.java:1188: warning: [unchecked] unchecked call to addElement(E) as a mem ber of the raw type java.util.Vector v.addElement(new OptionToken(OptionToken.FIELD, field)); ^ mp3tags.java:1271: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new CorruptTagException("Could not find LYRICSBEGIN delimi ter"); ^ mp3tags.java:1289: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new CorruptTagException("Could not find LYRICSBEGIN de limiter"); ^ mp3tags.java:1297: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new CorruptTagException("Size of a field could not be determined"); ^ mp3tags.java:1301: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new CorruptTagException("Size of a field larger th an space available"); ^ mp3tags.java:1348: cannot find symbol symbol : class CorruptTagException location: class com.Ostermiller.Mp3Tagger.Lyric3.Mp3Tags throw new CorruptTagException("Size of Lyrics3 tag could not be determined"); ^ 34 errors 14 warnings |
Отправлено: 11:26, 05-06-2008 | #4 |
Пользователь Сообщения: 86
|
Профиль | Отправить PM | Цитировать уже понял что если класс находиться в другом файле надо компилировать только все файлы вместе, а наличие скомпиленых включённых классов в той же папке и исходников никак не помогает.
вот так собирается: javac CorruptTagException.java Headline.java Lyric.java LyricLine.java LyricTime.java Mp3Tags.java StringTooLongException.java Осталось найти возможные варианты замены константы "ASCII" - подскажите какие есть другие значения или как правильно гуглить чтобы найти список констант. |
|
Отправлено: 12:43, 06-06-2008 | #5 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
MySQL - [решено] Помогите исправить ошибку... | Neo+test | Программирование и базы данных | 7 | 27-07-2008 15:31 | |
Прочие БД - как исправить ошибку? | Tosha_l | Программирование и базы данных | 1 | 06-01-2008 19:12 | |
как исправить ошибку? | Millenium | Microsoft Windows 2000/XP | 6 | 28-12-2005 11:22 | |
Помогите исправить ошибку! | Guest | Хочу все знать | 1 | 15-05-2004 16:55 | |
Помогите исправить ошибку! | Guest | Сетевые технологии | 1 | 12-05-2004 10:11 |
|