⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unt_main.pas

📁 WAV录音机
💻 PAS
字号:
unit Unt_main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, MPlayer, bsSkinCtrls, BusinessSkinForm, bsSkinData,
  bsMessages;

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;
    bsStoredSkin1: TbsStoredSkin;
    bsSkinData1: TbsSkinData;
    Btstart: TbsSkinButton;
    Btstop: TbsSkinButton;
    ssd: TbsSkinRadioGroup;
    syz: TbsSkinRadioGroup;
    spl: TbsSkinRadioGroup;
    bsBusinessSkinForm1: TbsBusinessSkinForm;
    //自定义写一个Wav文件头过程
    procedure Createwav(channels : word; resolution : word;
                          rate : longint; fn : string);
    procedure BtstartClick(Sender: TObject);
    procedure BtstopClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unt_pheart;

{$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);
var
  sd,yz,pl:integer;
begin
  pl:=11025;
  if ssd.ItemIndex=0 then sd:=1 else sd:=2;
  if syz.ItemIndex=0 then yz:=8 else yz:=16;
  if spl.ItemIndex=0 then pl:=11025
    else if spl.ItemIndex=1 then pl:=22050
      else if spl.ItemIndex=2 then pl:=44100;

  try
   //在程序当前目录下创建一个Wav文件Temp.wav
    CreateWav(sd, yz, pl, (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;

procedure TForm1.FormCreate(Sender: TObject);
begin
  WriteMciConfig;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -