Waw*_*hun 1 delphi floating-point delphi-7
我正在尝试使用HAAR公式过滤.wav样本数据值,但得到错误"浮点溢出"
编辑:添加更多代码
numsamples := round(wavehdr.SampleRate);
SetLength(wavedata[0].Data, numsamples);
Stream.Read(wavedata[0].Data[0], numsamples);
SetLength(cA1, numsamples);
SetLength(cD1, numsamples);
for i:=1 to numsamples-1 do begin
cA1[i]:=(wavedata[0].Data[(i*2)-1]*0.7071) + (wavedata[0].Data[(i*2)]*0.7071);
cD1[i]:=(wavedata[0].Data[(i*2)-1]*0.7071) + (wavedata[0].Data[(i*2)]*-0.7071);
end;
Run Code Online (Sandbox Code Playgroud)
其中wavedata [0] .Data [i],我从函数Stream.Read得到它来加载.wav文件的样本数据值.我不知道为什么我得到错误或错误意味着什么,我一直在搜索错误,主要是由于零的分裂造成的,但我的代码中没有零除零.所以也许我可以在这里帮助我的代码中的错误含义是什么?
编辑1 :(我真的很新的delphi,这个代码不是我的,我发现它是互联网.在我的理解下,以下代码是一个读取.wav文件样本数据值)
type
TWaveHeader = packed record
Marker_RIFF: array [0..3] of char;
ChunkSize: cardinal;
Marker_WAVE: array [0..3] of char;
Marker_fmt: array [0..3] of char;
SubChunkSize: cardinal;
FormatTag: word;
{ nChannels : 1 mono, 2 stereo }
NumChannels: word;
SampleRate: longint;
BytesPerSecond: longint;
BytesPerSample: word;
BitsPerSample: word;
Marker_data: array [0..3] of char;
DataBytes: longint;
end;
TChannel = record
Data : array of double;
end;
Run Code Online (Sandbox Code Playgroud)
一个私人声明:
private
wavehdr:TWaveHeader;
Run Code Online (Sandbox Code Playgroud)
功能 :
FillChar(wavehdr, sizeof(wavehdr),0);
Stream.Read(wavehdr,sizeof(wavehdr));
Run Code Online (Sandbox Code Playgroud)
我修改了一些代码来处理读取样本数据时的空值:
if(IsNan(wavedata[0].Data[(i*2)-1])) then begin
wavedata[0].Data[(i*2)-1]:=0;
end
else if(IsNan(wavedata[0].Data[(i*2)])) then begin
wavedata[0].Data[(i*2)]:=0;
end;
Run Code Online (Sandbox Code Playgroud)
为i:=0......
(wavedata[0].Data[(i*2)-1]
你真的有数组元素Data[-1]吗?
PS调试时设置范围检查编译器选项.
编辑:我看到一些新代码,所以让我们继续第2步:
SetLength(wavedata[0].Data, **numsamples**);
for i:=1 to **numsamples**-1
wavedata[0].Data[(**i*2)**]
Run Code Online (Sandbox Code Playgroud)
我们要彻底检查每一行代码吗?
| 归档时间: |
|
| 查看次数: |
3169 次 |
| 最近记录: |