Вверх ↑
Этот топик читают: Гость
Ответов: 1429
Рейтинг: 50
#16: 2010-09-03 17:47:07 ЛС | профиль | цитата
Помогите понять фундаментальный принцип работы с этим:
Есть API функция: function BASS_MIDI_InGetDeviceInfo(device: DWORD; var info: BASS_MIDI_DEVICEINFO): BOOL; stdcall; external bassmididll;
ее задача - выдать мне название девайса по его номеру.

В скобках она от меня хочет получить:
1. device: DWORD - номер устройства. (тут все понятно)
2. var info: BASS_MIDI_DEVICEINFO
Со вторым я немогу понять что ей давать?

BASS_MIDI_DEVICEINFO - в pas файле, это вроди тип для возврата имени устройства:

BASS_MIDI_DEVICEINFO = record
name: PAnsiChar; // description

Зачем второе тут стоит, если я хочу это от нее получить, можете растолковать?

карма: 0

0
Ответов: 3349
Рейтинг: 233
#17: 2010-09-03 17:57:01 ЛС | профиль | цитата
Это тип.
var   dvcinfo   :BASS_MIDI_DEVICEINFO;
n :PAnsiChar;
begin
dvcinfo.name:=PAnsiChar('Туто текст для записи');
BASS_MIDI_InGetDeviceInfo(device, dvcinfo);
n:=dvcinfo.name;//а это записывает значение name в переменную n
end;
карма: 1

0
Ответов: 1429
Рейтинг: 50
#18: 2010-09-03 18:09:51 ЛС | профиль | цитата
Ivann, твой код я, вроде, понял.

Но, зачем функция BASS_MIDI_InGetDeviceInfo(device, dvcinfo), от меня, хочет два параметра, вместо отного - не понял.
или var info: BASS_MIDI_DEVICEINFO - это не ввод параметра в функцию, а какой-то знак ей (мол, куда выводить, или иное шаманство)?
------------ Дoбавленo в 18.09:
Я себе представлял так:
имяфункции(входнойпараметр, входнойпараметр, входнойпараметр); типвывода
карма: 0

0
Ответов: 3349
Рейтинг: 233
#19: 2010-09-03 18:10:58 ЛС | профиль | цитата
login, очевидно, что данная функция, записывает результат в переменную info.
карма: 1

0
Ответов: 1429
Рейтинг: 50
#20: 2010-09-03 18:35:17 ЛС | профиль | цитата
ОТлично, определенность есть, это хорошо.
Кажется начало доходить, "BASS_MIDI_DEVICEINFO" это просто "слово", которое надо зачем-то бросить в дллку..
------------ Дoбавленo в 18.35:
В итоге не работает, или я не понял.
Вот такой код я написал в элемент:

#pas
var
h:integer;
info:string;
begin

h := 0;
info := BASS_MIDI_DEVICEINFO;

if BASS_MIDI_InGetDeviceInfo(h,info) then
_hi_onEvent(_event_on_InGetDeviceInfo,info)
else _hi_onEvent(_event_on_error);

end;
(чуть исправил не так было)

и получил красным: "Undeclared identifier: 'BASS_MIDI_DEVICEINFO'"


карма: 0

0
Ответов: 8887
Рейтинг: 823
#21: 2010-09-03 18:39:24 ЛС | профиль | цитата
login, сначала надо получить идентификатор h, а уже потом запрашивать информацию
карма: 19

1
Голосовали:login
Ответов: 3349
Рейтинг: 233
#22: 2010-09-03 18:42:25 ЛС | профиль | цитата
login, сначала обьяви переменную типа BASS_MIDI_DEVICEINFO например с именем test и потом, читай, пиши её.

карма: 1

0
Ответов: 1429
Рейтинг: 50
#23: 2010-09-03 18:43:28 ЛС | профиль | цитата
Леонид, девайсы в басс библиотеках обычно идут от нуля, а я знаю какое устройство у меня там.
Проэкт даже не компилируется. Запроса еще нет как бы.
карма: 0

