Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   TMediaPlayer y CD Audio (https://www.clubdelphi.com/foros/showthread.php?t=55196)

MaMu 10-04-2008 05:47:34

TMediaPlayer y CD Audio
 
Yo tengo un TMediaPlayer y lo que quiero es leer los archivos de audio de un CD de audio tradicional, nada de mp3. Lo que estoy buscando y no encuentro por ningun lado, es como extraer el titulo de cada tema.

Alguien sabe como?

Khronos 10-04-2008 16:06:00

Los cds de audio "tradicional" no pueden almacenar información sobre el artista o grupo de cada cancion como los archivos mp3. Las canciones de un cd de audio están en formato .cda.

Salu2

cHackAll 10-04-2008 16:41:38

Yo diria que si se puede.

Saludos

Delphius 10-04-2008 16:49:36

Hace un tiempo yo he probado un componente disponible en torry.net que extraía la información desde un mp3... ¿Que impide que no haya un componente que haga lo mismo para el formato de audio tradicional (cda)?

¿Te diste una visita por torry.Net?

Saludos,

MaMu 10-04-2008 22:29:14

Cita:

Empezado por Khronos (Mensaje 278952)
Los cds de audio "tradicional" no pueden almacenar información sobre el artista o grupo de cada cancion como los archivos mp3. Las canciones de un cd de audio están en formato .cda.

Salu2

Es cierto, pero toda unidad fisica de disco en formato CD, almacena un código (generalmente con un código de barras), que cuando el CD es insertado en la unidad, UNIVERSALMENTE, todas las lectoras, sea cual fuere el formato del CD, leen en el inicio de lectura del CD, es decir, el lente se posiciona sobre el borde interno para escanear el código (el CD gira un par de vueltas), cuando este código es leido, el CD ya fue identificado y puede ser explorado.
Esa capacidad de lectura óptica del código, hace que tenga la capacidad de almacenar bit con información para generar un número de identificación compuesto de elementos como ser Autor, Género, Cantidad de Temas, ID de temas. Y es lo que da la capacidad de utilizar servicios CDDB.
Si fabricas hardware reproductor, con una lectora, e intentas visualizar los datos de por ejemplo el titulo de la canción, en un display de LCD, esto es posible. Ya que es muy común que estos datos se encuentren en un CD original y no asi en una copia pirata, y si mal no recuerdo, fue uno de los primeros métodos anticopia, claro esta, fallidos.

No pude entrar a Torry.net porque tengo problemas de conexión con internet (Fibertel CVTCI Argentina).

Saludos, algo, voy a encontrar.

maeyanes 10-04-2008 22:57:03

Hola...

De la wikipedia: CD-Text...

Ahora, según se indica ahí, no todos los CD's de audio tienen esta información almacenada...

Saludos...

MaMu 11-04-2008 02:10:11

Cita:

Empezado por maeyanes (Mensaje 279133)
Hola...

De la wikipedia: CD-Text...

Ahora, según se indica ahí, no todos los CD's de audio tienen esta información almacenada...

Saludos...

Pues claro que no. Y la razón es muy simple, es una cuestión comercial disputada por muchas compañias acreedoras de los fabricantes, entre otras, las discográficas internacionales.
Lo cierto es que no por tener alas todas las aves vuelan, pero no por eso dejan de ser aves. Los CDs lo traen, aunque no todos lo usen, y para usarlo hay que pagar.

Saludos

MaMu 11-04-2008 22:04:57

Ahora, yo me pregunto, como obtiene la información de un CD (*.CDA) el WindowsMedia o el WinAmp, o los miles de programas que hay?. Porque no requieren conexion alguna a internet para buscar en una DB.
Algun componente tiene que haber, no cabe duda.

Saludos

MaMu 12-04-2008 05:57:33

SOLUCIONADO

La verdad es que me sirvio mucho la ayuda en cuanto a los temas a leer, sinceramente muchas gracias a todos. Lo solucioné utilizando CDDB, urgando por internet (y entrando a www.freedb.org) encontré muchisima documentación al respecto. Me base en un pequeño pero efectivo componente diseñado para Delphi, cito en:
http://www.doogal.co.uk/cd_components.php
Es muy util y funcional en Delphi 7 (si es que tienen las mismas librerias de componentes instalados, en mi caso se dió que si).
Al que le interesa, lealo, no consume ni media hora de lectura, y soluciona mucho el dolor de cabeza. Eso si, si quieren diseñar algo sin utilizar internet, se bajan la DB que esta disponible en el FTP de freeDB y hacen que su software trabaje offline (hay un archivo que actualiza la DB, también se puede descargar del FTP).

Les dejo el ensayo que hice, aunque es diferente del procedimiento final, pero como para ver el funcionamiento les alcanza.

Código Delphi [-]
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, CDInfo, StdCtrls, CDDBConnect , CDDatabase, ComCtrls;

....

  private
    { Private declarations }
    FGotDetails : Boolean;
    FCDEntry : TAccessDBEntry;

    procedure ShowCDMessage(AMessage: string);
    procedure ShowCDDetails(CDInfo1:TCDInfo);

...

implementation

const
  CTrack = 'Pista';
  CPosn = 'Posición';
  CNoCD = '[No hay CD ]';
  CUnknownCD = '[Información no disponible]';


{$R *.dfm}

procedure TForm1.ShowCDDetails(CDInfo1:TCDInfo);
var CDDBConnect1:TCDDBConnect;
begin
  FGotDetails := True;
  FGotDetails := CDDBConnect1.GetInfoForCurrentCD(FCDEntry);
  if FGotDetails then
  begin
    Edit2.Text := FCDEntry.CDTitle;
    Edit3.Text:= FCDEntry.ArtistTitle;
  end
  else
    ShowCDMessage(CUnknownCD);
end;


procedure TForm1.ShowCDMessage(AMessage : string);
begin
  //TrackLabel.Caption := CTrack + AMessage;
  //PosnLabel.Caption := CPosn + AMessage;
  //TrackNameLabel.Caption := AMessage;
  Edit2.Text := AMessage;
end;

procedure TForm1.Button1Click(Sender: TObject);
var CD:TCDinfo;
    DataBase:TCDDatabase;
    Conexion:TCDDBConnect;
   Loop,pista : integer;
    LListItem : TListItem;
    LCDEntry : TAccessDBEntry;
begin
 FCDEntry := TAccessDBEntry.Create;
  CD:=TCDinfo.Create(self);
  DataBase:=TCDDatabase.Create(self);
  Conexion:=TCDDBConnect.Create(self);
  DataBase.GetRecording(CD.CDDBDiscIDHex,FCDEntry);
  if CD.Ready
    then begin
      Edit1.Text:=IntToStr(CD.TotalTrackCount);
    end;
      if FCDEntry.CDID <> CD.CDDBDiscIDHex
        then begin
          FGotDetails := False;
            if DataBase.GetRecording(CD.CDDBDiscIDHex, FCDEntry)
              then begin
                FGotDetails := True;
              end
              else begin
                FGotDetails := Conexion.GetInfoForCurrentCD(FCDEntry);
                  if FGotDetails then
                    DataBase.AddRecording(FCDEntry);
              end;
        end
        else begin
          ShowCDMessage(CUnknownCD);
        end;  
    Edit2.Text:=FCDEntry.CDTitle;
    Edit3.Text:=FCDEntry.ArtistTitle;
    Edit4.Text:=FCDEntry.Genre;
    //Pistas
    Memo1.Clear;
    for pista:=1 to DataBase.RecordingCount do
      begin
        Memo1.Lines.Add(FCDEntry.Tracks.Text);
      end;
end;

Saludos


La franja horaria es GMT +2. Ahora son las 04:57:55.

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