Add(InlineCode,10505315,623,322) { WorkPoints=#36:doStart=Установка начальных значений|26:doFreq1=Частота сигнала Гц|18:doVol1=Громкость %|26:doFreq2=Частота сигнала Гц|18:doVol2=Громкость %|131:doSSB=Переключение частот в подавляемую полосу (0 -- обе пропускаются; 1 или 2 -- одна из частот подавляется; 3 -- обе подавляются)|42:doSempl=Вычислить следующее значение звука| EventPoints=#39:onSempl=Вывод следующего значения звука|7:onError| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|38: i,_SSB1,_SSB2,_Vol1,_Vol2:integer;|26: _Freq1,_Freq2:double; |9: public|25: _data_Data:THI_Event;|22: onSempl:THI_Event;|22: onError:THI_Event;|0:|51: procedure doStart(var _Data:TData; Index:word);|51: procedure doFreq1(var _Data:TData; Index:word);|50: procedure doVol1(var _Data:TData; Index:word);|51: procedure doFreq2(var _Data:TData; Index:word);|50: procedure doVol2(var _Data:TData; Index:word);|49: procedure doSSB(var _Data:TData; Index:word);|51: procedure doSempl(var _Data:TData; Index:word);|5: end;|0:|24:const koef = PI / 44100;|0:|14:implementation|0:|30:procedure THiAsmClass.doStart;|6: begin|11: _SSB1:=1;|12: _SSB2:=-1;|9: i:=0; |5: end;|1: |30:procedure THiAsmClass.doFreq1;|6: begin|32: _Freq1:=toInteger(_Data)*koef;|5: end;|0:|29:procedure THiAsmClass.doVol1;|6: begin|26: _Vol1:=toInteger(_Data);|5: end;|0:|30:procedure THiAsmClass.doFreq2;|6: begin|32: _Freq2:=toInteger(_Data)*koef;|5: end;|0:|29:procedure THiAsmClass.doVol2;|6: begin|26: _Vol2:=toInteger(_Data);|5: end;|0:|28:procedure THiAsmClass.doSSB;|15: var j:integer;|6: begin|22: j:=toInteger(_Data);|12: case j of|12: 0: begin|17: _SSB1:=1;|17: _SSB2:=1;|9: end;|12: 1: begin|17: _SSB1:=1;|22: _SSB2:=-1; |9: end;|12: 2: begin|18: _SSB1:=-1;|21: _SSB2:=1; |9: end;|12: 3: begin|18: _SSB1:=-1;|22: _SSB2:=-1; |12: end; |7: end;|5: end;|0:|30:procedure THiAsmClass.doSempl;|15: var j:integer;|17: Res:integer;|6: begin|17: if Odd(i) then|71: Res:=round(_Vol1*cos(i*_Freq1)*_SSB1 + _Vol2*cos(i*_Freq2)*_SSB2)|11: else|60: Res:=round(_Vol1*sin(i*_Freq1) + _Vol2*sin(i*_Freq2));|28: _hi_onEvent(onSempl, Res);|9: Inc(i);|9: end; |1: |4:end.| }