Avatar billede Max Novice
25. september 2002 - 15:28 Der er 15 kommentarer og
1 løsning

Delphi 6 og .mp3 filer spm. nr. 1

Hej igen allesammen.

Denne gang er jeg ude efter oplysninger om mp3-filer. Jeg kunne godt tænke mig at vide hvordan man får fat i "ekstra"-oplysningerne om en mp3-fil, sådan som Winamp f.eks. gør, når den viser at filen f.eks. er 192 kbit, 44.1 KhZ og joint stereo.

Håber I kan hjælpe mig med et stykke kode, der kan ordne ovenstående.

/Mnc

PS.: Se venligst mit spm. "Delphi 6 og .mp3 filer spm. nr. 2" også.. ;)
Avatar billede borrisholt Novice
26. september 2002 - 08:32 #1
Det hedder et id3 Tag på torry.net kand dun finde en 5-6 eksempler på hvordan man læser det.

Jens B
Avatar billede Max Novice
26. september 2002 - 16:43 #2
Øh, et ID3 tag indeholder da kun oplysninger om Nummer, Titel, Kunstner, Genre, osv., så vidt jeg er informeret. Jeg kiggede for en sikkerheds skyld på eksemplet fra Torry, som du sagde, og det program behandler heller ikke flere oplysninger end det..
Avatar billede borrisholt Novice
27. september 2002 - 14:18 #3
nåååe ja det gør du ved at læse de tre først bytes og så lave et par tabel opslag.

Her er et lille component der klarer ærterne for dig :

unit MP3Info;

interface

uses
  Classes;
type
  TMP3Info = class(TComponent)
  private
    FFileName  : String;
    FFrequency : Integer;
    FBitRate  : Integer;
    FLayer    : Integer;
    FMPEGVer  : Integer;
    procedure SetFileName(const Value: String);
  protected
    function  GetInfo: Boolean;
  published
    property FileName  : String  read FFileName write SetFileName;
    property Frequency : Integer read FFrequency;
    property BitRate  : Integer read FBitRate;
    property Layer    : Integer read FLayer;
    property MPEGVer  : Integer read FMPEGVer;
  end;

procedure Register;


implementation
uses
  SysUtils;

const
  Bitrate_Array: array[1..2,1..3,1..14] of Integer =
    (
      (
        (32,64,96,128,160,192,224,256,288,320,352,384,416,448),
        (32,48,56,64,80,96,112,128,160,192,224,256,320,384),
        (32,40,48,56,64,80,96,112,128,160,192,224,256,320)
      )
      ,
      (
        (32,48,56,64,80,96,112,128,144,160,176,192,224,256),
        (8,16,24,32,40,48,56,64,80,96,112,128,144,160),
        (8,16,24,32,40,48,56,64,80,96,112,128,144,160)
      )
  );

  Frequency_Array: array[1..2,0..2] of Integer =
  (
    (44100,48000,32000), (22050,24000,16000)
  );

procedure TMP3Info.SetFileName(const Value: String);
begin
  FFileName := Value;
  if not GetInfo then
    raise Exception.Create('Unable to read MP3 Headder info');
end;


function TMP3Info.GetInfo: Boolean;
var
  Buffer1, Buffer2, Buffer3 : Byte;
  Offset : Integer;
begin
  Result := True;

  try
    with TFileStream.Create(FFileName, fmOpenRead    or fmShareDenyWrite) do
    try
      Read(Buffer1, 1);
      Read(Buffer2, 1);
      Read(Buffer3, 1);
    finally
      free;
    end;

    {MPEG Version}
    if Buffer2 and 16 = 16 then
      FMPEGVer := 1
    else
      FMPEGVer := 2;

    {Layer}
    if (Buffer2 and 32 =  32) and (Buffer2 and 64 <> 64) then
      FLayer := 1;
    if (Buffer2 and 32 <> 32) and (Buffer2 and 64 =  64) then
      FLayer := 2;
    if (Buffer2 and 32 =  32) and (Buffer2 and 64 =  64) then
      FLayer := 3;

    {Bitrate}
    Offset := 0;
    if Buffer3 and  16 = 16  then
      inc(Offset, 1);
    if Buffer3 and  32 = 32  then
      inc(Offset, 2);
    if Buffer3 and  64 = 64  then
      inc(Offset, 4);
    if Buffer3 and 128 = 128 then
      inc(Offset, 8);
    FBitrate := Bitrate_Array[FMPEGVer, FLayer, Offset];

    {Sample-Frequency}
    Offset := 0;
    if Buffer3 and 8 = 8 then
      inc(Offset, 1);
    if Buffer3 and 4 = 4 then
      inc(Offset, 2);
    FFrequency := Frequency_Array[FMPEGVer, Offset];
  except
    Result := False;
  end;
