Вверх ↑
Ответов: 8961
Рейтинг: 824
#1: 2010-03-22 20:27:36 ЛС | профиль | цитата
deman, да, один семпл с "0", сейчас посмотрю, можно-ли его убрать.
------------ Дoбавленo в 20.50:
[b]deman[/b], вот IC - поставте вместо прежнего, ступенька должна исчезнуть

Add(InlineCode,3185247,413,168)
{
@Hint=#22:Расшифровка кода Морзе|
WorkPoints=#25:doStart=Стартовое событие|34:doWork=Строка на передачу из 0 и 1|31:doFreq0=Установка частоты для 0|31:doFreq1=Установка частоты для 1|42:doSound=Вычислить следующее значение звука|
EventPoints=#39:onSound=Выход следующего значения звука|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Windows,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|43: SinCos:Array[0..1, 0..511] of smallint;|25: _Freq0,_Freq1:double;|38: _Len0,_Len1,_LenText,_Tik:integer;|17: _Text:string;|40: _Sound0,_Sound1:boolean;//true,false|9: public|25: _data_Data:THI_Event;|22: onSound:THI_Event;|4: |51: procedure doStart(var _Data:TData; Index:word);|50: procedure doWork(var _Data:TData; Index:word);|51: procedure doFreq0(var _Data:TData; Index:word);|51: procedure doFreq1(var _Data:TData; Index:word);|51: procedure doSound(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doStart;|13:var i:double;|14: j:integer;|5:begin|17: _Sound0:=false;|17: _Sound1:=false;|26: _Freq0:=2*pi*1800/44100;|26: _Freq1:=2*pi*1200/44100;|7: j:=0;|9: Repeat|22: i:=_Freq0*(j+0.5);|37: SinCos[0,j]:=round(sin(i)*32700);|11: j:=j+1;|16: Until i>2*pi;|13: _Len0:=j-1;|7: j:=0;|9: Repeat|22: i:=_Freq1*(j+0.5);|37: SinCos[1,j]:=round(sin(i)*32700);|11: j:=j+1;|16: Until i>2*pi;|13: _Len1:=j-1;|13: _Tik:=0; |4:end;|0:|29:procedure THiAsmClass.doWork;|14:var i:integer;|5:begin|31: _Text:=_Text+ToString(_Data);|26: _LenText:=Length(_Text);|4:end;|0:|30:procedure THiAsmClass.doFreq0;|13:var i:double;|14: j:integer;|5:begin|38: _Freq0:=2*pi*ToInteger(_Data)/44100;|38: if _Freq0<0.015 then _Freq0:=0.015;|36: if _Freq0>2.28 then _Freq0:=2.28;|7: j:=0;|9: Repeat|22: i:=_Freq0*(j+0.5);|37: SinCos[0,j]:=round(sin(i)*32700);|11: j:=j+1;|16: Until i>2*pi;|14: _Len0:=j-1; |4:end;|0:|30:procedure THiAsmClass.doFreq1;|13:var i:double;|14: j:integer;|5:begin|38: _Freq1:=2*pi*ToInteger(_Data)/44100;|38: if _Freq1<0.015 then _Freq1:=0.015;|38: if _Freq1>2.28 then _Freq1:=2.28; |7: j:=0;|9: Repeat|22: i:=_Freq1*(j+0.5);|37: SinCos[1,j]:=round(sin(i)*32700);|11: j:=j+1;|16: Until i>2*pi;|13: _Len1:=j-1;|4:end;|0:|30:procedure THiAsmClass.doSound;|14:var i:integer;|5:begin|15: _Tik:=_Tik+1;|18: if _Sound0 then|9: begin|25: if _Tik<=_Len0 then|44: _hi_onEvent(onSound,SinCos[0,_Tik]) |10: else|12: begin|16: _Tik:=0;|23: _Sound0:=false;|26: if _Text<>' then|23: begin |46: if str2int(copy(_Text,1,1))=0 then|18: begin|28: _Sound0:=true;|22: _Tik:=0;|50: _hi_onEvent(onSound,SinCos[0,_Tik]);|16: end|16: else|18: begin|28: _Sound1:=true;|22: _Tik:=0;|63: _hi_onEvent(onSound,SinCos[1,_Tik]); |17: end;|40: delete(_Text,1,1); |13: end|37: else _hi_onEvent(onSound,0);|15: end; |7: end|7: else|9: begin|21: if _Sound1 then|12: begin|28: if _Tik<=_Len1 then|57: _hi_onEvent(onSound,SinCos[1,_Tik]) |13: else|15: begin|19: _Tik:=0;|26: _Sound1:=false;|26: if _Text<>' then|26: begin |46: if str2int(copy(_Text,1,1))=0 then|18: begin|28: _Sound0:=true;|22: _Tik:=0;|50: _hi_onEvent(onSound,SinCos[0,_Tik]);|16: end|16: else|18: begin|28: _Sound1:=true;|22: _Tik:=0;|63: _hi_onEvent(onSound,SinCos[1,_Tik]); |17: end;|40: delete(_Text,1,1); |13: end|37: else _hi_onEvent(onSound,0);|19: end; |10: end|10: else|12: begin|26: if _Text<>' then|15: begin|46: if str2int(copy(_Text,1,1))=0 then|18: begin|28: _Sound0:=true;|22: _Tik:=0;|50: _hi_onEvent(onSound,SinCos[0,_Tik]);|16: end|16: else|18: begin|28: _Sound1:=true;|22: _Tik:=0;|63: _hi_onEvent(onSound,SinCos[1,_Tik]); |17: end;|40: delete(_Text,1,1); |13: end|38: else _hi_onEvent(onSound,0); |15: end; |8: end;|4:end;|0:|4:end.|
}

карма: 19

0