O exemplo neste artigo descreve como criar arquivos wav em Delphi. Compartilhe com todos para sua referência. Os detalhes são os seguintes:
Aqui o delphi usa a função waveIn... para criar arquivos wav
O código específico é o seguinte:
//Use a janela para aceitar mensagens do dispositivo de áudio: unit Unit1; interface usa Windows, Mensagens, SysUtils, Variantes, Classes, Gráficos, Controles, Formulários, Diálogos, StdCtrls; : TButton ; Button3: TButton; procedimento FormCreate(Remetente: procedimento TObject Button1Click(Remetente: procedimento TObject); Button2Click(Sender: TObject); procedimento Button3Click(Sender: TObject); procedimento protegido WndProc(var m: TMessage); whOut: TWaveHdr; hWaveIn,hWaveOut: HWAVE fmt: TWaveFormatEx; buf1,buf2,SaveBuf: TBytes; procedimento TForm1.FormCreate(Sender: TObject); começar Button1.Caption := 'Iniciar gravação'; ; //Iniciar procedimento de gravação TForm1.Button1Click(Sender: TObject start {Especifique o formato a ser gravado} fmt.wFormatTag := WAVE_FORMAT_PCM; fmt.nChannels := 2; cbTamanho := 0; SaveBuf := nil; {Limpar conteúdo gravado} se waveInOpen(@hWaveIn, WAVE_MAPPER, @fmt, Handle, 0, CALLBACK_WINDOW) = 0 então comece SetLength(buf1, 1024*8); .lpData := PAnsiChar(buf1); whIn1.dwBufferLength := Comprimento (buf1); whIn1.dwBytesRecorded := 0; whIn1.dwUser := 0; 0;whIn2.lpData := PAnsiChar(buf2); whIn2.dwBufferLength := Comprimento(buf2); whIn2.dwLoops := 0; whIn2.reservado := 0; waveInPrepareHeader(hWaveIn, @whIn1, SizeOf(TWaveHdr)); waveInPrepareHeader(hWaveIn, @whIn2, SizeOf(TWaveHdr)); TWaveHdr) ); waveInStart(hWaveIn); end; fim do procedimento de gravação TForm1.Button2Click(Sender: TObject); (TWaveHdr)); waveInClose(hWaveIn); //Reproduzir procedimento de gravação TForm1.Button3Click(Sender: TObject); start whOut.lpData := whOut.dwBufferLength := Length(SaveBuf); .dwUser:= 0; whOut.dwLoops := 1; whOut.lpNext := nil; whOut.reserved := 0; ; waveOutWrite(hWaveOut, @whOut, SizeOf(TWaveHdr)); end procedure TForm1.WndProc(var m: TMessage); {esta mensagem carrega apenas o identificador do dispositivo} MM_WIM_CLOSE : ; {Esta mensagem carrega apenas o identificador do dispositivo} MM_WIM_DATA: começar {Esta mensagem carrega o identificador do dispositivo e o ponteiro WaveHdr (LParam)} {Salve os dados gravados} ordLen := Length(SaveBuf(SaveBuf, ordLen + PWaveHdr(m.LParam).dwBytesRecorded(Ptr(DWORD(); SaveBuf)+ordLen), PWaveHdr(m.LParam).lpData, PWaveHdr(m.LParam).dwBytesRecorded); {continuar gravando} waveInAddBuffer(hWaveIn, PWaveHdr(m.LParam), SizeOf(TWaveHdr)); {Esta mensagem contém apenas o identificador do dispositivo} MM_WOM_CLOSE: ; {Esta mensagem carrega apenas o identificador do dispositivo} MM_WOM_DONE: start {Esta mensagem carrega o identificador do dispositivo e o ponteiro WaveHdr (LParam)} waveOutUnprepareHeader(hWaveOut, PWaveHdr(m.LParam), SizeOf(TWaveHdr)); fim; fim;
Espero que este artigo seja útil para a programação Delphi de todos.