天生天养

老廖的技术人生

用户操作
[即时聊天] [发私信] [加为好友]
天生天养ID:aaronlao
22785次访问,排名5737,好友0人,关注者0人。
aaronlao的文章
原创 8 篇
翻译 0 篇
转载 24 篇
评论 24 篇
天生天养的公告
[MSN]Aaronlao@126.com [QQ]13649613
最近评论
DCSOFT:中文VS2005Express正式版悄然发布
http://www.dcsoft.cn
天生天养:软件的注册:

请打开软件,点击"帮助"->"软件注册"
根据上面的说明发送邮件,再等待回复.
把回复中的注册码填入文本框,点击"注册认证"即可.
文章分类
收藏
    相册
    个人.工作.求职
    南方人才网
    我的财富博客
    生活.日常.健康
    中国同学录
    数码.手机.硬件
    友人网[选机中心]
    太平洋电脑网
    下载.学习.资源
    126免费邮箱
    csdn.net
    Delphi园地
    MSDN中文网
    大富翁论坛
    木蚂蚁[破解]
    源码之家
    影视.音乐.娱乐
    亲亲我音乐频道
    综合.论坛.社区
    天涯虚拟社区
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 如何用Delphi制作录音程序收藏

    新一篇: 关机代码 | 旧一篇: 屏蔽ALT+F4的一个方法(附:键盘常用ASCII码)

    作者:陈经韬  出处:  更新时间: 2005年03月16日
     
        Delphi是Inprise(前Borland)公司的优秀的可视化编程工具,它自带的Mediaplayer控件是开发多媒体的利器。用它几分钟就可以做出一个象解霸一样可以播放多媒体文件的程序来。但可能很少人知道,用它也可以做一个录音程序。
        运行Delphi,在System页拖一个Mediaplayer控件到窗体上,默认名为Mediaplayer1。由于我们的程序是采用自己的按钮,所以将Mediaplayer1的Visible属性设置为False,其它属性保持默认值。再放两个按钮Button1和Button2。Button1的属性Name改为BtStart,Caption改为"开始录音", Button2的属性Name改为BtStop,Caption改为"停止录音",Enabled属性改为False。然后切换窗口到代码窗口,开始书写代码。
        程序中,我们定义了一个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文件
        外国一个很出名的用Delphi编写的远程控制软件Netbus有一个声音监听功能,就是用本文的方法写的。它先把对方的声音录制下来,然后传送回来,达到监听对方的目的。当然,前提是对方必须安装有话筒,否则监听到的是对方播放的声音(如打开解霸或者Readplay播放,运行本程序,就可以把播放的声音录制下来了)。
        实际上,现在的网络声音传播技术已经发展到一定阶段,语音对讲和IP电话等也开始成熟。不过它们采用的是VOX格式或者ACM格式,具体代码可以在我的主页http://Lovejingtao.126.com下载。但如果对VOX或者ACM格式不熟悉的朋友,也可以用本文的方法来制作自己的“录音机”。至于如何调用系统自带的avifil32.dll来进行网络视频播放,在有机会时再跟大家交流吧。
    本程序在Pwin98+Delphi5下通过。

    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就是录制的声音文件。但这种情况很少发生。(机会几乎为零^-^)
    3、本程序在运行解霸和Replayer下录制声音通过。

    发表于 @ 2006年03月16日 16:13:00|评论(loading...)|编辑

    新一篇: 关机代码 | 旧一篇: 屏蔽ALT+F4的一个方法(附:键盘常用ASCII码)

    评论:没有评论。

    Csdn Blog version 3.1a
    Copyright © 天生天养
    举报电话:13552009689