end;

procedure Register;
begin
  RegisterComponents('Borrisholt', [TMP3Info]);
end;

end.

og så bruger du den sådan her :

uses
  MP3Info;

procedure TForm1.Button1Click(Sender: TObject);
begin
  With TMP3Info.Create(nil) do
  try
    FileName := 'D:\MP3\Bell Book and candle\01. Hurry Up.MP3';
    Memo1.Clear;
    Memo1.Lines.Add('Filename : ' + FileName);
    Memo1.Lines.Add('Frequency : ' + IntToStr(Frequency) + 'Khz');
    Memo1.Lines.Add('BitRate : ' + IntToStr(BitRate));
    Memo1.Lines.Add('Layer : ' + IntToStr(Layer));
    Memo1.Lines.Add('MPEGVer : ' + IntToStr(MPEGVer));
  finally
    free;
  end;
end;


Jens B
Avatar billede Max Novice
27. september 2002 - 21:45 #4
Hey, kanon! Men lige en sidste ting, inden pointsene flyver. Hvad med bitrates over 128 Khz.?
Avatar billede borrisholt Novice
28. september 2002 - 11:31 #5
Det ved jeg sq ikke .. Men hvis du laver nogle MEGET små mp3 filer me stører bitrates så finder jeg ud af det ..... I mellemtiden må du leve med det der komponent.

Jens B
Avatar billede Max Novice
28. september 2002 - 11:45 #6
Det er ok, ville bare lige høre om du havde koden. Jeg finder ud af det. Tak for hjælpen.

/Mnc
Avatar billede borrisholt Novice
28. september 2002 - 11:50 #7
Jeg har mine oplysninger fra Fraunhofer, det er dem der har skrevet algoritmen
http://www.iis.fraunhofer.de/amm/techinf/layer3/
Avatar billede borrisholt Novice
28. september 2002 - 12:51 #8
Avatar billede borrisholt Novice
28. september 2002 - 16:09 #9
jeg har fundet ud af det :

http://borrisholt.com/eksperten/MP3HeadderInfo.zip (631 Kb)
Incl nogle test MP3 Filer. du skal ikke spille dem. Det er blot en hyle tone.

Den kan meget mere en du spurgte om. Er jeg ikke dygtig ?

Jens B
Avatar billede fixxxer Nybegynder
03. oktober 2003 - 13:06 #10
det link dutter ikke og jeg kunne rigtig godt tænke mig det komponent borrisholt har lavet der :)
Avatar billede athlon-pascal Juniormester
03. oktober 2003 - 14:18 #11
Send en mail til jens@borrisholt.com, hvor du linker til dette spm. og spørger efter det, jeg tror jens gerne vil sende det til dig :-)
Avatar billede borrisholt Novice
03. oktober 2003 - 14:26 #12
Nu virker linket igen :-)

Jens B
Avatar billede fixxxer Nybegynder
03. oktober 2003 - 17:31 #13
kanon, takker :)
Avatar billede aasuper Nybegynder
17. marts 2004 - 17:31 #14
Er det stadig én der har denne komponent et sted...? Linket virker ikke mere...

>>AASuper
Avatar billede borrisholt Novice
18. marts 2004 - 08:30 #15
aaSuper >> Jeg ryder op en gang i mellem, således jeg ikke har uanede mængder l... liggende.

Jeg har netop lagt det ud til dig igen.

Jens B
Avatar billede aasuper Nybegynder
24. marts 2004 - 15:53 #16
Super! Mange tak for det!

>>AASuper
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester