Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.23;
Скачать: CL | DM;

Вниз

как подключить визуальные плагины от Winamp?   Найти похожие ветки 

 
ka1n   (2006-11-20 08:58) [0]

Можно ли подключить визуальные плагины, и направить вывод видео на свою форму?
Если можно, то как, плиз ссылку или толкните в нужную сторону


 
ka1n   (2006-11-23 14:12) [1]

ну скажите, че ни каких мыслей ((((
у меня тоже


 
Sapersky   (2006-11-23 16:15) [2]

1) Найти пример исходников визуального плагина (ссылку сейчас не дам, но их есть).
2) Посмотреть, какие там экспортируются функции (то, что плагин - это dll, надеюсь, в курсе?).
3) В своей программе загрузить dll - плагин и вызвать эти функции в соответствии с элементарной логикой (инициализация, update, завершение). В update подсунуть плагину похожие на звук (или хотя бы случайные) данные.


 
ka1n   (2006-11-24 13:40) [3]


> В update подсунуть плагину похожие на звук (или хотя бы
> случайные) данные.

ок...
я его хочу использовать вместе с самим винампом, он играет, а визулизация на моей форме....
ну принцеп ясен, пока попробую хотябы подключить...


 
Sapersky   (2006-11-24 15:05) [4]

Хм, а смысл? Хвастаться всем, что "вот я плагин написал"? :)
С плагином AVS сделать "вывод на форму" просто: включить overlay mode, выбрать там какой-нибудь редкий цвет, залить этим цветом свою форму - и будет тебе щастье :)


 
ka1n   (2006-11-27 09:34) [5]


> Хм, а смысл? Хвастаться всем, что "вот я плагин написал"?
>  :)

Смысл абсолютно другой....


> С плагином AVS сделать "вывод на форму" просто: включить
> overlay mode, выбрать там какой-нибудь редкий цвет, залить
> этим цветом свою форму - и будет тебе щастье :)

А вот это реальный совет большое спасибо )))


 
ka1n   (2006-12-14 15:52) [6]

Вот нашел пример......

{----------------------
Визуализационный плагин к 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.



Полскажите как хотябы вызвать "О программе"


 
Sapersky   (2006-12-14 19:40) [7]

Я уж всё написал в посте [2] пункт 3.
Почти угадал, за исключением того, что непосредственно из dll вызывается только winampVisGetHeader, а всё остальное через структуру, которую она возвращает.
Непонятно, как вызвать функцию из dll? Значит, нужно почитать что-нибудь на эту тему (конкретно про динамическую загрузку dll).


 
ka1n   (2006-12-15 07:44) [8]

Имеется это ввиду

//эта процедура вызывается при нажатии на кнопку "Конфигурация"
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-15 19:12) [9]

Точно так же.

LoadLibrary
GetProcAddress
winampVisGetHeader
getModule
config (init, render, quit... xотя, возможно, для больших плагинов вроде AVS потребуется сначала init, потом config).

Подробнее - сам :)


 
ka1n   (2006-12-18 07:52) [10]

Непонятен просто этот момент


> что непосредственно из dll вызывается только winampVisGetHeader,
>  а всё остальное через структуру, которую она возвращает.>

ну надо попробовать ....


 
Sapersky   (2006-12-18 13:51) [11]

Var Hdr :   PWinampVisHeader;
    Mod : PWinampVisModule;
<...>
Hdr := winampVisGetHeader; // вызов из DLL - предварительно адрес winampVisGetHeader нужно получить через GetProcAddress
Mod := Hdr.getModule(0); // "вызов через структуру" - адрес getModule должен выдать плагин
<...>


 
ka1n   (2006-12-18 13:53) [12]

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


 
ka1n   (2006-12-18 13:56) [13]


> Var Hdr :   PWinampVisHeader;
>     Mod : PWinampVisModule;

брбрбр

От куда взялись эти типы: PWinampVisHeader; PWinampVisModule;


 
ka1n   (2006-12-18 14:29) [14]

все больше запутываюся....
Большая просьба - если не трудно, просто приведите пример реально работающего кода, в котором из библиотеки vis_avs.dll вызывается, например окно с настройками и ВСЕ, тема будет закрыта!!!!


 
ka1n   (2006-12-18 14:29) [15]

все больше запутываюся....
Большая просьба - если не трудно, просто приведите пример реально работающего кода, в котором из библиотеки vis_avs.dll вызывается, например окно с настройками и ВСЕ, тема будет закрыта!!!!


 
Sapersky   (2006-12-18 15:50) [16]

От куда взялись эти типы:

Отсюда:
ka1n   (14.12.06 15:52) [6]

Кстати, оттуда же следует брать и тип winampVisGetHeader. Т.е. не просто procedure, а
Var winampVisGetHeader: function : PWinampVisHeader;cdecl;


 
SoulFlow ©   (2006-12-18 21:51) [17]

Привет всем!!!

Может не совсем в тему Ka1n, но у меня есть  Bassplayer v1.81 а
там в демо весии подключены плагины Winamp и есть её код.
Так что если интересно то могу скинуть на почту(непомню где я его скачал).

Ящик DarkFlow@Mail.ru.

И если чё нибудь получится дашь посмотреть код.

Please.



Страницы: 1 вся ветка

Текущий архив: 2007.09.23;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
15-1187852632
Glivera
2007-08-23 11:03
2007.09.23
Тормоза из-за сети.. подскажите..


15-1187947154
sample01
2007-08-24 13:19
2007.09.23
Explorer


1-1184240354
Layner
2007-07-12 15:39
2007.09.23
Как узнать свойства и методы объекта OLEVariant


1-1184325115
atruhin
2007-07-13 15:11
2007.09.23
Не работает Anchors с MDIChild формой


1-1183993705
Dr. Andrew
2007-07-09 19:08
2007.09.23
Во время показа hints мелькает фоном стандартная подсказка.