El ejemplo de este artículo describe cómo crear archivos wav en Delphi. Compártelo con todos para tu referencia. Los detalles son los siguientes:
Aquí Delphi usa la función waveIn... para crear archivos wav.
El código específico es el siguiente:
//Usa la ventana para aceptar mensajes del dispositivo de audio: la interfaz de la unidad Unidad1 usa Windows, Mensajes, SysUtils, Variantes, Clases, Gráficos, Controles, Formularios, Diálogos, StdCtrls tipo TForm1 = class(TForm) Botón1: TButton; : TButton ; TButton; procedimiento FormCreate(Remitente: TObject procedimiento Button1Click(Remitente: TObject procedimiento); Button2Click(Remitente: TObject); procedimiento Button3Click(Remitente: TObject); procedimiento protegido WndProc(var m: TMessage); var Form1: TForm1; la implementación {$R *.dfm} usa MMSystem; whOut: TWaveHdr; hWaveIn,hWaveOut: HWAVE fmt: TWaveFormatEx; buf1,buf2,SaveBuf: TBytes; procedimiento TForm1.FormCreate(Remitente: TObject); comenzar Button1.Caption := 'Iniciar grabación'; ; //Iniciar procedimiento de grabación TForm1.Button1Click(Sender: TObject start {Especifique el formato a grabar} fmt.wformattag: = wave_format_pcm; SaveBuf := nil; {Borrar contenido grabado} si waveInOpen(@hWaveIn, WAVE_MAPPER, @fmt, Handle, 0, CALLBACK_WINDOW) = 0 entonces comience SetLength(buf1, 1024*8) SetLength(buf2, 1024*8); .lpData := PAnsiChar(buf1); whIn1.dwBufferLength:= Longitud(buf1); whIn1.dwBytesRecorded:= 0; whIn1.dwUser:= 0; whIn1.reserved:= 0; whIn2.lpDatos := PAnsiChar(buf2); whIn2.dwBufferLength:= Longitud(buf2); whIn2.dwBytesRecorded:= 0; whIn2.dwUser:= 0; whIn2.dwFlags:= 0; whIn2.reservado: = 0; waveInPrepareHeader(hWaveIn, @whIn1, SizeOf(TWaveHdr)); waveInPrepareHeader(hWaveIn, @whIn2, SizeOf(TWaveHdr)); waveInAddBuffer(hWaveIn, @whIn1, SizeOf(TWaveHdr)); ); waveInStart(hWaveIn); end; end; //Detener el procedimiento de grabación TForm1.Button2Click(Sender: TObject); waveInUnprepareHeader(hWaveIn, @whIn2, SizeOf) (TWaveHdr)); waveInClose(hWaveIn); //Reproducir procedimiento de grabación TForm1.Button3Click(Remitente: TObject); comenzar whOut.dwBytesRecorded := 0; .dwUser := 0; whOut.dwFlags := 0; whOut.dwLoops:= 1; whOut.lpNext:= nil; whOut.reserved:= 0; waveOutOpen(@hWaveOut, @whOut, SizeOf(TWaveHdr)) ; ondaOutWrite(hWaveOut, @whOut, SizeOf(TWaveHdr)); fin; procedimiento TForm1.WndProc(var m: TMessage); var ordLen: Integer; comienza heredado; case m.Msg de {procesando mensaje de grabación} MM_WIM_OPEN: {este mensaje solo lleva el identificador del dispositivo} MM_WIM_CLOSE : ; {Este mensaje solo lleva el identificador del dispositivo} MM_WIM_DATA: comenzar {Este mensaje lleva el identificador del dispositivo y el puntero WaveHdr (LParam)} {Guardar los datos grabados} ordLen := Longitud(SaveBuf(SaveBuf, ordLen + PWaveHdr(m.LParam).dwBytesRecorded(Ptr(DWORD(); GuardarBuf)+ordLen), PWaveHdr(m.LParam).lpData, PWaveHdr(m.LParam).dwBytesRecorded); {continuar grabando} waveInAddBuffer(hWaveIn, PWaveHdr(m.LParam), SizeOf(TWaveHdr)); {Este mensaje solo lleva el identificador del dispositivo} MM_WOM_CLOSE: ; {Este mensaje solo lleva el identificador del dispositivo} MM_WOM_DONE: comenzar {Este mensaje lleva el identificador del dispositivo y el puntero WaveHdr (LParam)} waveOutUnprepareHeader(hWaveOut, PWaveHdr(m.LParam), SizeOf(TWaveHdr)); fin; fin; fin.
Espero que este artículo sea útil para la programación Delphi de todos.