我試圖做濾波使用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;
其中wavedata [0]。數據[我],我從函數Stream.Read獲取它加載.wav文件的示例數據值。我不知道爲什麼我得到了錯誤,或者錯誤的含義,我一直在尋找大部分由零引起的錯誤,但是在我的代碼中沒有零的分割。所以也許我可以在這裏幫助一下在我的代碼中的錯誤意味着什麼?
編輯1:(我真的很新的德爾福,這個代碼是不是我的,我發現它的互聯網在我的理解下面的代碼是一個讀.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;
和私人聲明:
private
wavehdr:TWaveHeader;
功能:
FillChar(wavehdr, sizeof(wavehdr),0);
Stream.Read(wavehdr,sizeof(wavehdr));
我修改了一下的代碼以在讀取樣本數據處理空值:當表達式產生不適合在其中表達式求值的數據類型的範圍內的值時,發生
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;
如何是cA1,cD1和wavedata [0] .Data是否聲明? – 2013-04-24 05:46:31
cA1 cD1和wavedata都是雙倍數組。其中wavedata數組可能包含的值如:0,1.98E-04等(它是樣本.wav數據的值) – 2013-04-24 05:50:55
結果是大到你的float中保存試試看懂使用數學; procedure TForm6.Button1Click(Sender:TObject); var f:Double; begin f:= MaxDouble; f:= F * 2; Showmessage(FloatToStr(F)) end; Showmessage(FloatToStr(F)) end; – bummi 2013-04-24 05:51:49