麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > Delphi > 正文

如何用Delphi制作錄音程序

2019-11-18 18:41:43
字體:
供稿:網(wǎng)友
      如何用Delphi制作錄音程序
                                                                陳經(jīng)韜

   Delphi是InPRise(前Borland)公司的優(yōu)秀的可視化編程工具,它自帶的Mediaplayer控件是開發(fā)多媒體的利器。用它幾分鐘就可以做出一個(gè)象解霸一樣可以播放多媒體文件的程序來。但可能很少人知道,用它也可以做一個(gè)錄音程序。
    運(yùn)行Delphi,在System頁(yè)拖一個(gè)Mediaplayer控件到窗體上,默認(rèn)名為Mediaplayer1。由于我們的程序是采用自己的按鈕,所以將Mediaplayer1的Visible屬性設(shè)置為False,其它屬性保持默認(rèn)值。再放兩個(gè)按鈕Button1和Button2。Button1的屬性Name改為BtStart,Caption改為"開始錄音", Button2的屬性Name改為BtStop,Caption改為"停止錄音",Enabled屬性改為False。然后切換窗口到代碼窗口,開始書寫代碼。
    程序中,我們定義了一個(gè)Wav文件的文件頭格式,錄音時(shí)先創(chuàng)建一個(gè)只有文件頭的Wav文件,然后將Mediaplayer1錄制下來的聲音寫進(jìn)文件。其中CreateWav過程的幾個(gè)參數(shù)意義如下:第一個(gè)channels代表聲道,取1時(shí)代表單聲,取2時(shí)代表立體聲。resolution也只有兩個(gè)值可以選擇,取8時(shí)代表8位聲音,取16時(shí)代表16位聲音,rate則代表聲音頻率,如11025,22050, 44100。值越大則聲音越清晰,當(dāng)然,所錄制的文件也越大。最后一個(gè)參數(shù)則代表對(duì)應(yīng)的文件名稱了。所以CreateWav可以有以下形式:
CreateWav(1,8,11025,'C:/abc.wav');//在C盤根目錄下創(chuàng)建一個(gè)8位單聲道頻率為11025的名為abc.wav的Wav文件
CreateWav(2,16,44100,'C:/abc.wav');//在C盤根目錄下創(chuàng)建一個(gè)16位立體聲道頻率為44100的名為abc.wav的Wav文件

    外國(guó)一個(gè)很出名的用Delphi編寫的遠(yuǎn)程控制軟件Netbus有一個(gè)聲音監(jiān)聽功能,就是用本文的方法寫的。它先把對(duì)方的聲音錄制下來,然后傳送回來,達(dá)到監(jiān)聽對(duì)方的目的。當(dāng)然,前提是對(duì)方必須安裝有話筒,否則監(jiān)聽到的是對(duì)方播放的聲音(如打開解霸或者Readplay播放,運(yùn)行本程序,就可以把播放的聲音錄制下來了)。
    實(shí)際上,現(xiàn)在的網(wǎng)絡(luò)聲音傳播技術(shù)已經(jīng)發(fā)展到一定階段,語音對(duì)講和ip電話等也開始成熟。不過它們采用的是VOX格式或者ACM格式,具體代碼可以在我的主頁(yè)http://Lovejingtao.126.com下載。但如果對(duì)VOX或者ACM格式不熟悉的朋友,也可以用本文的方法來制作自己的“錄音機(jī)”。至于如何調(diào)用系統(tǒng)自帶的avifil32.dll來進(jìn)行網(wǎng)絡(luò)視頻播放,在有機(jī)會(huì)時(shí)再跟大家交流吧。
本程序在Pwin98+Delphi5下通過。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, MPlayer;

