AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Einzelne Abtastwerte von WAV auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Einzelne Abtastwerte von WAV auslesen

Ein Thema von benst · begonnen am 17. Okt 2007 · letzter Beitrag vom 17. Okt 2007
Antwort Antwort
benst

Registriert seit: 20. Jun 2004
155 Beiträge
 
Delphi 5 Standard
 
#1

Einzelne Abtastwerte von WAV auslesen

  Alt 17. Okt 2007, 15:40
Hallo,

ich würde gerne die einzelnen Abtastwerte einer Wave auslesen.
(Wenn die Wave-Datei eine 44,1kHz Abtastung hat, so habe ich alle 1/44100 = ca. 2,23*10^-5 Sekunden einen Abtastwert.)
Das ganze könnte ich doch relativ einfach" binär auslesen oder? (Wave-Struktur) Oder geht das geschickter?

Gruß
Ben
P.S.: Wie mache ich das am besten bei mp3s (ich würde die mp3 ungerne vorher in WAV umkonvertieren)? Ist ein solches Auslesen mit entsprechenden Bibliotheken einfach?
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Einzelne Abtastwerte von WAV auslesen

  Alt 17. Okt 2007, 16: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
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

Re: Einzelne Abtastwerte von WAV auslesen

  Alt 17. Okt 2007, 16:41
Vielleicht hilft dir das Project im Anhang weiter. Das hab ich auf meiner Festplatte gefunden
Angehängte Dateien
Dateityp: zip wavfile_125.zip (252,0 KB, 26x aufgerufen)
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz