delphi에서 wav 파일을 만드는 방법
여기 델파이가 웨이브인으로...함수 생성 wav 파일
구체적인 코드는 다음과 같습니다.
// :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
protected
procedure WndProc(var m: TMessage); override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses MMSystem;
var
whIn1,whIn2, whOut: TWaveHdr;
hWaveIn,hWaveOut: HWAVE;
fmt: TWaveFormatEx;
buf1,buf2,SaveBuf: TBytes;
procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.Caption := ' ';
Button2.Caption := ' ';
Button3.Caption := ' ';
end;
//
procedure TForm1.Button1Click(Sender: TObject);
begin
{ }
fmt.wFormatTag := WAVE_FORMAT_PCM;
fmt.nChannels := 2;
fmt.nSamplesPerSec := 22050;
fmt.nAvgBytesPerSec := 88200;
fmt.nBlockAlign := 4;
fmt.wBitsPerSample := 16;
fmt.cbSize := 0;
SaveBuf := nil; { }
if waveInOpen(@hWaveIn, WAVE_MAPPER, @fmt, Handle, 0, CALLBACK_WINDOW) = 0 then
begin
SetLength(buf1, 1024*8);
SetLength(buf2, 1024*8);
whIn1.lpData := PAnsiChar(buf1);
whIn1.dwBufferLength := Length(buf1);
whIn1.dwBytesRecorded := 0;
whIn1.dwUser := 0;
whIn1.dwFlags := 0;
whIn1.dwLoops := 0;
whIn1.lpNext := nil;
whIn1.reserved := 0;
whIn2.lpData := PAnsiChar(buf2);
whIn2.dwBufferLength := Length(buf2);
whIn2.dwBytesRecorded := 0;
whIn2.dwUser := 0;
whIn2.dwFlags := 0;
whIn2.dwLoops := 0;
whIn2.lpNext := nil;
whIn2.reserved := 0;
waveInPrepareHeader(hWaveIn, @whIn1, SizeOf(TWaveHdr));
waveInPrepareHeader(hWaveIn, @whIn2, SizeOf(TWaveHdr));
waveInAddBuffer(hWaveIn, @whIn1, SizeOf(TWaveHdr));
waveInAddBuffer(hWaveIn, @whIn2, SizeOf(TWaveHdr));
waveInStart(hWaveIn);
end;
end;
//
procedure TForm1.Button2Click(Sender: TObject);
begin
waveInStop(hWaveIn);
waveInUnprepareHeader(hWaveIn, @whIn1, SizeOf(TWaveHdr));
waveInUnprepareHeader(hWaveIn, @whIn2, SizeOf(TWaveHdr));
waveInClose(hWaveIn);
end;
//
procedure TForm1.Button3Click(Sender: TObject);
begin
whOut.lpData := PAnsiChar(SaveBuf);
whOut.dwBufferLength := Length(SaveBuf);
whOut.dwBytesRecorded := 0;
whOut.dwUser := 0;
whOut.dwFlags := 0;
whOut.dwLoops := 1;
whOut.lpNext := nil;
whOut.reserved := 0;
waveOutOpen(@hWaveOut, WAVE_MAPPER, @fmt, Handle, 0, CALLBACK_WINDOW);
waveOutPrepareHeader(hWaveOut, @whOut, SizeOf(TWaveHdr));
waveOutWrite(hWaveOut, @whOut, SizeOf(TWaveHdr));
end;
procedure TForm1.WndProc(var m: TMessage);
var
ordLen: Integer;
begin
inherited;
case m.Msg of
{ }
MM_WIM_OPEN: ; { }
MM_WIM_CLOSE: ; { }
MM_WIM_DATA: begin { 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));
end;
{ }
MM_WOM_OPEN: ; { }
MM_WOM_CLOSE: ; { }
MM_WOM_DONE: begin { WaveHdr (LParam)}
waveOutUnprepareHeader(hWaveOut, PWaveHdr(m.LParam), SizeOf(TWaveHdr));
waveOutClose(hWaveOut);
end;
end;
end;
end.
본고에서 서술한 것이 여러분의 Delphi 프로그램 설계에 도움이 되었으면 합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.