この記事の例では、Delphi で wav ファイルを作成する方法を説明します。皆さんの参考に共有してください。詳細は以下のとおりです。
ここで、delphi は waveIn... 関数を使用して wav ファイルを作成します
具体的なコードは次のとおりです。
// オーディオ デバイスからのメッセージを受け入れるためにウィンドウを使用します: ユニット Unit1; インターフェイスは Windows、Messages、SysUtils、Variants、Classes、Graphics、Controls、Forms、Dialogs、StdCtrls を使用します。 type TForm1 = class(TForm) Button1: TButton; : TButton ; Button3: TButton; プロシージャ FormCreate(Sender: TObject); Button2Click(Sender: TObject); プロシージャ Button3Click(var m: TMessage); var Form1: TForm1; は MMSystem を使用します。 whOut: TWaveHdr; hWaveIn、hWaveOut: HWAVE; buf1,buf2,SaveBuf: TBytes; プロシージャ TForm1.FormCreate(Sender: TObject); begin Button1.Caption := '記録の開始'; Button2.Caption := '記録の再生'; ; //記録開始手続き TForm1.Button1Click(Sender: TObject); fmt.wFormatTag := WAVE_FORMAT_PCM; fmt.nChannels := 22050; fmt.nBlockAlign := 16; t.cbサイズ := 0; SaveBuf := nil; {記録されたコンテンツをクリアする} if waveInOpen(@hWaveIn, WAVE_MAPPER, @fmt, Handle, 0, CALLBACK_WINDOW) = 0 then begin SetLength(buf2, 1024*8) ; .lpData := PAnsiChar(buf1); whIn1.dwBufferLength := 長さ(buf1); whIn1.dwUser := 0; whIn1.dwLoops := nil; 0; whIn2.lpデータ := PAnsiChar(buf2); whIn2.dwBufferLength := 長さ(buf2); whIn2.dwUser := 0; whIn2.dwLoops := nil; whIn2.予約 := 0; waveInPrepareHeader(hWaveIn, @whIn1, SizeOf(TWaveHdr)); waveInPrepareHeader(hWaveIn, @whIn2, SizeOf(TWaveHdr)); waveInAddBuffer(hWaveIn, @whIn2, SizeOf(TWaveHdr)) ); waveInStart(hWaveIn); end; // 記録プロシージャを停止します。 waveInUnprepareHeader(hWaveIn, @whIn2, SizeOf); (TWaveHdr)); waveInClose(hWaveIn); // 録音プロシージャの開始 whOut.lpData := Length(SaveBuf); .dwUser := 0; whOut.dwFlags := 0; whOut.dwLoops := 1; whOut.lpNext := nil; waveOutOpen(@hWaveOut, WAVE_MAPPER, @fmt, ハンドル, 0, CALLBACK_WINDOW); ; waveOutWrite(hWaveOut, @whOut, SizeOf(TWaveHdr)); プロシージャ TForm1.WndProc(var m: TMessage); var ordLen: Integer; case m.Msg of {処理中メッセージ} MM_WIM_CLOSE : ; {このメッセージにはデバイス ハンドルのみが含まれます} MM_WIM_DATA: begin {このメッセージにはデバイス ハンドルと WaveHdr ポインター (LParam) が含まれます} {記録されたデータを保存します} ordLen := Length(SaveBuf)(SaveBuf, ordLen + PWaveHdr(m.LParam).dwBytesRecorded); 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: begin {このメッセージはデバイス ハンドルと WaveHdr ポインター (LParam) を伝えます} waveOutUnprepareHeader(hWaveOut, PWaveHdr(m.LParam), SizeOf(TWaveHdr));終わり; 終わり。
この記事が皆さんの Delphi プログラミングに役立つことを願っています。