Das Beispiel in diesem Artikel beschreibt, wie man WAV-Dateien in Delphi erstellt. Teilen Sie es als Referenz mit allen. Die Einzelheiten lauten wie folgt:
Hier verwendet Delphi die Funktion waveIn..., um WAV-Dateien zu erstellen
Der spezifische Code lautet wie folgt:
//Verwenden Sie das Fenster, um Nachrichten vom Audiogerät zu akzeptieren: Unit Unit1; Schnittstelle verwendet Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton2 : TButton ; Button3: TButton; procedure FormCreate(Sender: TObject); Button2Click(Sender: TObject); protected procedure WndProc(var m: TMessage; programming) whOut: TWaveHdr; hWaveIn,hWaveOut: HWAVE fmt: TWaveFormatEx; buf1,buf2,SaveBuf: TBytes; procedure TForm1.FormCreate(Sender: TObject); begin Button1.Caption := 'Aufzeichnung stoppen'; Button3.Caption := 'Aufzeichnung abspielen'; ; //Aufzeichnungsvorgang starten TForm1.Button1Click(Sender: TObject); begin {Geben Sie das aufzuzeichnende Format an} fmt.wFormatTag := WAVE_FORMAT_PCM; fmt.nSamplesPerSec := 22050; fmt.nBlockAlign := 16; = 0; SaveBuf := nil; {Aufgezeichneten Inhalt löschen} if waveInOpen(@hWaveIn, @fmt, Handle, 0, CALLBACK_WINDOW) = 0 then begin SetLength(buf1, 1024*8); .lpData := PAnsiChar(buf1); whIn1.dwBufferLength := Length(buf1); whIn1.dwUser := 0; whIn1.lpNext := nil; whIn1.reserved := 0; whIn2.lpData := PAnsiChar(buf2); whIn2.dwBytesRecorded := 0; whIn2.dwLoops := nil; whIn2.reserved := 0; waveInPrepareHeader(hWaveIn, @whIn1, SizeOf(TWaveHdr)); waveInAddBuffer(hWaveIn, @whIn1, SizeOf(TWaveHdr)); ); waveInStart(hWaveIn); end; //Aufzeichnungsprozedur stoppen TForm1.Button2Click(Sender: TObject); begin waveInStop(hWaveIn); waveInUnprepareHeader(hWaveIn, @whIn2, SizeOf (TWaveHdr)); waveInClose(hWaveIn); end; //Aufzeichnungsprozedur abspielen TForm1.Button3Click(Sender: TObject); begin whOut.lpData := whOut.dwBufferLength := 0; .dwUser := 0; whOut.dwFlags := 0; whOut.dwLoops := 1; whOut.lpNext := nil; whOut.reserved := 0; waveOutOpen(@hWaveOut, WAVE_MAPPER, @fmt, Handle, 0, CALLBACK_WINDOW); ; waveOutWrite(hWaveOut, @whOut, SizeOf(TWaveHdr)); end; procedure TForm1.WndProc(var m: TMessage); var ordLen: Integer; case m.Msg of {Verarbeitung der Aufzeichnungsnachricht} MM_WIM_CLOSE : ; {Diese Nachricht trägt nur das Gerätehandle} MM_WIM_DATA: begin {Diese Nachricht trägt das Gerätehandle und den WaveHdr-Zeiger (LParam)} {Speichern Sie die aufgezeichneten Daten} ordLen := Length(SaveBuf, ordLen + PWaveHdr(m.LParam).dwBytesRecorded); SaveBuf)+ordLen), PWaveHdr(m.LParam).lpData, PWaveHdr(m.LParam).dwBytesRecorded); {Aufnahme fortsetzen} waveInAddBuffer(hWaveIn, PWaveHdr(m.LParam), SizeOf(TWaveHdr)); {Diese Nachricht trägt nur das Geräte-Handle} MM_WOM_CLOSE: ; {Diese Nachricht trägt nur das Gerätehandle} MM_WOM_DONE: begin {Diese Nachricht trägt das Gerätehandle und den WaveHdr-Zeiger (LParam)} waveOutUnprepareHeader(hWaveOut, PWaveHdr(m.LParam), SizeOf(TWaveHdr)); Ende; Ende; Ende.
Ich hoffe, dass dieser Artikel für alle bei der Delphi-Programmierung hilfreich sein wird.