![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как подключить визуальные плагины от Winamp? [D7, WinXP]
ka1n © (2006-11-20 08:58:00)Можно ли подключить визуальные плагины, и направить вывод видео на свою форму?
Если можно, то как, плиз ссылку или толкните в нужную сторону
SoulFlow (2006-12-18 21:51:00) [1]Привет всем!!!
Может не совсем в тему Ka1n, но у меня есть Bassplayer v1.81 а
там в демо весии подключены плагины Winamp и есть её код.
Так что если интересно то могу скинуть на почту(непомню где я его скачал).
Ящик DarkFlow@Mail.ru.
И если чё нибудь получится дашь посмотреть код.
Please.
Sapersky (2006-12-18 15:50:00) [2]От куда взялись эти типы:
Отсюда:
ka1n (14.12.06 15:52) [6]
Кстати, оттуда же следует брать и тип winampVisGetHeader. Т.е. не просто procedure, а
Var winampVisGetHeader: function : PWinampVisHeader;cdecl;
ka1n (2006-12-18 14:29:00) [3]все больше запутываюся....
Большая просьба - если не трудно, просто приведите пример реально работающего кода, в котором из библиотеки vis_avs.dll вызывается, например окно с настройками и ВСЕ, тема будет закрыта!!!!
ka1n (2006-12-18 14:29:00) [4]все больше запутываюся....
Большая просьба - если не трудно, просто приведите пример реально работающего кода, в котором из библиотеки vis_avs.dll вызывается, например окно с настройками и ВСЕ, тема будет закрыта!!!!
ka1n (2006-12-18 13:56:00) [5]
> Var Hdr : PWinampVisHeader;
> Mod : PWinampVisModule;
брбрбр
От куда взялись эти типы: PWinampVisHeader; PWinampVisModule;
ka1n (2006-12-18 13:53:00) [6]
procedure TForm1.Button1Click(Sender: TObject);
var LibHandle: THandle;
render: procedure;
begin
LibHandle := LoadLibrary('С:\...\vis_avs.dll');
@render := GetProcAddress(LibHandle, 'winampVisGetHeader');
как дальше?
?
?
?
?
FreeLibrary(LibHandle); // Free Memory Allocated for the DLL
Sapersky (2006-12-18 13:51:00) [7]Var Hdr : PWinampVisHeader;
Mod : PWinampVisModule;
<...>
Hdr := winampVisGetHeader; // вызов из DLL - предварительно адрес winampVisGetHeader нужно получить через GetProcAddress
Mod := Hdr.getModule(0); // "вызов через структуру" - адрес getModule должен выдать плагин
<...>
ka1n (2006-12-18 07:52:00) [8]Непонятен просто этот момент
> что непосредственно из dll вызывается только winampVisGetHeader,
> а всё остальное через структуру, которую она возвращает.>
ну надо попробовать ....
Sapersky (2006-12-15 19:12:00) [9]Точно так же.
LoadLibrary
GetProcAddress
winampVisGetHeader
getModule
config (init, render, quit... xотя, возможно, для больших плагинов вроде AVS потребуется сначала init, потом config).
Подробнее - сам :)
ka1n (2006-12-15 07:44:00) [10]Имеется это ввиду
//эта процедура вызывается при нажатии на кнопку "Конфигурация"
procedure config( this_mod: PwinampVisModule );cdecl;
begin
MessageBox(this_mod.hwndParent, 'Автор Иван Ширко (FDC@tut.by)'+#13+' http://www.IvanFDC.narod.ru', 'Лампочки на клавиатуре', MB_OK)
end;
Sapersky (2006-12-14 19:40:00) [11]Я уж всё написал в посте [2] пункт 3.
Почти угадал, за исключением того, что непосредственно из dll вызывается только winampVisGetHeader, а всё остальное через структуру, которую она возвращает.
Непонятно, как вызвать функцию из dll? Значит, нужно почитать что-нибудь на эту тему (конкретно про динамическую загрузку dll).
ka1n (2006-12-14 15:52:00) [12]Вот нашел пример......
{----------------------
Визуализационный плагин к Winamp'у
"Лампочки на клавиатуре"
Автор Иван Ширко
www.IvanFDC.narod.ru
FDC@tut.by
----------------------}
library KeybLight;
uses Windows;
const
VIS_HDRVER = $002;
szAppName = 'SampleVisPlugin';
descr = 'Лампочки на клавиатуре'; //описание плагина
mod1_descr = 'Лампочки на клавиатуре';
type
//указатель на структуру плагина
PwinampVisModule = ^winampVisModule;
//определяем типы для процедур и функций структуры
waFunc = function( thismod: PwinampVisModule ): integer;cdecl;
waProc = procedure( thismod: PwinampVisModule );cdecl;
//структура плагина
winampVisModule = record
description: PChar;
hwndParent: HWND;
hDllInstance: HWND;
sRate: integer;
nCh: integer;
latencyMs: integer;
delayMs: integer;
spectrumNch: integer;
waveformNch: integer;
spectrumData: array[0..1, 0..575] of byte;
waveformData: array[0..1, 0..575] of byte;
Config: waProc;
Init: waFunc;
Render: waFunc;
Quit: waProc;
userData: pointer;
end;
//заголовок плагина
PwinampVisHeader = ^winampVisHeader;
winampVisHeader = record
version: integer;
description: PChar;
getModule: function( which: integer ): PwinampVisModule;cdecl;
end;
var
hdr: winampVisHeader;
mod1: winampVisModule;
//эта процедура управляет состоянием лампочек на клавиатуре
Procedure SetLock(n, state:byte);
var
KS: TKeyboardState;
c: byte;
begin
case n of
0: c:=VK_NUMLOCK;
1: c:=VK_CAPITAL;
2: c:=VK_SCROLL;
end;
GetKeyboardState(KS);
KS[c]:=state;
SetKeyboardstate(KS);
end;
function getModule( which: integer ): PwinampVisModule;cdecl;
begin
case which of
0: result:=pointer( @mod1 );
else result:=nil
end;
end;
//передача заголовка плагина Winamp'у
function winampVisGetHeader: PwinampVisHeader;cdecl;
begin
result:=@hdr;
end;
//эта процедура вызывается при нажатии на кнопку "Конфигурация"
procedure config( this_mod: PwinampVisModule );cdecl;
begin
MessageBox(this_mod.hwndParent, 'Автор Иван Ширко (FDC@tut.by)'+#13+' http://www.IvanFDC.narod.ru', 'Лампочки на клавиатуре', MB_OK)
end;
//инициализация плагина, если всё нормально, то должны вернуть 0
function init( this_mod: PwinampVisModule ): integer;cdecl;
begin
result:=0;
end;
//именно эта функция заставляет лампочки мигать
function render( this_mod: PwinampVisModule ): integer;cdecl;
var
i:byte;
begin
for i:=0 to 2 do
if this_mod.spectrumData[0,i]>40 then SetLock(i, 1)
else SetLock(i, 0);
result:=0;
end;
//наши действия при закрытии плагина
procedure quit( this_mod: PwinampVisModule );cdecl;
begin
end;
//экспортируемая функция
exports
winampVisGetHeader;
begin
//задаём начальные значения для структуры плагина
hdr.version:=VIS_HDRVER;
hdr.description:=PChar(descr);
hdr.getModule:=getModule;
mod1.description:=PChar(mod1_descr);
mod1.hwndParent:=0;
mod1.hDllInstance:=0;
mod1.sRate:=0;
mod1.nCh:=0;
mod1.latencyMs:=25;
mod1.delayMs:=25;
mod1.spectrumNch:=2;
mod1.waveformNch:=0;
mod1.Config:=@config;
mod1.Init:=@init;
mod1.Render:=@render;
mod1.Quit:=@quit;
end.
Полскажите как хотябы вызвать "О программе"
ka1n (2006-11-27 09:34:00) [13]
> Хм, а смысл? Хвастаться всем, что "вот я плагин написал"?
> :)
Смысл абсолютно другой....
> С плагином AVS сделать "вывод на форму" просто: включить
> overlay mode, выбрать там какой-нибудь редкий цвет, залить
> этим цветом свою форму - и будет тебе щастье :)
А вот это реальный совет большое спасибо )))
Sapersky (2006-11-24 15:05:00) [14]Хм, а смысл? Хвастаться всем, что "вот я плагин написал"? :)
С плагином AVS сделать "вывод на форму" просто: включить overlay mode, выбрать там какой-нибудь редкий цвет, залить этим цветом свою форму - и будет тебе щастье :)
ka1n (2006-11-24 13:40:00) [15]
> В update подсунуть плагину похожие на звук (или хотя бы
> случайные) данные.
ок...
я его хочу использовать вместе с самим винампом, он играет, а визулизация на моей форме....
ну принцеп ясен, пока попробую хотябы подключить...
Sapersky (2006-11-23 16:15:00) [16]1) Найти пример исходников визуального плагина (ссылку сейчас не дам, но их есть).
2) Посмотреть, какие там экспортируются функции (то, что плагин - это dll, надеюсь, в курсе?).
3) В своей программе загрузить dll - плагин и вызвать эти функции в соответствии с элементарной логикой (инициализация, update, завершение). В update подсунуть плагину похожие на звук (или хотя бы случайные) данные.
ka1n (2006-11-23 14:12:00) [17]ну скажите, че ни каких мыслей ((((
у меня тоже