Delphi - Odczyt próbek z pliku Wav

0

Witam.

Przeglądałem Google i znalazłem co najmniej kilka stron ale nie potrafię wydobyć z nich potrzebnych informacji
Odtwarzanie wave z WinAPI
https://ccrma.stanford.edu/courses/422/projects/WaveFormat/

  1. Jakie wartości są zapisane w pliku Wav - chce się upewnić.

  2. chcę się upewnić jaka jest długość próbki żeby ja pobrać z pliku Wav, zakładam że to można to zrobić array of Word (chyba że Signal?).

  3. Po pobraniu danych próbki do tabeli muszę to wyświetlić jak oscyloskop (takie EKG serca, zniekształcona sinusoida itp.) a nie w postaci słupków z wartościami tylko na plusie.

mam dane:

source.Size: 132268

Naglówek
fHeader.riff :RIFF
fNaglowek.len :132260
fHeader.cWavFmt :WAVEfmt 
fNaglowek.dwHdrLen :16
fNaglowek.wFormat :1
fNaglowek.wNumChannels :1
fNaglowek.dwSampleRate :22050
fNaglowek.dwBytesPerSec :44100
fNaglowek.wBlockAlign :2
fNaglowek.wBitsPerSample :16
fNaglowek.cData :data
fNaglowek.dwDataLen :132224

fWaveData.Position: 44
fWaveData.Size: 132268

wyliczenia:

   fDlgProbki:= fNaglowek.wBitsPerSample * fNaglowek.wNumChannels;              // domniemana długość próbki
   fDlgNaglowek:= sizeof(TWavNaglowek);
   fProbkiMax := fWaveData.Size  - fDlgNaglowek;
   fProbkiMax := fProbkiMax div fDlgProbki;                        // ilość próbek

Pobieranie danych:

type
   TTbofWord = array of Word;


procedure TMyWave.GetProbka(NrProbki: Integer; var data: TTbofWord);
var
   t : integer;
   tmp: Word;
begin
   SetLength(data, fDlgProbki);

   if (fWaveData.Size <= sizeof(TWavNaglowek)) or
      (NrProbki>ProbkiMax)
   then begin
      for t := 0 to Length(data)-1 do data[t] := 0;
      exit;
   end;

   for t := 0 to Length(data)-1 do begin
     fWaveData.Seek(fDlgNaglowek + NrProbki*fDlgProbki +t*SizeOf(tmp), soFromBeginning);
     fWaveData.Read(tmp, SizeOf(tmp));
     data[t]:= tmp;
   end;
end;
0
Integers napisał(a)
  1. Jakie wartości są zapisane w pliku Wav - chce się upewnić.
    To zależy, WAV to kontener strumienia audio, a nie konkretny format kodowania. W pliku WAV może być na przykład strumień mp3. Najczęściej jednak wav stosuje się do zapisu audio niekompresowanego (PCM) ale i wtedy może być to mono, stereo, o różnej rozdzielczości (8 lub 16 bitów) i o różnej częstotliwości próbkowania. Należałoby zawsze sprawdzać, czy masz rzeczywiście PCM i o jakich dokładnie parametrach.
  1. Po pobraniu danych próbki do tabeli muszę to wyświetlić jak oscyloskop (takie EKG serca, zniekształcona sinusoida itp.) a nie w postaci słupków z wartościami tylko na plusie.
    W przypadku najbardziej typowego formatu 16-bit signed PCM pojedynczy sampel przyjmuje wartości z zakresu -32768..+32767 (czyli nie word, a shortint). Z tego już wykres powinieneś móc narysować...
0

Dzięki, ten shortint załatwił sprawę, a wiesz coś na temat długości próbki bo nie jestem pewny czy dobrze ją wyznaczyłem w powyższym przykładzie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1