关于录音软件的开发问题 1.录音的语句怎样写的,DELPHI有没有专门的录音控件啊?2.如何选择录音源?比如我想录电脑里发出的声音,语句应怎样写 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, MPlayer;typeTWavHeader = 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;varForm1: TForm1;implementation{$R *.DFM}procedure TForm1.CreateWav( channels : word; { 1(单声)或者2(立体声) }resolution : word; { 8或者16,代表8位或16位声音 }rate : longint; { 声音频率,如11025,22050, 44100}fn : string { 对应的文件名称 } );varwf : file of TWavHeader;wh : TWavHeader;beginwh.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);begintry//在程序当前目录下创建一个Wav文件Temp.wavCreateWav(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;exceptBtStart.Enabled:=True;BtStop.Enabled:=false;Application.MessageBox('媒体设备初始化失败!','错误',MB_ICONERROR+MB_OK);end;end;procedure TForm1.BtStopClick(Sender: TObject);begintryMediaPlayer1.Stop;MediaPlayer1.Save;MediaPlayer1.Close;Application.MessageBox('声音录制完毕!','信息',MB_ICONINFORMATION+MB_OK);BtStart.Enabled:=True;BtStop.Enabled:=false;exceptApplication.MessageBox('保存声音文件出错!','错误',MB_ICONERROR+MB_OK);BtStart.Enabled:=True;BtStop.Enabled:=false;end;end;end.补充:1、录制的文件播放时可能要把音频属性的Wav调大。2、如果系统安装了其它一些音频驱动程序,则可能录制的Wav文件大小为零,但会同时生成一个TMP结尾的文件,将其扩展名改为Wav就是录制的声音文件。但这种情况很少发生。(机会几乎为零^-^)3、本程序在运行解霸和Replayer下录制声音通过。 定义: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;声明方法: //自定义写一个Wav文件头过程 procedure CreateWav(channels: word; resolution : word; rate : longint; fn : string);实现方法:{* channels: 1为单声道 2为立体声 -->(值:1 or 2) resolution: 音质(8位 或者 16位) -->(值:8 or 16) rate: 声音频率(广播11025赫兹 或者 正常22050赫兹 或者 精密44100赫兹) --> (值:11025 or 22050 or 44100)}procedure TMainForm.CreateWav(channels, resolution: word; rate: Integer; fn: string);var wf : file of TWavHeader; wh : TWavHeader;begin try 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); {关闭文件 } except // end;end;方法调用: CreateWav(2, 16, 22050, 'C:\Test.wav'); 如何实现随意改变窗口的大小?? 如何用delphi获得机器的外网地址 自己做数据库!! 如何在程序运行时,动态调整控件的大小、位置 ??? FastReport 报表问题 ??? 大家看看。面对10万条的记录,单机版的程序用啥数据库会比较快。用什么技术手段好一些 DELPHI写的远程控制源代码,要吗? 在学DELPHI之前应该看看什么书???(感谢各位大虾指导) 帮忙看看下面的程序?为什么查询不出结果呢? #0是什么?if not(key in['0'..'9',#8]) then key:=#0;这边的#0是? DELPHI调用网页中javascript函数的问题,急, 散分,为我们的祖国
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下录制声音通过。
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;
声明方法: //自定义写一个Wav文件头过程
procedure CreateWav(channels: word;
resolution : word; rate : longint; fn : string);
实现方法:{*
channels: 1为单声道 2为立体声 -->(值:1 or 2)
resolution: 音质(8位 或者 16位) -->(值:8 or 16)
rate: 声音频率(广播11025赫兹 或者 正常22050赫兹 或者 精密44100赫兹) --> (值:11025 or 22050 or 44100)
}
procedure TMainForm.CreateWav(channels, resolution: word; rate: Integer;
fn: string);
var
wf : file of TWavHeader;
wh : TWavHeader;
begin
try
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); {关闭文件 }
except
//
end;
end;
方法调用: CreateWav(2, 16, 22050, 'C:\Test.wav');