Вверх ↑
Ответов: 8961
Рейтинг: 824
#1: 2009-05-25 17:29:54 ЛС | профиль | цитата
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 Совершил ту же ошибку: копировал при английской раскладке
карма: 19

1
Голосовали:Rex