developers-forum.de

Normale Version: Was jemand wie man Wave's kreiert
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi,
also, ich will mit Delphi eine wave datei rausschreiben. Leider gibt es Probleme den Wave Header rauszuschreiben, der stimmt (in Länge und so weiter). Wäre toll wenn jemand mir helften kann.
MfG PCM
Vielleicht hilft dir die Seite zum Aufbau von wave Dateien weiter.
Hi,
ja, theoretisch weis ich schon wie so ein wave dann aussehen muss, aber mein Problem liegt eher darin, wie ich das Zeug hübsch Byte für Byte rausschreiben kann. Tja, noch zu wenig Delphi ErfahrungSmilie
MfG PCM
Zum auslesen der Daten empfehlen sich Streams. Hier mal ein Beispiel zum auslesen der ganzen Header Infos:

Code:
type
  TBeforeWaveHeader = object
    RiffId:     Array[1..4] of Char;
    RiffCount:  DWORD;
    WaveId:     Array[1..4] of Char;
    fmtId:      Array[1..4] of Char;
    TempInt:    DWORD;
  end;

  TWaveHeader = object
    wFormatTag:       WORD;
    nChannels:        WORD;
    nSamplesPerSec:   DWORD;
    nAvgBytesPerSec:  DWORD;
    nBlockAlign:      WORD;
    wBitsPerSample:   WORD;
    cbSize:           WORD;
  end;

  TAfterWaveHeader = object
    DataId:     Array[1..4] of Char;
    DataCount:  DWORD;
  end;

  TWaveData = object
    BeforeWaveHeader: TBeforeWaveHeader;
    WaveHeader:       TWaveHeader;
    AfterWaveHeader:  TAfterWaveHeader;
  end;


Den Teil setzt du einfach in den Interface Teil. Jetzt kommt der eigentliche Teil zum auslesen der Daten.

Code:
procedure ReadWaveData;
Var
  WaveFile: TStream;
  WaveData: TWaveData;
begin
  //Stream öffnen
  WaveFile := TFileStream.Create('MyFile.wav', fmOpenRead);
  //Wave Data auslesen
  WaveFile.ReadBuffer(WaveData, sizeof(TWaveData));
end;


Mit TFileStream.Create wird die Datei angesprochen, der Parameter fmOpenRead gibt an, dass die Datei zum lesen geöffnet werden soll. ReadBuffer ließt dann die Daten aus der Datei, man hätte hier auch einfach Read verwenden könne, ReadBuffer hat aber einfach den Vorteil das es die Datei Operation vorher erst noch prüft.

Anstatt TWaveHeader kannst du auch TWaveFormatEx aus der Unit MMSystem verwenden. Die Wave Datei hab ich mit der Funktion MakeSound von Delphi Fundgrube erstellt.

Danke, hat was gebracht, ich habe es jetzt geschafft. Manchmal kommt zwar noch ein bisschen Müll hinter den Waves an, und man kann sie nicht mit wmp abspielen, aber sonst ist alles OK.
MfG PCM
Referenz-URLs