全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1633
推到 Plurk!
推到 Facebook!

Mediaplayer控件制作[录音]程序

 
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-22 16:40:30 IP:61.155.xxx.xxx 未訂閱
程序中,我们定义了一个Wav文件的文件头格式,录音时先创建一个只有文件头的Wav文件,然后将Mediaplayer1录制下来的声音写进文件。其中CreateWav过程的几个参数意义如下:第一个channels代表声道,取1时代表单声,取2时代表立体声。resolution也只有两个值可以选择,取8时代表8位声音,取16时代表16位声音,rate则代表声音频率,如11025,22050, 44100。值越大则声音越清晰,当然,所录制的文件也越大。最后一个参数则代表对应的文件名称了。所以CreateWav可以有以下形式: CreateWav(1,8,11025,'C:\abc.wav');//在C盘根目录下创建一个8位单声道频率为11025的名为abc.wav的Wav文件 CreateWav(2,16,44100,'C:\abc.wav');//在C盘根目录下创建一个16位立体声道频率为44100的名为abc.wav的Wav文件 unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MPlayer; type TWavHeader = record //定义一个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);//自定义写一个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 { 对应的文件名称 } ); 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); {打开对应文件 } rewrite(wf); {移动指针到文件头} write(wf,wh); {写进文件头 } closefile(wf); {关闭文件 } end; procedure TForm1.BtStartClick(Sender: TObject); begin try //在程序当前目录下创建一个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('媒体设备初始化失败!','错误',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('保存声音文件出错!','错误',MB_ICONERROR MB_OK); BtStart.Enabled:=True; BtStop.Enabled:=false; end; end; end. 补充:1、录制的文件播放时可能要把音频属性的Wav调大。 2、如果系统安装了其它一些音频驱动程序,则可能录制的Wav文件大小为零,但会同时生成一个TMP结尾的文件,将其扩展名改为Wav就是录制的声音文件。但这种情况很少发生。(机会几乎为0) 风花雪月 e梦情缘
------
风花雪月 e梦情缘
系統時間:2024-04-24 8:51:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!