Avatar billede zerohero Nybegynder
22. juni 2003 - 20:55 Der er 5 kommentarer og
1 løsning

Sound: Waves

Jeg sidder med bogen: "The Tomes Of Delphi - Win32 MultiMedia API" og har ihærdigt prøvet at forstå windows MDI. Indtil videre kan jeg afspille en wave-fil (Stort!!!), men det jeg gerne vil er at få sådan en fancy grafisk wave-form (ting) vist på min forms canvas. så jeg kan se lyd-udslaget fra den wave-fil jeg er ved at afspille. Jeg har prøvet at finde forskellige OpenSource komponenter fra nettet men de fleste er kun en MixerOutPut Meter/Peak (der i øvrigt kun virker, hvis dit lyd-kort understøtter MIXERCONTROL_CONTROLTYPE_PEAKMETER!) I stedet tænkte jeg om man ikke bare kunne bruge de data direkte fra wave-filen, som man alligevel bruger når man skal afspille filen! Problemet er så bare at jeg ikke aner hvordan jeg håndtere disse data. Umiddelbart ser det ud som det er en PChar der indeholder alle data. Bogen jeg har købt dækker åbenbart heller ikke dette (desværre). Nogen der kan hjælpe?

Her er koden jeg bruger til at hente data fra min wave-file:

function mmioFourCC(A, B, C, D : Char) : DWord;
begin
  Result := DWord(A) or DWord(B) shl 8 or DWord(C) shl 16  or DWord(D) shl 24;
end;

var
  Amm_IO : HmmIO;
  CurrentMMResult : MMResult;
  AHandle : HWaveOut;
procedure GetDataFromFile(Handle : HWND; FileName : string);
var
  FmtSize, DataSize : LongInt;
  ARiffChunk, ASubChunk : MMCKInfo;
  CurrentMMIOInfo : PMMIOInfo;
  FmtInfo, TempData : PChar;
  B : Boolean;
begin
  if (Length(FileName) > 0)  and FileExists(FileName) then
  begin
    Amm_IO := mmioOpen(PChar(FileName),nil,(MMIO_Read or MMIO_AllocBuf));
    B := Amm_IO <> 0;
    if not B  then
    begin
      ShowMessage('Failed to open media file!');
      Exit;
    end;
    CurrentMMResult := mmioSeek(Amm_IO, 0, Seek_Set);
    ARiffChunk.fccType := mmioFourCC('W','A','V','E');
    CurrentMMResult := mmioDescend(Amm_IO, @ARiffChunk, nil, MMIO_FindRiff);
    ASubChunk.ckID := mmioFourCC('f','m','t',' ');
    CurrentMMResult := mmioDescend(Amm_IO, @ASubChunk, @ARiffChunk, MMIO_FindChunk);
    fmtSize := ASubChunk.ckSize;
    GetMem(fmtInfo, fmtSize);
    //Read the fmt (format) chunk in file
    CurrentMMResult := mmioRead(Amm_IO, fmtInfo, fmtSize);
    //Ascend out of fmt chunk back to the main RIFF chunk
    CurrentMMResult := mmioAscend(Amm_IO, @ASubChunk, 0);
    //Data chunk
    ASubChunk.ckID := mmioFourCC('d', 'a', 't', 'a');
    CurrentMMResult := mmioDescend(Amm_IO, @ASubChunk, @ARiffChunk, MMIO_FindChunk);
    DataSize := ASubChunk.ckSize;
    GetMem(TempData, DataSize);
    //Read Data in file
    CurrentMMResult := mmioRead(Amm_IO, TempData, DataSize);
    //Close file
    CurrentMMResult := mmioClose(Amm_IO, 0);
//------------------------------------------------------------------------------

    // <<<< Her er det at jeg har alle mine data - jeg ved bare ikke hvordan jeg skal aflæse dem!!!!
    ShowMessage(TempData);

//------------------------------------------------------------------------------
    //Free memory
    FreeMem(TempData);
    FreeMem(fmtInfo);
  end
  else
    ShowMessage('File doesn''t exists!');
end;

...
ZeroHero
Avatar billede borrisholt Novice
24. juni 2003 - 09:41 #1
Hejsa !

Longtime no hest ! How Goes ?

Nå anyway .. har du kigger her : http://www.torry.net/audio.htm

Jens B
Avatar billede borrisholt Novice
24. juni 2003 - 09:41 #2
Den her og så lidt ben arbejde :
WaveIO v.1.0

Jens B
Avatar billede zerohero Nybegynder
24. juni 2003 - 16:18 #3
Hejsa BorrisHolt. Ja, jeg downloadede faktisk lige den der WaveIO i går - ser meget lovende ud indtil videre! Er netop ved at læse kilde-koden igennem. Det er bare det værste ved alle de gamle Windows API'er, da de nogle gange er vanvittig svære at gennemskue - og består ofte af op til flere processer for bare at få noget ganske lidt rimligt ud af det! Nå, men jeg vil lige tage en kig på din anbefalede link...
Avatar billede zerohero Nybegynder
24. juni 2003 - 16:21 #4
Nåhhh, det er bare en link til Torry's komponent-download siden for "Audio Components" - den har jeg sørme været igennem op til flere gange fornylig!!!
Avatar billede zerohero Nybegynder
29. juni 2003 - 17:09 #5
Hmmm... Jeg tror at jeg fandt ud af det selv!

Lukker!
Avatar billede borrisholt Novice
30. juni 2003 - 08:26 #6
Du så godt den der BassPlayer kan gøre det ?
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