Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Saber el UPC de un CD de audio (https://www.clubdelphi.com/foros/showthread.php?t=43250)

MON___ 06-05-2007 00:38:40

Saber el UPC de un CD de audio
 
Tengo dos unidades de CD ROM (D - E), que muestro en un comboBox. Introduzco un CD Audio en una de ellas (supongamos que lo he introducido en E) y la selecciono en el Combo para (pulsando un botón) obtener el UPC ("UNIVERSAL PRUDUCT CODE") del disco. Para ello he creado la siguiente rutina

Código Delphi [-]
function obtenerUPC : string;
var
   buffer : array[0...MAX_PATH] of char;
begin
   mciSendString('open cdaudio', nil, 0, 0);
   mciSendString('info cdaudio upc', buffer, sizeof(buffer), 0);
   result := StrPas(buffer);
end;

La duda que tengo: ¿qué me falta en esa función para indicar que me debe dar el UPC del disco introducido en E y no en D?

cHackAll 07-05-2007 18:57:59

No estoy seguro pero...
 
Hace un par de años hice un CDEject, que expulsaba el CD con el sistema MCI, lo malo de ésto es que solo me funcionaba con una única unidad, la que el Güindos reconocia como unidad de Audio.. la otra no la tomaba en cuenta y nunca llegue a expulsarla hasta que utilice otra tecnología. Explicame un poco mas de el UPC, me parece que se puede obtener el dato con lectura absoluta.

Suerte.

MON___ 07-05-2007 21:49:43

Saber el UPC de un CD de audio
 
Cita:

Empezado por cHackAll
Hace un par de años hice un CDEject, que expulsaba el CD con el sistema MCI, lo malo de ésto es que solo me funcionaba con una única unidad, la que el Güindos reconocia como unidad de Audio.. la otra no la tomaba en cuenta y nunca llegue a expulsarla hasta que utilice otra tecnología. Explicame un poco mas de el UPC, me parece que se puede obtener el dato con lectura absoluta.

Suerte.

El UPC o "Universal Product Code", como indica su nombre, es un código (numérico) que llevan los CD de AUDIO . ¿Para qué sirve? Por ejemplo, hay reproductores (el WINAMP y muchos otros) que leyendo ese código lo envian a una base de datos para obtener los títulos de los "tracks" u otros datos del disco.

cHackAll 07-05-2007 22:33:03

Ok, pero
 
No me refiero a eso, hago una busqueda, define, etc. y se que es... pero quisiera especificamente un ejemplo.

Y la segunda duda que tengo es: Tengo entendido que tienes dos unidades D y E... tu funcion te retorna de las dos unidades? osea pones un CD de audio original en la D, usas tu funcion y te retorna XXxXxX... la pones en la E y tambien te retorna lo mismo?

Tengo entendido que no todos los CDs lo leen, hice la prueba tu código en mi PC y en 2+ y no me retorna nada!

cHackAll 07-05-2007 23:51:36

Solución
 
Tengo entendido que no solo tendrás problemas pues no todos las lectoras leen la UPC, si no que no todos los CDs de audio tienen dicho código; te aconsejo usar "Identity", que (si no me equivovo) retorna solo la serie del disco pero en teoría es unica.

Lo que necesitas para UPC es:

Código Delphi [-]
uses MMSystem;
 
var
 Buffer: array [0..31] of Char;
 Open: TMCI_Open_Parms = (lpstrDeviceType: 'CDAudio');
 Info: TMCI_Info_Parms = (lpstrReturn: @Buffer; dwRetSize: SizeOf(Buffer));
 
function GetUPC(Drive: Char): string;
begin
 Result := '';
 Open.lpstrElementName := PChar(string(Drive + ':'));
 if mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE or MCI_OPEN_ELEMENT, Longint(@Open)) <> 0 then Exit;
 mciSendCommand(Open.wDeviceID, MCI_INFO, MCI_INFO_MEDIA_UPC, Longint(@Info));
 mciSendCommand(Open.wDeviceID, MCI_CLOSE, MCI_OPEN_TYPE or MCI_OPEN_ELEMENT, Longint(@Open));
 Result := Buffer;
end;

Por si te sirva te dejo http://msdn2.microsoft.com/en-us/library/ms712580.aspx

PD: No se si se puede con cadenas MCI, pero si te gusta revisa http://msdn2.microsoft.com/en-us/library/ms712587.aspx

Suerte!

MaMu 12-04-2008 00:10:39

Cita:

Empezado por cHackAll (Mensaje 199490)
Tengo entendido que no solo tendrás problemas pues no todos las lectoras leen la UPC, si no que no todos los CDs de audio tienen dicho código; te aconsejo usar "Identity", que (si no me equivovo) retorna solo la serie del disco pero en teoría es unica.

Lo que necesitas para UPC es:


Código Delphi [-]uses MMSystem;

var
Buffer: array [0..31] of Char;
Open: TMCI_Open_Parms = (lpstrDeviceType: 'CDAudio');
Info: TMCI_Info_Parms = (lpstrReturn: @Buffer; dwRetSize: SizeOf(Buffer));

function GetUPC(Drive: Char): string;
begin
Result := '';
Open.lpstrElementName := PChar(string(Drive + ':'));
if mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE or MCI_OPEN_ELEMENT, Longint(@Open)) <> 0 then Exit;
mciSendCommand(Open.wDeviceID, MCI_INFO, MCI_INFO_MEDIA_UPC, Longint(@Info));
mciSendCommand(Open.wDeviceID, MCI_CLOSE, MCI_OPEN_TYPE or MCI_OPEN_ELEMENT, Longint(@Open));
Result := Buffer;
end;




Por si te sirva te dejo http://msdn2.microsoft.com/en-us/library/ms712580.aspx

PD: No se si se puede con cadenas MCI, pero si te gusta revisa http://msdn2.microsoft.com/en-us/library/ms712587.aspx

Suerte!

Lo he probado pero no me funciona.

MaMu 12-04-2008 00:13:25

Voy a pecar de ignorante en el tema audio, pero no es lo mismo hacer:

Código Delphi [-]
function GetVolumeID(DriveChar: Char): String;
  var
    MaxFileNameLength, VolFlags, SerNum: DWord;
  begin
    if GetVolumeInformation(PChar(DriveChar + ':\'), nil, 0,
       @SerNum, MaxFileNameLength, VolFlags, nil, 0)
    then
    begin
      Result := IntToHex(SerNum,8);
    end
    else
        Result := '';
  end;

Saludos

cHackAll 14-04-2008 03:46:56

Cita:

Empezado por mamu (Mensaje 279434)
Lo he probado pero no me funciona.

Cita:

Empezado por cHackAll (Mensaje 199490)
...no solo tendrás problemas pues no todos las lectoras leen la UPC, si no que no todos los CDs de audio tienen dicho código

...
Cita:

Empezado por mamu (Mensaje 279437)
Voy a pecar de ignorante en el tema audio, pero no es lo mismo hacer: [codigo]

Cita:

Empezado por cHackAll (Mensaje 199490)
...te aconsejo usar "Identity", que (si no me equivovo) retorna solo la serie del disco pero en teoría es unica.

Saludos


La franja horaria es GMT +2. Ahora son las 22:58:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi