Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Cannot write changes to file using MP3::Mplib through CGI

by Ryszard (Priest)
on Apr 25, 2004 at 13:42 UTC ( #347966=perlquestion: print w/replies, xml ) Need Help??

Ryszard has asked for the wisdom of the Perl Monks concerning the following question:

I've struck a problem. I'm using MP3::Mplib and interactively it works just fine and dandy, however via a browser, it doesnt. It will read the info from the MP3, but not write to it, nor return any error.

I'm using apache, the u/g is nobody:nobody, the file is nobody:nobody, i've even set the perms to 777 all the way down the tree, still nothing.

The docs mention a true value on success, and that is certainly true if i check $mp3->error, infact the output is a hash ref with {album => 2}

I'm at a bit of a loss, and if anyone can shed a bit of light, i'd be greatful.

sub write_tag { my $self = shift; my %args = @_; my $mp3 = MP3::Mplib->new($args{mp3}) || return "Unable to update +$args{mp3}: $!"; my @mp3ary = split('/', $args{mp3}); $mp3->set_v1tag({ year => $args{year} , artist => $args{artist}, album => $args{album} , genre => $args{genre} , title => pop @mp3ary , }, &ISO_8859_1); my $v1tag = $mp3->get_v1tag; return $v1tag; }

PS, yes i am aware of all the things involved with interacting with the FS via HTTP.

20040425 Edit by BazB: Changed title from 'MP3::Mplib'

Replies are listed 'Best First'.
Re: Cannot write changes to file using MP3::Mplib through CGI
by Steve_p (Priest) on Apr 25, 2004 at 14:34 UTC

    I took a look at the MP3::Mplib, and to clarify what you have above, $mp3->set_v1tag() returns false if it fails. You can check the error of with $mp3->error().

    if($mp3->set_v1tag({ year => $args{year} , artist => $args{artist}, album => $args{album} , genre => $args{genre} , title => pop @mp3ary , }, &ISO_8859_1)) { return mp3->get_v1tag; } else { return $mp3->error(); }
      I have actually done that, (and commented on it in my OP), but not referenced it in the code sample explicitly.
      and that is certainly true if i check $mp3->error, infact the output is a hash ref with {album => 2}

        After some discussion in the CB, let's look at the facts...

        • $mp3->set_v1tag() returns true
        • $mp3->error() is returning {album => 2 }
        • $mp3->get_v1tag() returns an empty hashref

        Looking at the doc's for MP3::Mplib, there are various constants used for the error codes, which are available in mplib.h. From this define,

        #define MP_EFNF 2

        the modules saying that "album" is not a valid tag for v1. A look at the XS code for the module give the answer pretty quickly.

        if (strcmp(key, "ALBUM") == 0) { content = mp_assemble_text_content(val, enc); if ((err = mp_set_content(new_tag, MP_ALBUM, content)) != +0) sv_catpvf(mp3_lib_err, "%s\034%i", "ALBUM", err); continue; }

        Try switching your tags to uppercase and see what happens. The code is looking for all uppercase hash keys and there doesn't seem to be any code attempting to uppercase the hash keys at all.

        OK, so the problem is not likely in the function shown above. What does the calling function get back?

Re: Cannot write changes to file using MP3::Mplib through CGI
by Ryszard (Priest) on Apr 25, 2004 at 17:10 UTC
    After a big of wrangling (and with the much appreciated help of Steve_p) i've ditched MP3::Mplib had a look at MP3::Tag, and pretty much got it working 1st go.
      Hi there, It is the same for me. I can't write with set_v1tag(). Not at all. And no error! set_v2tag() is working proberly.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://347966]
Approved by Happy-the-monk
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (3)
As of 2021-04-10 14:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?