звук
Add(MainForm,2953706,252,42)
{
link(onCreate,398796:doEvent1,[])
}
Add(Img_GetPoint,12636372,392,140)
{
X=1
Y=1
link(onGetPixel,2312092:doEvent1,[])
link(Bitmap,342279:Var3,[(398,110)])
}
Add(Hub,2312092,441,140)
{
OutCount=4
link(onEvent1,16104365:doGetRGB,[])
}
Add(ToRGB,16104365,476,140)
{
link(onResult,2111790:doStart,[(515,146)(515,153)(466,153)(466,202)])
}
Add(Random,16393333,294,140)
{
Max=16777215
link(onRandom,3578194:doDraw,[])
}
Add(Timer,4949509,245,140)
{
Interval=500
link(onTimer,16393333:doRandom,[])
}
Add(Bitmap,3659496,357,49)
{
HWidth=3
HHeight=3
Point(doCreate)
}
Add(Img_Point,3578194,343,140)
{
X=1
Y=1
Point(Color)
link(onDraw,12636372:doGetPixel,[])
link(Bitmap,342279:Var1,[(349,110)])
}
Add(GetDataEx,342279,357,105)
{
link(Data,3659496:Bitmap,[])
}
Add(BASS_Version,10183901,469,42)
{
link(onCheckFailed,109118:doMessage,[(508,55)(508,62)(459,62)(459,90)])
}
Add(Message,11232751,413,84)
{
Message="Error BASS initialization"
Caption="Error"
Icon=1
}
Add(Message,109118,469,84)
{
Message="Incorrect version of BASS library "
Caption="Error"
Icon=1
}
Add(BASS_Init,4252681,413,42)
{
link(onInit,10183901:doCheck,[])
link(onError,11232751:doMessage,[(452,55)(452,62)(403,62)(403,90)])
}
Add(Hub,398796,308,56)
{
link(onEvent1,4252681:doInit,[(333,62)(333,48)])
link(onEvent2,3659496:doCreate,[])
}
Add(BASS_StreamCreate,14476773,476,301)
{
Name="MainSound"
link(onCreate,3047460:doPlay,[])
link(onError,93305:doMessage,[(520,314)(520,356)])
link(Data,2407731:GetData,[])
}
Add(Message,93305,532,350)
{
}
Add(BASS_ChannelPlay,3047460,532,301)
{
Channel="MainSound"
}
Add(EventFromData,2407731,476,252)
{
link(onEvent,2111790:doNextSound,[(522,258)(522,237)(466,237)(466,209)])
}
Add(InlineCode,2111790,476,196)
{
WorkPoints=#34:doStart=Расчёт начальных установок|42:doNextSound=Выдать следущее значение звука|
EventPoints=#34:onMax=Вывод максимального значения|34:onColMax=Цвет индикатора максимума|50:onNextSound=Выдаёт в поток следущее значение звука|7:onError|
DataPoints=#21:Red=Уровень красного;|23:Green=Уровень зелёного;|20:Blue=Уровень синего;|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|29: AmplR,AmplG,AmplB:double;|14: Res:smallint;|29: FreqR,FreqG,FreqB:double;|16: Tik:integer;|9: public|25: _data_Data:THI_Event;|18: Red:THI_Event;|20: Green:THI_Event;|19: Blue:THI_Event;|18: Vol:THI_Event;|63: onMax:THI_Event; //Вывод максимального значения|60: onColMax:THI_Event; //Цвет индикатора максимума|73: onNextSound:THI_Event; //Выдаёт в поток следущее значение звука|23: onError:THI_Event; |0:|86: procedure doStart(var _Data:TData; Index:word); //Установка начальных значений|88: procedure doNextSound(var _Data:TData; Index:word); //Выдать следущее значение звука|6: end;|4: |14:implementation|6: const|23: R = 5.01063529409626;|29: dig2ln = 0.086643397569993;|31: dig2pi = 0.00014247585730566;|9: K = 42;|13: E = 0.9999;|0:|30:procedure THiAsmClass.doStart;|22: var AR,AG,AB:integer;|5: |6: begin|9: Tik:=0;|33: AR:=ReadInteger(_Data,Red,127);|35: AG:=ReadInteger(_Data,Green,127);|34: AB:=ReadInteger(_Data,Blue,127);|14: AmplR:=AR*K;|14: AmplG:=AG*K;|14: AmplB:=AB*K;|41: FreqR:=dig2pi*exp(R+dig2ln*(AR mod 8));|45: FreqG:=dig2pi*exp(R+dig2ln*(8+(AG mod 8)));|46: FreqB:=dig2pi*exp(R+dig2ln*(16+(AB mod 8)));|31: _hi_OnEvent(onError, FreqB); |5: end;|1: |0:|34:procedure THiAsmClass.doNextSound;|1: |6: begin|13: Tik:=Tik+1;|84: Res:= round(AmplR*(sin(Tik*FreqR))+AmplG*(sin(Tik*FreqG))+AmplB*(sin(Tik*FreqB)));|17: AmplR:=AmplR*E;|17: AmplG:=AmplG*E;|17: AmplB:=AmplB*E;|35: _hi_OnEvent(onNextSound, Res); |6: end; |3: |4:end.|
link(onNextSound,2407731:doData,[(515,216)(515,244)(466,244)(466,258)])
link(Red,16104365:R,[])
link(Green,16104365:G,[])
link(Blue,16104365:B,[])
}
Add(Button,4973713,413,301)
{
Left=5
Top=5
link(onClick,14476773:doCreate,[])
}
Add(Button,16720679,413,343)
{
Left=5
Top=40
link(onClick,14476773:doDestroy,[(452,349)(452,314)])
}