Προς το περιεχόμενο

How to: patch bugged package


g1annis

Προτεινόμενες αναρτήσεις

Σε αυτό το θέμα, είχε γίνει κουβέντα, για το πως γίνεται μαζική μετατροπή των tags από iso-8859-7 ή windows-1253 σε unicode-utf-8. Εκείνο είχε ξεκινήσει για το Amarok, οπότε εγώ ανοίγω ένα άλλο θέμα, για να μάθουμε πως εφαρμόζονται τα patches γενικώς.

 

Λοιπόν, μάλλον η λύση βρέθηκε στη μαζική encoding στα id3 tags βρέθηκε:

Γράφτηκα στην mailing list του easytag και τους εξήγησα το πρόβλημα. Μου στείλανε το εξής mail.

Indeed, your version of Id3lib contains the UTF-16 bug...

You must recompile it with this patch :

http://downloads.sourceforge.net/easytag/patch_id3lib_3.8.3_UTF16_writing_bug.diff

 

available from the page :

http://sourceforge.net/project/showfiles.php?group_id=5216

 

Βέβαια, εγώ δεν έχω καμία ιδέα για το τι θα κάνω αυτά τα αρχεία που μου υπέδειξε ο τύπος.

 

Μπορεί κάποιος να το κάνει λίγο πιο σαφές?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

firewalker σ' ευχαριστώ για την άμεση απάντηση, αλλά δεν πολυκατάλαβα. Τι εννοείς βάζουμε το patch μέσα στον φάκελο src? Σε ποιό src? Το id3lib μου έχει εγκατασταθεί όπως δείχνει το παρακάτω και όχι σε κάποιο src.

>g1annis@SovietKong:/$ locate id3lib
/var/lib/dpkg/info/id3lib.list
/usr/local/include/id3/id3lib_streams.h
/usr/local/include/id3/id3lib_frame.h
/usr/local/include/id3/id3lib_strings.h

Αν γίνεται να μου το διευκρινίσεις λίγο ακόμα?

 

Ελπίζω εσένα να σου φάνηκε χρήσιμο. Δούλεψε? Το δοκίμασες?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Κατεβάζουμε το πακέτο με τα sources από εδώ:

 

http://downloads.sourceforge.net/easytag/id3lib-3.8.3.tar.gz?use_mirror=belnet

 

Το κάνουμε extract με την εντολή tar -xvf id3lib-3.8.3.tar.gz. Ανοίγουμε τον φάκελο id3lib-3.8.3 που δημιουργείτε και τοποθετούμε το patch. Στην συνέχεια μπαίνουμε από κονσόλα στον φάκελο id3lib-3.8.3 και δίνουμε την εντολή patch -Np1 -i patch_id3lib_3.8.3_UTF16_writing_bug.diff. Μετά μέσα από τον φάκελο id3lib-3.8.3 δίνουμε διαδοχικά τις εντολές ./configure, make, make check. Στην συνέχεια με δικαιώματα root δίνουμε την εντολή make install για την εγκατάσταση. Τώρα αν η διανομή μας έχει κάποιο build system (π.χ. ArchLinux) είναι ποιο εύκολο να χρησιμοποιήσουμε αυτό.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έκανα το patch, μετά έκανα compile το πεκέτο, το έκανα ένα πακέτο deb με το checkinstall και το εγκατέστησα.

 

Δε διόθωσε τίποτα. Εξακολουθώ να μην μπορώ να μετατρέψω τα tags από iso-8859 σε utf-8 ή utf-16

 

Εσένα σου δούλεψε? Δηλαδή το έβαλες και λειτούργησε?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το patch στο οποίο σε παραπέμψανε είναι άσχετο. Όπως είχα εξηγήσει στο προηγούμενο θέμα, το πρόβλημα είναι ότι η id3lib δεν υποστήριζε, και εξακολουθεί να μην υποστηρίζει id3v2.4 tags, και τα tags που θα γράφονται με id3lib δε θα μπορεί ποτέ να τα διαβάσει το amarok. Αν θες, δοκίμασε το παρακάτω - χρωστούμενο - perl script:

