Rex, Леонид писал(а): я всегда применяю для этого IC , вот набросок "Эхо"
Add(ChildPanelEx,15569021,364,182) { @Hint=#39:Запуск BASS 2.4 и выбор источника звука| link(onStart,2111790:doStart,[]) link(onSound,2111790:doRecData,[]) link(Handle,16358250:Handle,[(370,175)(358,175)(358,224)(321,224)]) } BEGIN_SDK Add(EditMultiEx,6822816,21,21) { WorkCount=#21:doStart=Начать работу|32:doRefresh=Отрисовать гистограмму| EventCount=#21:onStart=Начать работу|22:onSound=Звуковой поток|28:onPic=Отрисовать гистограмму| DataCount=#46:Handle=Идентификатор основного окна приложения|32:PicHandle=Идентификатор картинки| Width=468 Height=179 VOffset=35 HOffset=42 link(doStart,15175716:doEvent1,[]) } Add(Panel,3900892,175,42) { Width=398 Height=209 Visible=1 Caption="Выбрать источник звука" Alignment=2 Point(doVisible) } Add(BASS_Version,10183901,126,91) { link(onCheckOk,12302345:doInit,[]) link(onCheckFailed,109118:doMessage,[(166,104)(166,146)]) } Add(Message,11232751,126,140) { Message="Error BASS initialization" Caption="Error" Icon=1 } Add(Message,109118,175,140) { Message="Incorrect version of BASS library " Caption="Error" Icon=1 } Add(BASS_Init,4252681,77,91) { link(onInit,10183901:doCheck,[]) link(onError,11232751:doMessage,[(117,104)(117,146)]) link(Handle,6822816:Handle,[(97,56)(69,56)]) } Add(BASS_RecordCenter,12302345,175,91) { link(onInit,15862958:doEnumInputs,[]) link(onError,11713735:doMessage,[(215,104)(215,146)]) } Add(Message,11713735,224,140) { Message="InitRecord failed!" Caption="Error" Icon=1 } Add(BASS_RecordInput,15862958,224,91) { link(onEnumInputs,4718633:doAdd,[]) } Add(BASS_InputControl,9998094,322,98) { Volume=1 State=1 link(onSetInput,9127027:doEvent1,[]) link(Volume,10061734:Var2,[]) link(State,10061734:Var3,[(342,79)]) } Add(Memory,4613851,329,35) { Default=Integer(1) } Add(ComboBox,4718633,273,91) { Left=5 Top=5 Width=220 Height=21 link(onClick,9998094:doSetInput,[]) } Add(GetDataEx,10061734,322,70) { link(Data,4613851:Value,[]) } Add(Hub,9127027,364,98) { OutCount=3 link(onEvent1,14252892:doWork1,[(386,104)(386,31)(114,31)(114,55)]) link(onEvent2,6822816:onStart,[(392,111)(392,62)]) link(onEvent3,12537631:doStart,[]) } Add(ChanelToIndex,14252892,126,49) { link(onIndex,3900892:doVisible,[]) } Add(Hub,15175716,49,56) { link(onEvent1,14252892:doWork2,[]) link(onEvent2,4252681:doInit,[(66,69)(66,97)]) } Add(BASS_RecordStart,12537631,399,112) { Freq=44100 Channels=2 Mode=1 Name="EarOfComp" link(onData,6822816:onSound,[(460,125)(460,69)]) } END_SDK Add(MainForm,16358250,315,168) { Caption="Эхо" Point(Handle) Point(Width) Point(onResize) link(onCreate,15569021:doStart,[]) } Add(InlineCode,2111790,448,182) { WorkPoints=#34:doStart=Расчёт начальных установок|35:doRecData=Потоковые звуковые данные|40:doSound=Считать следующее значение звука| EventPoints=#52:onSignalMax=Максимальное значение на входе (0-32768)|34:onColMax=Цвет индикатора максимума|32:onSound=Следующее значение звука| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|47: DataSound:Array[0..1,0..50000] of smallint;|16: k,m:integer;|11: l:byte;|9: public|25: _data_Data:THI_Event;|69: onSignalMax:THI_Event; //Выход контроля за максимумом на входе|64: onColMax:THI_Event; //Выход цвета индикатора максимума|44: onSound:THI_Event; //Выход сигнала|0:|51: procedure doStart(var _Data:TData; Index:word);|53: procedure doRecData(var _Data:TData; Index:word);|51: procedure doSound(var _Data:TData; Index:word);|4:end;|0:|14:implementation|0:|30:procedure THiAsmClass.doStart;|18: var i,j:integer; |6: begin|90: for i:=0 to 1 do for j:=0 to 50000 do DataSound[i,j]:=0; //Очищаем на всякий случай :-)|11: k:=25000;|7: l:=0;|8: m:=0; |5: end;|1: |32:procedure THiAsmClass.doRecData;|17: var St:PStream; |19: len:cardinal; |17: i,j:integer;|33: SoundAbs,_SoundMax:smallint;|6: begin|18: _SoundMax:=0;|92: St := ReadStream(_data,_data_Data,nil); //Читаем звуковой поток ~0,1 сек.|84: if St = nil then Exit; //Выход, если нет данных.|94: len := St.Size div 4; //Количество дискретных значений в |92: for i:=0 to len-1 do //потоке (2 канала по 2 байта). |12: begin|17: k:=k-1; |31: if k<0 then k:=25000;|102: St.Read(DataSound[0,k],2); //Читаем по 2 байта в _Sound (Левый канал).|39: SoundAbs:=abs(DataSound[0,k]);|46: DataSound[0,k+25000]:=DataSound[0,k];|90: if _SoundMax<SoundAbs then _SoundMax:=SoundAbs;//Запоминаем максимальный сигнал.|117: St.Read(SoundAbs,2); //Читаем по 2 байта в SoundAbs (Правый канал - не обрабатываем).|79://---------------------Выход звука можно обработать здесь----------------------|87://--------------------------Добавим эхо 0,5 сек 50%---------------------------- |76: DataSound[1,k]:=round(DataSound[0,k]*0.5+DataSound[1,k+22050]*0.5);|46: DataSound[1,k+25000]:=DataSound[1,k];|11: |11: end;|97: if _SoundMax>31000 then //Определяем цвет индткатора максимума:|98: _hi_OnEvent(onColMax, 255) //красный, если сигнал на входе большой;|9: else|11: begin|30: if _SoundMax>21900 then|100: _hi_OnEvent(onColMax, 65535) //жёлтый, если сигнал на входе в пределах;|103: else _hi_OnEvent(onColMax, 32768); //тёмнозелёный, если сигнал на входе маловат.|10: end;|91: _hi_onEvent(onSignalMax, _SoundMax); //Выводим максимум на индикацию.|5: end;|0:|30:procedure THiAsmClass.doSound;|6: begin|10: l:=l+1; |21: if l>=2 then l:=0;|78: if l=0 then //Здесь можно выбрать канал (правый-левый 0 или 1)|10: begin |13: m:=m-1; |27: if m<0 then m:=25000;|42: _hi_onEvent(onSound, DataSound[1,m]);|7: end|33: else _hi_onEvent(onSound, 0); |5: end;|1: |4:end.| link(onSignalMax,9362388:doPosition,[]) link(onColMax,9362388:doColor,[]) link(onSound,4887779:doData,[(489,202)(489,224)(431,224)(431,237)]) } Add(ProgressBar,9362388,511,182) { Left=5 Top=30 Width=221 Height=10 Color=32768 Max=32768 ProgressColor=65280 Point(doColor) } Add(Button,10009872,259,189) { Left=318 Top=220 Caption="Выход" link(onClick,16358250:doClose,[]) } Add(BASS_StreamCreate,9915037,448,273) { Channels=2 Name="MainSound" link(onCreate,3047460:doPlay,[]) link(Data,4887779:GetData,[]) } Add(EventFromData,4887779,448,231) { link(onEvent,2111790:doSound,[(498,237)(498,219)(436,219)(436,202)]) } Add(Button,9959055,399,273) { Left=5 Top=220 Caption="Пуск" link(onClick,9915037:doCreate,[]) } Add(BASS_ChannelPlay,3047460,490,273) { Channel="MainSound" }
и звук есть :D
Совершил ту же ошибку: копировал при английской раскладке
|