Witam.
Przeglądałem Google i znalazłem co najmniej kilka stron ale nie potrafię wydobyć z nich potrzebnych informacji
http://4programmers.net/Delphi/Artyku%C5%82y/Odtwarzanie_wave_z_WinAPI?sid=c350625937fba824abd57807226982ac
https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
-
Jakie wartości są zapisane w pliku Wav - chce się upewnić.
-
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?).
-
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;