>
#!/usr/bin/perl -w

use Audio::TagLib;
use Text::Iconv;
use warnings;
use strict;

my $i = Audio::TagLib::ID3v2::FrameFactory->instance();
$i->setDefaultTextEncoding("UTF8");
print $i->defaultTextEncoding(), "\n";
my $f = Audio::TagLib::FileRef->new($ARGV[0]);
my $translator = Text::Iconv->new("iso8859-7", "UTF8");
my $temp;

my $artist = $f->tag()->artist();
my $title = $f->tag()->title();
my $genre = $f->tag()->genre();
my $album = $f->tag()->album();
my $comment = $f->tag()->comment();

$temp = $artist->toCString();

my $newArtist = Audio::TagLib::String->new($temp, "UTF8");
$f->tag()->setArtist($newArtist);

$temp = $title->toCString();
my $newTitle = Audio::TagLib::String->new($temp, "UTF8");
$f->tag()->setTitle($newTitle);

$temp = $genre->to8Bit();
$temp = $translator->convert($temp);
my $newGenre = Audio::TagLib::String->new($temp, "UTF8");
$f->tag()->setGenre($newGenre);

$temp = $album->toCString();
my $newAlbum = Audio::TagLib::String->new($temp, "UTF8");
$f->tag()->setAlbum($newAlbum);

$temp = $comment->toCString();
my $newComment = Audio::TagLib::String->new($temp, "UTF8");
$f->tag()->setComment($newComment);

$f->save();

Για να λειτουργήσει χρειάζεται τα Audio::TagLib και Text::Iconv perl modules. Το σώζεις σε ένα αρχείο (π.χ. mp3fix.pl), το κάνεις chmod +x και το εκτελείς με όρισμα το αρχείο που έχει ελληνικά tags σε iso8859-7.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το πρόβλημα είναι ότι πολλοί audio players (Amarok, Exaile κλπ) πλέον δεν υποστιρίζουν όλες της κωδικοποιήσεις χαρακτήρων (σωστά κατά τη γνώμη μου) και για να βλέπω κανονικά τα tags πρέπει να μετατρέψω όλα τα tags που βρίσκονταν σε iso-8859-7 σε unicode-utf-8.

 

Το id3lib, που χρησιμοποιεί το easytag σύμφωνα και με όσα μου είπε μέσω της mailing list ο ίδιος ο προγραμματιστής του έχει ένα bug. Παραπάνω, στο 1ο post δίνω 2 links που μου έστειλε ο ίδιος για να διορθώσω το bug. Ο apoikos παρακάτω, που έχει ασχοληθεί με το easytag, λέει πως είναι άσχετα τα patches.

 

Apoike, θα δοκιμάσω το script σου και θα σου πω. Γίνεται να το εφαρμόσω μαζικά, με κανα -r ή -R ας πούμε στο σύνολο των αρχείων ενός φακέλου?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Apoike, θα δοκιμάσω το script σου και θα σου πω. Γίνεται να το εφαρμόσω μαζικά, με κανα -r ή -R ας πούμε στο σύνολο των αρχείων ενός φακέλου?

Όχι, δεν έχει τέτοιο switch, μπορείς όμως να κάνεις ένα:

>
$ cd /folder/with/music
$ find . -iname '*.mp3' -exec /path/to/mp3fix.pl \{\} \;

που θα σου κάνει ακριβώς αυτό. Κράτα όμως καλύτερα ένα αντίγραφο των αρχείων σου πρώτα, γιατί δεν το έχω πολυδοκιμάσει.

 

@firewalker

Δυστυχώς, πακέτα δεν υπάρχουν για την Audio::TagLib, υπάρχει όμως στο community το perl-text-iconv που χρειάζεται. Για την taglib, δες εδώ: http://search.cpan.org/dist/Audio-TagLib/

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

To έσωσα ως mp3fix.pl και το έβαλα στο ~/Desktop/testcd

Μέσα σε αυτόν τον φάκελο έβαλα και ένα iso-8859 mp3

 

Πως θα το τρέξω? Δηλαδη, πως θα συντάξω την εντολή?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...