Delphi を使用して録画プログラムを作成する方法
チェン・ジンタオ
Delphi は、InPRise (旧 Borland) の優れたビジュアル プログラミング ツールであり、内蔵の Mediaplayer コントロールはマルチメディア開発用の強力なツールです。これを使用すると、Jieba のようなマルチメディア ファイルを再生できるプログラムをわずか数分で作成できます。しかし、録画番組の作成にも使用できることを知っている人は少ないかもしれません。
Delphi を実行し、システム ページの Mediaplayer コントロールをフォームにドラッグします。デフォルト名は Mediaplayer1 です。プログラムは独自のボタンを使用するため、Mediaplayer1 の Visible プロパティを False に設定し、他のプロパティはデフォルト値のままにします。さらに 2 つのボタン、Button1 と Button2 を配置します。 Button1 の属性名は BtStart に変更され、キャプションは「Start Recording」に変更され、Button2 の属性名は BtStop に変更され、キャプションは「Stop Recording」に変更され、Enabled 属性は False に変更されます。次に、ウィンドウをコード ウィンドウに切り替えて、コードの作成を開始します。
プログラムでは、Wav ファイルのファイル ヘッダー形式を定義して、録音するときに、まずファイル ヘッダーのみを含む Wav ファイルを作成し、そのファイルに Mediaplayer1 で録音した音声を書き込みます。 CreateWav プロセスのいくつかのパラメーターの意味は次のとおりです。最初のチャンネルはサウンド チャンネルを表し、1 を選択するとモノラルを表し、2 を選択するとステレオを表します。解像度も 2 つの値から選択できます。8 を選択すると 8 ビット サウンドを表し、レートは 11025、22050、44100 などの 16 ビット サウンドを表します。値が大きいほどサウンドがクリアになり、当然録音ファイルのサイズも大きくなります。最後のパラメータは、対応するファイル名を表します。したがって、CreateWav は次の形式にすることができます。
CreateWav(1,8,11025,'C:/abc.wav');// abc.wav という名前で周波数 11025 の 8 ビット モノラル Wav ファイルをドライブ C のルート ディレクトリに作成します
CreateWav(2,16,44100,'C:/abc.wav');//16 ビット ステレオ チャネル周波数 44100 の abc.wav という名前の Wav ファイルをドライブ C のルート ディレクトリに作成します
Delphi で書かれた海外の有名な遠隔制御ソフトウェアである Netbus には、この記事の方法で書かれたサウンドモニタリング機能があります。相手を監視するという目的を達成するために、まず相手の音声を録音し、それを送り返します。もちろん、相手がマイクをインストールしていることが前提です。そうしないと、相手が再生するサウンドが監視されます(たとえば、Jieba または Readplay を開いてこのプログラムを実行すると、再生されたサウンドが録音されます)。
実際、現在のネットワーク音声伝送技術は一定の段階まで発展し、音声インターホンやIP電話も成熟し始めています。ただし、VOX 形式または ACM 形式を使用します。特定のコードは私のホームページ http://Lovejingtao.126.com からダウンロードできます。ただし、VOX または ACM 形式に詳しくない場合は、この記事の方法を使用して独自の「レコーダー」を作成することもできます。オンラインビデオ再生用にシステムに付属する avifil32.dll を呼び出す方法については、機会があればお知らせします。
このプログラムは Pwin98+Delphi5 の下で合格しました。
ユニットユニット1;
インタフェース
用途
ウィンドウ、メッセージ、SysUtils、クラス、グラフィックス、コントロール、フォーム、ダイアログ、
StdCtrls、MPlayer;
タイプ
TWavHeader = record //Wav ファイルのヘッダー形式を定義します
rId: 倍長整数;
rLen : 倍長整数;
wId: 倍長整数;
fId: 倍長整数;
fLen : 倍長整数;
wFormatTag : Word;
nChannels : 単語;
nSamplesPerSec : 倍長整数;
nAvgBytesPerSec : 倍長整数;
nBlockAlign: ワード;
wBitsPerSample: 単語;
dId: 倍長整数;
wSampleLength : 倍長整数;
終わり;
TForm1 = クラス(TForm)
MediaPlayer1: TMediaPlayer;
BtStart: TButton;
BtStop: TButton;
プロシージャ CreateWav(channels : word;solution : word; rate : longint; fn : string);//Wav ファイル ヘッダーを書き込むプロセスをカスタマイズします
プロシージャ BtStartClick(送信者: TObject);
プロシージャ BtStopClick(送信者: TObject);
プライベート
{プライベート宣言}
公共
{公的宣言}
終わり;
変数
フォーム1: TForm1;
実装
{$R *.DFM}
プロシージャ TForm1.CreateWav( チャンネル : ワード; { 1 (モノラル) または 2 (ステレオ) }
解像度 : ワード; { 8 または 16、8 ビットまたは 16 ビットのサウンドを表す}
rate: 倍長整数 {音の周波数、11025、22050、44100 など}
fn: 文字列 {対応するファイル名});
変数
wf: TWavHeader のファイル。
wh : TWavヘッダー;
始める
wh.rId := $46464952;
wh.rLen := 36;
wh.wId := $45564157;
wh.fId := $20746d66;
wh.fLen := 16;
wh.wFormatTag := 1;
wh.nChannels := チャンネル;
wh.nSamplesPerSec := レート;
wh.nAvgBytesPerSec := チャネル*レート*(解像度 div 8);
wh.nBlockAlign := チャンネル*(解像度 div 8);
wh.wBitsPerSample := 解像度;
wh.dId := $61746164;
wh.wSampleLength := 0;
assignfile(wf,fn); {対応するファイルを開く}
rewrite(wf); {ポインタをファイルの先頭に移動}
write(wf,wh); {ファイルヘッダーに書き込む}
closefile(wf); {ファイルを閉じる}
終わり;
プロシージャ TForm1.BtStartClick(送信者: TObject);
始める
試す
//プログラムのカレントディレクトリにWavファイルTemp.wavを作成
CreateWav(1, 8, 11025, (ExtractFilePath(application.ExeName)+ 'Temp.wav'));
MediaPlayer1.DeviceType := dtAutoSelect;
MediaPlayer1.FileName := (ExtractFilePath(Application.ExeName)+ 'Temp.wav');
MediaPlayer1.Open;
MediaPlayer1.StartRecording;
BtStart.Enabled:=false;
BtStop.Enabled:=true;
を除外する
BtStart.Enabled:=True;
BtStop.Enabled:=false;
Application.MessageBox('メディア デバイスの初期化に失敗しました!','エラー',MB_ICONERROR+MB_OK);
終わり;
終わり;
プロシージャ TForm1.BtStopClick(送信者: TObject);
始める
試す
MediaPlayer1.停止;
MediaPlayer1.保存;
MediaPlayer1.Close;
Application.MessageBox('音声録音が完了しました!','メッセージ',MB_ICONINFORMATION+MB_OK);
BtStart.Enabled:=True;
BtStop.Enabled:=false;
を除外する
Application.MessageBox('サウンド ファイルの保存中にエラーが発生しました!','エラー',MB_ICONERROR+MB_OK);
BtStart.Enabled:=True;
BtStop.Enabled:=false;
終わり;
終わり;
終わり。
補足: 1. 録音したファイルを再生する場合、audio 属性の Wav 値を増やす必要がある場合があります。
2. システムに他のオーディオ ドライバーがインストールされている場合、録音される Wav ファイルのサイズはゼロになることがありますが、拡張子を Wav に変更したファイルが同時に生成されます。しかし、これはめったに起こりません。 (可能性はほぼゼロです^-^)
3. このプログラムは、Jieba と Replayer の実行中にサウンド録音を渡すことができます。