关于wav录音错误的问题 (20分)

  • 主题发起人 13668908226
  • 开始时间
1

13668908226

Unregistered / Unconfirmed
GUEST, unregistred user!
请问用Delphi的Tmediaplay录音,在98下有时会出现录不到音的情况,
比如0(文件头都没写成)或44字节(只写了文件头)?

谢谢,请指点!
写头文件方法如下:
unit RecordWave;

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;

Function CreateWave(channels : word;
resolution : word;
rate : longint;
fn : string):boolean //自定义写一个Wav文件头过程

implementation
function CreateWave( channels : word;
{ 1(单声)或者2(立体声) }
resolution : word;
{ 8或者16,代表8位或16位声音 }
rate : longint;
{ 声音频率,如11025,22050, 44100}
fn : string { 对应的文件名称 } ):boolean
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;
try
assignfile(wf,fn);
{打开对应文件 }
rewrite(wf);
{移动指针到文件头}
write(wf,wh);
{写进文件头 }
closefile(wf);
{关闭文件 }
result:=true
except
result:=false
closefile(wf);
end

end;

end.
 

Similar threads

I
回复
0
查看
659
import
I
I
回复
0
查看
760
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
417
import
I
顶部