이 문서의 예제에서는 Delphi에서 wav 파일을 만드는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부사항은 다음과 같습니다:
여기서 델파이는 waveIn... 함수를 사용하여 wav 파일을 생성합니다.
구체적인 코드는 다음과 같습니다.
//오디오 장치의 메시지를 수락하려면 창을 사용합니다. 유닛 Unit1; 인터페이스는 Windows, 메시지, SysUtils, 변형, 클래스, 그래픽, 컨트롤, 양식, 대화 상자, StdCtrls를 사용합니다. type TForm1 = class(TForm) Button1: TButton; : TButton ; TButton; 프로시저 FormCreate(Sender: TObject); 프로시저 Button1Click(Sender: TObject); Button2Click(Sender: TObject); protected 프로시저 WndProc(var m: TForm1); 구현 {$R *.dfm} var whIn1, whOut: TWaveHdr; hWaveIn,hWaveOut: HWAVE: TWaveFormatEx; buf1,buf2,SaveBuf: TBytes; 프로시저 TForm1.FormCreate(Sender: TObject); start Button1.Caption := '녹화 시작'; Button2.Caption := '녹화 중지'; ; //녹화 시작 TForm1.Button1Click(Sender: TObject) start {녹화할 형식 지정} fmt. SaveBuf := nil; {녹화된 내용 지우기} if waveInOpen(@hWaveIn, WAVE_MAPPER, @fmt, Handle, 0, CALLBACK_WINDOW) = 0이면 SetLength(buf1, 1024*8) SetLength(buf2, 1024*8) ; .lpData := PAnsiChar(buf1); whIn1.dwBufferLength := 길이(buf1); whIn1.dwUser := 0; whIn1.dwLoops := 0; 0;whIn2.lpData := PAnsiChar(buf2); whIn2.dwBufferLength := 길이(buf2); whIn2.dwUser := 0; whIn2.dwLoops := 0; whIn2.reserved := 0; waveInPrepareHeader(hWaveIn, @whIn1, SizeOf(TWaveHdr)); waveInPrepareHeader(hWaveIn, @whIn2, SizeOf(TWaveHdr)); waveInAddBuffer(hWaveIn, @whIn1, SizeOf(TWaveHdr)); ); waveInStart(hWaveIn); end; //기록 중지 TForm1.Button2Click(Sender: TObject); waveInUnprepareHeader(hWaveIn, @whIn1, SizeOf(TWaveHdr)); (TWaveHdr)); waveInClose(hWaveIn); end; //녹화 프로시저 TForm1.Button3Click(Sender: TObject); 시작 whOut.lpData := PAnsiChar(SaveBuf); whOut.dwBytesRecorded := 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; 프로시저 TForm1.WndProc(var m: TMessage); var ordLen: Integer; {녹화 메시지 처리 중} MM_WIM_OPEN: MM_WIM_CLOSE : ; {이 메시지는 장치 핸들만 전달합니다.} MM_WIM_DATA: 시작 {이 메시지는 장치 핸들 및 WaveHdr 포인터(LParam)를 전달합니다} {기록된 데이터 저장} ordLen := Length(SaveBuf); SetLength(SaveBuf, ordLen + PWaveHdr(m.LParam).dwBytesRecorded) CopyMemory(Ptr(DWORD( SaveBuf)+ordLen), PWaveHdr(m.LParam).lpData, PWaveHdr(m.LParam).dwBytesRecorded); {녹화 계속} waveInAddBuffer(hWaveIn, PWaveHdr(m.LParam), SizeOf(TWaveHdr)) {프로세스 재생 메시지} MM_WOM_OPEN: ; {이 메시지는 장치 핸들만 전달합니다.} MM_WOM_CLOSE: ; {이 메시지는 장치 핸들만 전달합니다.} MM_WOM_DONE: start {이 메시지는 장치 핸들과 WaveHdr 포인터(LParam)를 전달합니다.} waveOutUnprepareHeader(hWaveOut, PWaveHdr(m.LParam), SizeOf(TWaveHdr)); 끝; 끝.
이 글이 모든 사람의 델파이 프로그래밍에 도움이 되기를 바랍니다.