type
TWavHeader = record //定義一個(gè)Wav文件頭格式 
rId : longint; 
rLen : longint; 
wId : longint; 
fId : longint; 
fLen : longint; 
wFormatTag : Word
nChannels : word; 
nSamplesPerSec : longint; 
nAvgBytesPerSec : longint; 
nBlockAlign : word; 
wBitsPerSample : word; 
dId : longint; 
wSampleLength : longint; 
end;
TForm1 = class(TForm)
MediaPlayer1: TMediaPlayer;
BtStart: TButton;
BtStop: TButton;
procedure CreateWav(channels : word; resolution : word; rate : longint; fn : string);//自定義寫一個(gè)Wav文件頭過程
procedure BtStartClick(Sender: TObject);
procedure BtStopClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.CreateWav( channels : word; { 1(單聲)或者2(立體聲) }
resolution : word; { 8或者16,代表8位或16位聲音 }
rate : longint; { 聲音頻率,如11025,22050, 44100}
fn : string { 對(duì)應(yīng)的文件名稱 } );
var
wf : file of TWavHeader;
wh : TWavHeader;
begin
wh.rId := $46464952; 
wh.rLen := 36; 
wh.wId := $45564157; 
wh.fId := $20746d66; 
wh.fLen := 16; 
wh.wFormatTag := 1; 
wh.nChannels := channels; 
wh.nSamplesPerSec := rate; 
wh.nAvgBytesPerSec := channels*rate*(resolution div 8);
wh.nBlockAlign := channels*(resolution div 8);
wh.wBitsPerSample := resolution;
wh.dId := $61746164; 
wh.wSampleLength := 0; 

assignfile(wf,fn); {打開對(duì)應(yīng)文件 } 
rewrite(wf); {移動(dòng)指針到文件頭} 
write(wf,wh); {寫進(jìn)文件頭 } 
closefile(wf); {關(guān)閉文件 } 
end;
procedure TForm1.BtStartClick(Sender: TObject);
begin
try
//在程序當(dāng)前目錄下創(chuàng)建一個(gè)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;
except
BtStart.Enabled:=True;
BtStop.Enabled:=false;
Application.MessageBox('媒體設(shè)備初始化失敗!','錯(cuò)誤',MB_ICONERROR+MB_OK);
end;
end;

procedure TForm1.BtStopClick(Sender: TObject);
begin
try
MediaPlayer1.Stop;
MediaPlayer1.Save;
MediaPlayer1.Close;
Application.MessageBox('聲音錄制完畢!','信息',MB_ICONINFORMATION+MB_OK);
BtStart.Enabled:=True;
BtStop.Enabled:=false;
except
Application.MessageBox('保存聲音文件出錯(cuò)!','錯(cuò)誤',MB_ICONERROR+MB_OK);
BtStart.Enabled:=True;
BtStop.Enabled:=false;
end;
end;
end.

補(bǔ)充:1、錄制的文件播放時(shí)可能要把音頻屬性的Wav調(diào)大。
2、如果系統(tǒng)安裝了其它一些音頻驅(qū)動(dòng)程序,則可能錄制的Wav文件大小為零,但會(huì)同時(shí)生成一個(gè)TMP結(jié)尾的文件,將其擴(kuò)展名改為Wav就是錄制的聲音文件。但這種情況很少發(fā)生。(機(jī)會(huì)幾乎為零^-^)
3、本程序在運(yùn)行解霸和Replayer下錄制聲音通過。

上一篇:Delphi隨筆一

下一篇:談Delphi編程中“流”的應(yīng)用

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 天海翼四虎精品正在播放 | 久久精品99久久久久久2456 | 狠狠色成色综合网 | 一区二区三区视频在线 | 黄色片网站在线看 | 国产精品久久久久久久久久10秀 | 国产精品久久久久久久久久 | 国产精品91久久久 | 欧美在线观看黄色 | 好吊一区二区三区 | 日韩av电影在线免费观看 | 精品亚洲va在线va天堂资源站 | 国产午夜精品一区 | 久久精品视频一区二区三区 | 嗯~啊~用力~高h | 欧美成人一区二区三区 | 国产精品久久久久久久娇妻 | 成人午夜精品久久久久久久蜜臀 | 麻豆国产网站 | 久久久一区二区三区视频 | 成年人国产视频 | 久久精品在线免费观看 | 国产一级毛片不卡 | 欧美综合在线观看 | 欧美日韩高清在线观看 | 91香蕉国产亚洲一区二区三区 | 视频一区国产 | www国产免费 | 欧美精品一区二区三区在线播放 | 精精国产xxxx视频在线野外 | 水卜樱一区二区av | 羞羞视频免费网站含羞草 | 欧美 日韩 中文 | 亚洲网站免费看 | 4480午夜| 久久午夜神器 | 色a综合| 精品国产一区二区亚洲人成毛片 | 深夜福利视频免费观看 | 一区二区三区视频在线观看 | 男男羞羞视频网站国产 |