关于录音的问题(急,高分求!)? delphi的TMediaPlayer控件StartRecording方法可以实现录音,但是该控件只能将录好的音存为wav文件。我想不通过磁盘文件直接将录好的音存入内存流中?谁有办法?另外如何直接播放一个内存流中的wav,而不是先存为临时文件,再加载?只要能解决问题,分给多少都没问题! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为什么要用流那,那样数据的取出存入将会慢,你可以存取。wav的路径,试验一下这个方法,我个人觉得是不错的。你的想法可以实现,但是效果不一定好 给你点代码 你看看unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, MPlayer, ExtCtrls;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; Panel1: TPanel; Panel2: TPanel; btstop: TButton; btstart: TButton; Label1: TLabel; Timer1: TTimer;procedure CreateWav(channels : word; resolution : word; rate : longint; fn : string);//自定义写一个Wav文件头过程procedure BtStartClick(Sender: TObject);procedure BtStopClick(Sender: TObject); procedure Timer1Timer(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;str11:string;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);varstrrr:string;yea,mon,day:word;h,m,s,ws:word;beginMediaPlayer1.Enabled:=false;MediaPlayer1.Enabled:=true;trydecodedate(date,yea,mon,day);decodetime(time,h,m,s,ws);strrr:=ExtractFilePath(Application.ExeName)+inttostr(yea)+inttostr(mon)+inttostr(day)+inttostr(h)+inttostr(m)+inttostr(s)+'.wav';//formatdatetime('yyyy-mm-dd',date)+' '+formatdatetime('hh:mm:ss',time)+//在程序当前目录下创建一个Wav文件Temp.wavCreateWav(1, 8, 11025, strrr); //如果参数设置成2,16,44100 存储的文件大panel1.Caption:='正在录制语音';timer1.Enabled:=true;str11:=formatdatetime('hh:mm:ss',time);MediaPlayer1.DeviceType := dtAutoSelect;MediaPlayer1.FileName :=strrr;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);begintrypanel1.Caption:='停止录音状态';timer1.Enabled:=false;MediaPlayer1.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;procedure TForm1.Timer1Timer(Sender: TObject);beginlabel1.Caption:=formatdatetime('hh:mm:ss',time-strtotime(str11));end;end. delphi表与表之间的转换 ERR MSG: p_InsertMerch():External exception C000001D 关于"热键"问题 小女子急需解决"如何得到某些特殊文件夹路径",还请各位高手帮忙! 如何通过异或获取数据 这样的图象手工分割 请教高手 不知道大家都用过什么组件?能不能相互交流一下。并且把连接留下来。 怎么用Delphi将数据备份到指定位置的ACCESS数据库? 为什么我用串口调试助手有发送没有收到? 一个从数据库里读取数据显示的问题。 ---form2引用form3,form3又引用form2,这是delphi所不允许的---???您如何看
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, MPlayer, ExtCtrls;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;
Panel1: TPanel;
Panel2: TPanel;
btstop: TButton;
btstart: TButton;
Label1: TLabel;
Timer1: TTimer;
procedure CreateWav(channels : word; resolution : word; rate : longint; fn : string);//自定义写一个Wav文件头过程
procedure BtStartClick(Sender: TObject);
procedure BtStopClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
str11:string;
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);
var
strrr:string;
yea,mon,day:word;
h,m,s,ws:word;
begin
MediaPlayer1.Enabled:=false;
MediaPlayer1.Enabled:=true;
try
decodedate(date,yea,mon,day);
decodetime(time,h,m,s,ws);
strrr:=ExtractFilePath(Application.ExeName)+inttostr(yea)+inttostr(mon)+inttostr(day)+inttostr(h)+inttostr(m)+inttostr(s)+'.wav';//formatdatetime('yyyy-mm-dd',date)+' '+formatdatetime('hh:mm:ss',time)+
//在程序当前目录下创建一个Wav文件Temp.wav
CreateWav(1, 8, 11025, strrr); //如果参数设置成2,16,44100 存储的文件大
panel1.Caption:='正在录制语音';
timer1.Enabled:=true;
str11:=formatdatetime('hh:mm:ss',time);
MediaPlayer1.DeviceType := dtAutoSelect;
MediaPlayer1.FileName :=strrr;
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
panel1.Caption:='停止录音状态';
timer1.Enabled:=false;
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.Timer1Timer(Sender: TObject);
begin
label1.Caption:=formatdatetime('hh:mm:ss',time-strtotime(str11));
end;end.