B
bbtwo33
Unregistered / Unconfirmed
GUEST, unregistred user!
function TForm1.GetWavLength(FileName : String): integer;
var Head : Array[0..43] of Char;
ReadFile : file;
NumRead, length : integer;
begin
length := 0;
AssignFile(ReadFile,FileName);
Reset(ReadFile,1);
BlockRead(ReadFile,Head,44,NumRead);
CopyMemory(@length,Head + 40,4);
CloseFile(ReadFile);
Result := length;
end;
这个函数就是想得到WAVE文件中声音数据的长度所以读前面44字节的文件头中的最后四个字节为声音文件的长度,然后将长度返回
执行到最后Result的时候有内存错误
改成下面这样就好了!
Reset(ReadFile,1);
seek(ReadFile,40);
blockread(ReadFile,datalength,4);
可是后来
if VoidOutInit = false then
begin
ListBox1.Items.Add('设备打开错误!');
exit;
end;
str := EdtPhoneNum.Text;
if str <> '' then
begin
NumCount := length(str);
SetLength(PhoneNum,NumCount);
SetLength(Temp,NumCount);
SetLength(LenList,NumCount);
for i := 0 to (NumCount - 1)do
begin
PhoneNum := str[i+1];
FileName := str[i+1] + '.wav';
m := GetWavLength(FileName);
LenList := m;
BufLen := BufLen + m;
GetMem(Temp,m + 1);
ZeroMemory(Temp,m + 1);
j := m;
AssignFile(ReadFile,FileName);
Reset(ReadFile,1);
Seek(ReadFile,44);
BlockRead(ReadFile,Temp,j,NumRead);
CloseFile(ReadFile);
end;
end;
*GetMem(PlayBuffer,BufLen);
ZeroMemory(PlayBuffer,BufLen);
for i := 0 to (NumCount-1)do
begin
CopyMemory(PlayBuffer + x,Temp,LenList);
x := x + LenList;
end;
这个程序就是想把WAVE文件里的声音数据拿出来
其中执行到*的地方出现内存读取错误,我发现m的值拿不到了!
这两个问题是不是有什么联系啊!帮我解决上面问题的大哥没有解释出错原因
我想知道是不是文件读取时的错误,哪个高手给解释解释啊!
对不起大家,实在是,没有分了!请各位包涵啊!
var Head : Array[0..43] of Char;
ReadFile : file;
NumRead, length : integer;
begin
length := 0;
AssignFile(ReadFile,FileName);
Reset(ReadFile,1);
BlockRead(ReadFile,Head,44,NumRead);
CopyMemory(@length,Head + 40,4);
CloseFile(ReadFile);
Result := length;
end;
这个函数就是想得到WAVE文件中声音数据的长度所以读前面44字节的文件头中的最后四个字节为声音文件的长度,然后将长度返回
执行到最后Result的时候有内存错误
改成下面这样就好了!
Reset(ReadFile,1);
seek(ReadFile,40);
blockread(ReadFile,datalength,4);
可是后来
if VoidOutInit = false then
begin
ListBox1.Items.Add('设备打开错误!');
exit;
end;
str := EdtPhoneNum.Text;
if str <> '' then
begin
NumCount := length(str);
SetLength(PhoneNum,NumCount);
SetLength(Temp,NumCount);
SetLength(LenList,NumCount);
for i := 0 to (NumCount - 1)do
begin
PhoneNum := str[i+1];
FileName := str[i+1] + '.wav';
m := GetWavLength(FileName);
LenList := m;
BufLen := BufLen + m;
GetMem(Temp,m + 1);
ZeroMemory(Temp,m + 1);
j := m;
AssignFile(ReadFile,FileName);
Reset(ReadFile,1);
Seek(ReadFile,44);
BlockRead(ReadFile,Temp,j,NumRead);
CloseFile(ReadFile);
end;
end;
*GetMem(PlayBuffer,BufLen);
ZeroMemory(PlayBuffer,BufLen);
for i := 0 to (NumCount-1)do
begin
CopyMemory(PlayBuffer + x,Temp,LenList);
x := x + LenList;
end;
这个程序就是想把WAVE文件里的声音数据拿出来
其中执行到*的地方出现内存读取错误,我发现m的值拿不到了!
这两个问题是不是有什么联系啊!帮我解决上面问题的大哥没有解释出错原因
我想知道是不是文件读取时的错误,哪个高手给解释解释啊!
对不起大家,实在是,没有分了!请各位包涵啊!