Einzelnen Beitrag anzeigen

Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.095 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: Einzelne Abtastwerte von WAV auslesen

  Alt 17. Okt 2007, 15:32
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
Angehängte Dateien
Dateityp: zip waveio_192.zip (9,6 KB, 25x aufgerufen)
Felix Alter
Japanurlaub 2015
  Mit Zitat antworten Zitat