Вверх ↑
Этот топик читают: Гость
Ответов: 60
Рейтинг: 3
#1: 2009-05-25 12:56:31 ЛС | профиль | цитата
Можно ли поток onData(Stream) элемента BASS_RecordStart преобразовать в 2х байтовые данные для работы с элементом BASS_StreamCreate?

карма: 0

0
Ответов: 8960
Рейтинг: 824
#2: 2009-05-25 13:17:36 ЛС | профиль | цитата
Rex, в BASS_StreamCreate есть свойство DataType в т. ч. и Stream, но если надо по семплам считать, то, наверное, так: code_13422.txt
Лучше считать в контейнере FTCG - не тормозит; я всегда применяю для этого IC.
карма: 19

0
файлы: 1code_13422.txt [1.8KB] [198]
Ответов: 60
Рейтинг: 3
#3: 2009-05-25 14:53:41 ЛС | профиль | цитата
Леонид, спасибо за ответ, но при подключении элемента BASS_ChannelPlay звука на выходе нет (источник звука микрофон).



Add(BASS_Version,10183901,483,147)
{
link(onCheckOk,12302345:doInit,[])
link(onCheckFailed,109118:doMessage,[(527,160)(527,202)])
}
Add(Message,11232751,483,196)
{
Message="Error BASS initialization"
Caption="Error"
Icon=1
}
Add(Message,109118,539,196)
{
Message="Incorrect version of BASS library "
Caption="Error"
Icon=1
}
Add(MainForm,16358250,350,133)
{
Caption="BASS record demo"
Point(Handle)
link(onCreate,4252681:doInit,[])
}
Add(BASS_Init,4252681,427,147)
{
link(onInit,10183901:doCheck,[])
link(onError,11232751:doMessage,[(471,160)(471,202)])
link(Handle,16358250:Handle,[(447,135)(401,135)(401,177)(356,177)])
}
Add(Button,13708268,392,259)
{
Left=10
Top=10
Caption="Пуск"
link(onClick,4455754:doEvent1,[])
}
Add(Button,14140950,392,308)
{
Left=10
Top=45
Caption="Стоп"
link(onClick,16159760:doEvent1,[])
}
Add(BASS_RecordCenter,12302345,539,147)
{
link(onError,11713735:doMessage,[(583,160)(583,202)])
}
Add(BASS_RecordStart,5066922,469,266)
{
Freq=44100
Mode=1
link(onData,7844804:doCopy,[])
}
Add(Message,11713735,595,196)
{
Message="InitRecord failed!"
Caption="Error"
Icon=1
}
Add(Hub,4455754,434,259)
{
link(onEvent1,5066922:doStart,[(463,265)(463,272)])
link(onEvent2,14476773:doCreate,[(490,272)(490,419)])
}
Add(Hub,16159760,434,308)
{
InCount=2
link(onEvent1,5066922:doStop,[(455,314)(455,279)])
link(onEvent2,14476773:doDestroy,[(490,321)(490,426)])
}
Add(EventFromData,4887779,518,364)
{
link(onEvent,15983612:doGet,[(560,370)(560,353)(506,353)(506,328)])
link(Data,15983612:Data,[])
}
Add(MemoryStream,7844804,518,273)
{
}
Add(DataToFile,15983612,518,315)
{
Type=1
link(onGet,4887779:doData,[(570,321)(570,359)(506,359)(506,370)])
link(Stream,7844804:Stream,[])
}
Add(BASS_StreamCreate,14476773,511,413)
{
Name="MainSound"
link(onCreate,3047460:doPlay,[])
link(Data,4887779:GetData,[(517,405)(524,405)])
}
Add(BASS_ChannelPlay,3047460,560,413)
{
Channel="MainSound"
}
И еще вопрос :как сделать то же самое используя свойство Stream в элементе BASS_StreamCreate .
карма: 0

0
Ответов: 8960
Рейтинг: 824
#4: 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
Ответов: 4641
Рейтинг: 334
#5: 2009-05-25 17:42:58 ЛС | профиль | цитата
Леонид писал(а):
Совершил ту же ошибку: копировал при английской раскладке

поправь реестр на 1251 и все. Думаю копировать будет нормально. Ключи не охото писать. Схема есть в публикаторе.
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 8960
Рейтинг: 824
#6: 2009-05-25 18:10:10 ЛС | профиль | цитата
Ravilr, версия Windows у меня чуть с глюком: при переключении Рус/Engl сразу не включается, чтобы запечатала надо мышкой щёлкнуть или на клавишу 2-3 раза поэтому я почти всегда знаю, какая раскладка включена , а что такое
Ravilr писал(а):
поправь реестр на 1251
понимаю, но смутно
карма: 19

0
Ответов: 4641
Рейтинг: 334
#7: 2009-05-25 18:23:20 ЛС | профиль | цитата
в реестре правится значение параметра в ветке
LOCAL_MACHINE - SYSTEMCurrentControlSetControlNlsCodePage

, собственно поменять надо от 1250 до 1255 вроде на на c_1251.nls
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 60
Рейтинг: 3
#8: 2009-05-25 22:38:09 ЛС | профиль | цитата
Леонид, начал разбираться с примером "Эхо", схема работала нормально, но потом, не могу понять почему, пропал звук.
карма: 0

0
Ответов: 3851
Рейтинг: 159
#9: 2009-05-25 22:42:16 ЛС | профиль | цитата
Rex, отвёрткой в ухе не ковырял?

Обычно либо вспоминают - после чего "это" случилось, либо сразу начинают всё сначала..
------------ Дoбавленo в 22.44:
5052
карма: 0
начавший
0
Ответов: 60
Рейтинг: 3
#10: 2009-05-26 12:01:11 ЛС | профиль | цитата
Андрей. писал(а):
отвёрткой в ухе не ковырял?
Это не может быть причиной, поскольку система дублирована .Причина не в схеме, а в моем раздолбайстве (приношу извинения Леониду)
------------ Дoбавленo в 13.49:
Леонид, не подскажите, каким образом подправить Script("Эхо"), чтобы не было затухания сигнала при его повторении (пробовал сам , не получилось).
карма: 0

0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)