Я пытаюсь сделать фильтрацию .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] .data [ i], я получаю его из функции Stream.Read, чтобы загрузить пример данных. WAV-файла. Я не знаю, почему я получил ошибку или что означает ошибка, и я искал ошибку, в основном вызванную divizion на ноль, но в моем коде нет divizion на ноль. Так что, может быть, я могу помочь здесь, что означает ошибка в моем коде?
EDIT 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;
how являются cA1, cD1 и wavedata [0]. Объявлены данные? –
cA1 cD1 и wavedata были все массивом double. который может содержать значение, например: 0, 1.98E-04 и т. д. (это значение выборки .wav-данных). –
результат - большой, чтобы его можно было хранить в вашем поплавке, чтобы понять, использует Math; процедура TForm6.Button1Click (отправитель: TObject); var f: Double; начало f: = MaxDouble; f: = F * 2; Showmessage (FloatToStr (F)) end; – bummi