Hi,
das direkt auslesen geht nicht so ohne weiteres, da du nicht weißt, welcher Codec verwendet wurde. Ich habe da mal eine
Unit gefunden, in der eine Klasse zum konvertieren in PCM drin ist.
Delphi-Quellcode:
uses
WaveIO;
type
TAudioData =
array of Smallint;
procedure LoadAudioFile(
const FileName:
String;
var Data: TAudioData;
out Format: TWaveFormatEx);
var
w1: TFileWaveStream;
pcmw: TPCMWaveReader;
I, Size: Integer;
Data2:
array of Byte;
begin
w1 := TFileWaveStream.Create('
C:\FileName.wav',
nil);
try
pcmw := TPCMWaveReader.Create(w1);
try
Format := pcmw.Format^;
case Format.wBitsPerSample
of
8:
//nach 16 Bit konvertieren
begin
Size := pcmw.Size * Format.nBlockAlign;
SetLength(Data2, Size);
SetLength(Data, Integer);
pcmw.
Read(Dat2a[0], pcmw.Size);
for I := Size - 1
downto 0
do
Data[I] := (Data2[I] - 128) * (32768
div 128);
end;
16:
begin
SetLength(Data, pcmw.Size * Format.nBlockAlign
div 2);
pcmw.
Read(Data[0], pcmw.Size);
end;
else
//Exception oder so
end;
finally
pcmw.Free;
end;
finally
w1.Free;
end;
end;
...
var
AudioData: TAudioData;
Format: TWaveFormatEx;
Sample: Shortint;
...
LoadAudioFile('
D:\Test.wav', AudioData, Format);
Sample := AudioData[Trunc(ZeitInSekunden * Format.nSamplesPerSec)];
Ungetestet, nur aus eigenem Code kopiert und dann abgewandelt - keine Garantie auf Lauffähigkeit, insbesondere das 8bit-zu-16bit-Konvertieren.
Auf irgendeiner CD hab ich das komplette WaveIO-Zeugs gesichert. Da wäre dann auch ne Readme dabei. Muss ich aber erst finden.
Mfg
FAlter