¿Cuál es la mejor manera de obtener la información de CDDB para un CD de audio en Perl?

StackOverflow https://stackoverflow.com/questions/2264723

  •  20-09-2019
  •  | 
  •  

Pregunta

¿Cuál es la mejor manera de conseguir el cd-título y los CD-track-nombres de un CD de audio? Probé este módulo, pero no funcionó.

#!/usr/bin/env perl
use warnings;
use strict;
use CDDB_get qw( get_cddb );

my %config;
$config{CDDB_HOST} = "freedb.freedb.org";
$config{CDDB_PORT} = 8880;
$config{CDDB_MODE} = "cddb";
$config{CD_DEVICE} = "/dev/sr1";

# user interaction welcome?
$config{input} = 1;

my %cd = get_cddb( \%config ); # line 16

print "$_ : $cd{$_}\n" for keys %cd;

unless( defined $cd{title} ) {
    die "no cddb entry found";
}

print "artist: $cd{artist}\n";
print "title: $cd{title}\n";
print "category: $cd{cat}\n";
print "cddbid: $cd{id}\n";
print "trackno: $cd{tno}\n";

my $n = 1;
for my $i ( @{$cd{track}} ) {
    print "track $n: $i\n";
    $n++;
}

# OUT:
# Odd number of elements in hash assignment at ./cddb_get.pl line 16.
# Use of uninitialized value in list assignment at ./cddb_get.pl line 16.
# Use of uninitialized value in concatenation (.) or string at ./cddb_get.pl line 18.
#  :
# no cddb entry found at ./cddb_get.pl line 21.
¿Fue útil?

Solución

Trate de poner

BEGIN { $CDDB_get::debug = 1 }

antes de la línea use CDDB_get con el fin de obtener información de depuración en STDERR.

Otros consejos

¿Está seguro de la URL API para FreeDB es correcto en el módulo?

Se puede tratar de HTTP en lugar de CDDBP?

la documentación FreeDB :

  

Configure su CDDB1- o freedb-enterado   software para señalar freedb.freedb.org   (Servidor freedb Aleatorio) como su   CDDB / freedb-servidor.

     

Todos los servidores oficiales son freedb   cddbp corriendo en el puerto 8880 y HTTP en   el puerto 80. La ruta de acceso http-es   /~cddb/cddb.cgi.

Me gustaría considerar la búsqueda de información sobre musicbrainz.org lugar.

El uso de MusicBrainz :: ID de disco para encontrar el ID de disco de un CD y WebService :: MusicBrainz para recuperar los datos es muy fácil:

#!/usr/bin/perl

use strict;
use warnings;

use MusicBrainz::DiscID;
use WebService::MusicBrainz;

my $discid=MusicBrainz::DiscID->new;
if ( !$discid->read ) {
    print STDERR "Error: " . $discid->error_msg . "\n";
    exit 1;
}
print "DiscID: " . $discid->id . "\n";

my $service=WebService::MusicBrainz->new_release;
my $response=$service->search({ DISCID=>$discid->id });
my $release=$response->release;

print "ARTIST: " . $release->artist->name . "\n";
print "ALBUM:  " . $release->title . "\n";
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top