0
Ответов: 3349
Рейтинг: 233
#24: 2010-09-03 18:45:29 ЛС | профиль | цитата
var   h       :integer;
info :BASS_MIDI_DEVICEINFO;
begin
h := 0;
info.name :=PAnsiChar('Test string) ;
if BASS_MIDI_InGetDeviceInfo(h,info) then _hi_onEvent(_event_on_InGetDeviceInfo,info)
else _hi_onEvent(_event_on_error);
end;
------------ Дoбавленo в 18.45:
В объявление ведь сказано что переменная должна быть типа BASS_MIDI_DEVICEINFO.
карма: 1

0
Ответов: 1429
Рейтинг: 50
#25: 2010-09-03 18:46:28 ЛС | профиль | цитата
Но когда я так делаю то в строке info:BASS_MIDI_DEVICEINFO я получаю при компиляции: Error: Undeclared identifier: 'BASS_MIDI_DEVICEINFO'

карма: 0

0
Ответов: 3349
Рейтинг: 233
#26: 2010-09-03 18:48:10 ЛС | профиль | цитата
Зайди в руму, а то форум загрезнять не охота
карма: 1

0
Ответов: 1429
Рейтинг: 50
#27: 2010-09-03 18:49:14 ЛС | профиль | цитата
То-есть оно не видит такой тип, и не можут его присвоить.
------------ Дoбавленo в 18.49:
Ivann, А что такое рума? как зайти?
карма: 0

0
Ответов: 3349
Рейтинг: 233
#28: 2010-09-03 18:54:28 ЛС | профиль | цитата
http://hiasm.com/forum.html?q=3&t=53088
------------ Дoбавленo в 18.54:
Вот это у тебя работает?
Add(MainForm,2953706,21,105)
{
link(onCreate,16219169:doTest,[])
}
Add(InlineCode,16219169,70,119)
{
WorkPoints=#6:doTest|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|30:uses bassmidi,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|44: procedure doTest(var dt:TData;Ind:Word);|5: end;|0:|14:implementation|0:|29:procedure THiAsmClass.doTest;|27:var s:BASS_MIDI_DEVICEINFO;|5:begin|76: if BASS_MIDI_InGetGeviceInfo(0,s) then _debug(s.name) else _debug('Error');|4:end;|0:|4:end.|
}


карма: 1

0
Ответов: 1429
Рейтинг: 50
#29: 2010-09-03 19:09:12 ЛС | профиль | цитата
Ivann, мне все растолковал в руме. Все заработало! Тема закрыта.
Всем спасибо за помощ!
карма: 0

0
Ответов: 1429
Рейтинг: 50
#30: 2010-09-16 08:02:50 ЛС | профиль | цитата
Я закончил этот компонент, все работает, но!
Как только на миди-вход подается хоть одна нота, приложение сразу слетает.
(если быть точным то даже просто с подключенным, к миди-входу, инструментом, нельзя нажать "Midi_in_Start" прога слетает, с отключенным шнуром она работает)


Add(MainForm,2953706,21,105)
{
Width=622
Height=499
link(onCreate,8790190:doInit,[])
}
Add(InlineCode,13469217,350,238)
{
@Hint=#7:MIDI IN|15:Список проблем:|67:1.Если была инициализация с ошибкой, то lock всеравно будет закрыт.|
WorkPoints=#28:do_BASS_MIDI_InGetGeviceInfo|19:do_BASS_MIDI_InInit|19:do_BASS_MIDI_InFree|20:do_BASS_MIDI_InStart|19:do_BASS_MIDI_InStop|
EventPoints=#13:on_DeviceInfo|9:on_InInit|9:on_InFree|8:on_Start|7:on_Stop|
DataPoints=#6:Device|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|38:uses bassmidi,kol,Share,Debug,Windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|9: public|17: lock:integer;|19: midiin:integer;|28: on_DeviceInfo:THI_Event;|33: Device:THI_Event;//точка Data|24: on_InInit:THI_Event;|24: on_InFree:THI_Event;|23: on_Start:THI_Event;|22: on_Stop:THI_Event;|85: procedure do_BASS_MIDI_InGetGeviceInfo(var Data:TData; index:word); // DeviceInfo|72: procedure do_BASS_MIDI_InInit(var Data:TData; index:word); // InInit|72: procedure do_BASS_MIDI_InFree(var Data:TData; index:word); // InFree|72: procedure do_BASS_MIDI_InStart(var Data:TData; index:word); // Start|70: procedure do_BASS_MIDI_InStop(var Data:TData; index:word); // Stop|5: end;|0:|14:implementation|0:|13:// GeviceInfo|52:procedure THiAsmClass.do_BASS_MIDI_InGetGeviceInfo; |4:var |24:s1:BASS_MIDI_DEVICEINFO;|10:i:integer;|5:begin|40:while BASS_MIDI_InGetGeviceInfo(i,s1) do|10: begin|43: _hi_OnEvent(on_DeviceInfo,s1.name);|19: i:=i+1;|8: end|4:end;|9:// InInit|42:procedure THiAsmClass.do_BASS_MIDI_InInit;|3:var|16:proc:MIDIINPROC;|12:dev:integer;|5:begin|17:if lock <> 1 then|10: begin|55: dev:=ReadInteger(Data,Device); //верхняя точка |45: midiin:=BASS_MIDI_InInit(dev,proc,0);|17: lock:=1;|38: _hi_OnEvent(on_InInit,midiin);|8: end|4:end;|0:|9:// InFree|42:procedure THiAsmClass.do_BASS_MIDI_InFree;|11:var a:Bool;|5:begin|28:a:=BASS_MIDI_InFree(midiin);|8:lock:=0;|30:_hi_OnEvent(on_InFree,ord(a));|0:|4:end;|0:|8:// Start|43:procedure THiAsmClass.do_BASS_MIDI_InStart;|4:var |8:a1:Bool;|5:begin|30:a1:=BASS_MIDI_InStart(midiin);|30:_hi_OnEvent(on_Start,ord(a1));|4:end;|0:|7:// Stop|42:procedure THiAsmClass.do_BASS_MIDI_InStop;|4:var |8:a1:Bool;|5:begin|29:a1:=BASS_MIDI_InStop(midiin);|29:_hi_OnEvent(on_Stop,ord(a1));|4:end;|0:|4:end.|
link(on_DeviceInfo,8879177:doWork1,[(431,244)])
link(on_InInit,6254033:doWork2,[])
link(on_InFree,6254033:doWork3,[(417,258)])
link(on_Start,4736038:doWork3,[(445,265)])
link(on_Stop,45069:doWork3,[(438,272)])
link(Device,1440245:Value,[])
}
Add(Button,4380749,231,224)
{
Left=220
Top=35
Width=70
Height=25
Caption="Inint"
link(onClick,13469217:do_BASS_MIDI_InInit,[(299,230)(299,251)])
}
Add(StyleXP,7101425,21,154)
{
}
Add(Memo,2234497,455,245)
{
Left=5
Top=5
Width=205
Height=425
ScrollBars=2
}
Add(Button,9989288,231,273)
{
Left=220
Top=125
Width=70
Height=25
Caption="Free"
link(onClick,13469217:do_BASS_MIDI_InFree,[(306,279)(306,258)])
}
Add(Button,3171330,231,322)
{
Left=220
Top=65
Width=70
Height=25
Caption="Start"
link(onClick,13469217:do_BASS_MIDI_InStart,[(314,328)(314,265)])
}
Add(HubEx,4736038,441,245)
{
link(onEvent,2234497:doAdd,[])
}
Add(HubEx,6254033,413,245)
{
link(onEvent,8879177:doWork2,[])
}
Add(Button,3144429,231,175)
{
Left=220
Top=10
Width=70
Caption="Device"
link(onClick,13469217:do_BASS_MIDI_InGetGeviceInfo,[(312,181)(312,244)])
}
Add(HubEx,8879177,427,245)
{
link(onEvent,45069:doWork2,[])
}
Add(Button,10368205,231,371)
{
Left=220
Top=95
Width=70
Height=25
Caption="Stop"
link(onClick,13469217:do_BASS_MIDI_InStop,[(324,377)(324,272)])
}
Add(HubEx,45069,434,245)
{
link(onEvent,4736038:doWork2,[])
}
Add(Memory,1440245,350,175)
{
Default=Integer(0)
}
Add(Memo,6149815,882,231)
{
Left=320
Top=10
Width=205
Height=310
ScrollBars=2
}
Add(Button,1179580,679,231)
{
Left=535
Top=15
Width=70
Caption="Device"
link(onClick,16198628:do_BASS_MIDI_StreamCreate,[])
}
Add(InlineCode,16198628,777,231)
{
@Hint=#16:BASS_MIDI_Stream|
WorkPoints=#25:do_BASS_MIDI_StreamCreate|21:do_BASS_MIDI_FontInit|27:do_BASS_MIDI_StreamGetEvent|
EventPoints=#15:on_StreamCreate|11:on_FontInit|17:on_StreamGetEvent|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|38:uses bassmidi,kol,Share,Debug,Windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|17: HSTREAM:DWORD;|25: EVENT:BASS_MIDI_EVENT;|3: |37: on_FontInit:THI_Event; // FontInit|3: |29: on_StreamCreate:THI_Event;|31: on_StreamGetEvent:THI_Event;|84: procedure do_BASS_MIDI_StreamCreate(var Data:TData; index:word); // Stream Create|75: procedure do_BASS_MIDI_FontInit(var Data:TData; index:word); // FontInit|81: procedure do_BASS_MIDI_StreamGetEvent(var Data:TData; index:word); // GetEvent|5: end;|0:|14:implementation|0:|16:// Stream Create|48:procedure THiAsmClass.do_BASS_MIDI_StreamCreate;|5:begin|57:HSTREAM:=BASS_MIDI_StreamCreate(16,BASS_MIDI_NOFX,44100);|37:_hi_OnEvent(on_StreamCreate,HSTREAM);|4:end;|0:|11:// FontInit|44:procedure THiAsmClass.do_BASS_MIDI_FontInit;|15:var HSSF:DWORD;|5:begin|42:HSSF:= BASS_MIDI_FontInit('CT2MGM.SF2',0);|30:_hi_OnEvent(on_FontInit,HSSF);|4:end;|0:|0:|11:// GetEvent|50:procedure THiAsmClass.do_BASS_MIDI_StreamGetEvent;|5:begin|52:BASS_MIDI_StreamGetEvent(HSTREAM,0,MIDI_EVENT_NOTE);|43:_hi_OnEvent(on_StreamGetEvent,EVENT.event);|4:end;|0:|0:|0:|4:end.|
link(on_StreamCreate,10679813:doWork2,[])
link(on_FontInit,14821932:doWork3,[(844,244)])
link(on_StreamGetEvent,10679813:doWork3,[(823,251)])
}
Add(BASS_Init,8790190,70,119)
{
}
Add(HubEx,10679813,819,231)
{
link(onEvent,14821932:doWork2,[])
}
Add(Button,13956013,683,326)
{
Left=535
Top=65
Width=70
Caption="GetEvent"
link(onClick,16198628:do_BASS_MIDI_StreamGetEvent,[(742,332)(742,251)])
}
Add(Button,4229867,679,280)
{
Left=535
Top=40
Width=70
Caption="SFont"
link(onClick,16198628:do_BASS_MIDI_FontInit,[(725,286)(725,244)])
}
Add(HubEx,14821932,840,231)
{
link(onEvent,6149815:doAdd,[])
}



Их пример synth.exe из архива прекрасно работает с теми же DLL-лками.
http://hiasm.com/forum_serv.php?q=56&id=1759





карма: 0

0
файлы: 1code_20622.txt [6KB] [357]
30
Сообщение
...
Прикрепленные файлы
(файлы не залиты)