L'exemple de cet article décrit comment créer des fichiers wav dans Delphi. Partagez-le avec tout le monde pour votre référence. Les détails sont les suivants :
Ici, Delphi utilise la fonction waveIn... pour créer des fichiers wav
Le code spécifique est le suivant :
//Utilisez la fenêtre pour accepter les messages du périphérique audio : unité Unit1 ; l'interface utilise Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls ; type TForm1 = class(TForm) Button1 : TButton Button2 ; : TButton Button3 : TButton ; procédure FormCreate(Expéditeur : Procédure TObject Button1Click(Expéditeur : procédure TObject); Button2Click(Expéditeur : TObject); procédure Button3Click(Expéditeur : TObject); procédure protégée WndProc(var m: TMessage); var Form1 : implémentation {$R *.dfm} utilise MMSystem ; quoi : TWaveHdr ; hWaveIn, hWaveOut : HWAVE ; buf1,buf2,SaveBuf: TBytes; procédure TForm1.FormCreate(Sender: TObject); start Button1.Caption := 'Démarrer l'enregistrement'; Button2.Caption := 'Arrêter l'enregistrement'; Button3.Caption := 'Lire l'enregistrement'; ; //Démarrer la procédure d'enregistrement TForm1.Button1Click(Sender: TObject); start {Spécifier le format à enregistrer} fmt.wFormatTag := WAVE_FORMAT_PCM; fmt.nChannels := 2; fmt.nSamplesPerSec := 22050; fmt.nAvgBytesPerSec := 88200; SaveBuf := nil ; {Effacer le contenu enregistré} si waveInOpen (@hWaveIn, WAVE_MAPPER, @fmt, Handle, 0, CALLBACK_WINDOW) = 0 alors commencez SetLength(buf1, 1024*8) ; .lpData := PAnsiChar(buf1); whIn1.dwBufferLength := Longueur(buf1); whIn1.dwBytesRecorded := 0; whIn1.dwUser := 0; whIn1.dwLoops := 0; 0; whIn2.lpData := PAnsiChar(buf2); whIn2.dwBufferLength := Longueur(buf2); whIn2.dwBytesRecorded := 0; whIn2.dwUser := 0; whIn2.réservé := 0; waveInPrepareHeader(hWaveIn, @whIn1, SizeOf(TWaveHdr)); waveInPrepareHeader(hWaveIn, @whIn2, SizeOf(TWaveHdr)); waveInAddBuffer(hWaveIn, @whIn1, SizeOf(TWaveHdr)); ); waveInStart(hWaveIn); end; //Arrêter la procédure d'enregistrement TForm1.Button2Click(Sender: TObject); start waveInStop(hWaveIn); waveInUnprepareHeader(hWaveIn, @whIn1, SizeOf(TWaveHdr)); (TWaveHdr)); waveInClose(hWaveIn); //Lire la procédure d'enregistrement TForm1.Button3Click(Sender: TObject); commencer whOut.lpData := PAnsiChar(SaveBuf); whOut.dwBufferLength := Longueur(SaveBuf); .dwUser := 0; whOut.dwFlags := 0; whOut.dwLoops := 1; whOut.lpNext := nul; whOut.reserved := 0; waveOutOpen (@hWaveOut, WAVE_MAPPER, @fmt, Handle, 0, CALLBACK_WINDOW); ; waveOutWrite(hWaveOut, @whOut, SizeOf(TWaveHdr)); end; procédure TForm1.WndProc(var m: TMessage); var ordLen: Integer; case m.Msg de {traitement du message d'enregistrement} MM_WIM_OPEN : ; : ; {Ce message ne contient que le handle de l'appareil} MM_WIM_DATA : début {Ce message contient le handle de l'appareil et le pointeur WaveHdr (LParam)} {Enregistrer les données enregistrées} ordLen := Longueur(SaveBuf); SetLength(SaveBuf, ordLen + PWaveHdr(m.LParam).dwBytesRecorded); SaveBuf)+ordLen), PWaveHdr(m.LParam).lpData, PWaveHdr(m.LParam).dwBytesRecorded); {continuer l'enregistrement} waveInAddBuffer(hWaveIn, PWaveHdr(m.LParam), SizeOf(TWaveHdr)); {traiter le message de lecture} MM_WOM_OPEN : ; {Ce message ne contient que le handle de l'appareil} MM_WOM_CLOSE : ; {Ce message contient uniquement le handle du périphérique} MM_WOM_DONE : start {Ce message contient le handle du périphérique et le pointeur WaveHdr (LParam)} waveOutUnprepareHeader(hWaveOut, PWaveHdr(m.LParam), SizeOf(TWaveHdr)); fin; fin; fin.
J'espère que cet article sera utile à la programmation Delphi de chacun.