Форум: "Media";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];
Внизкак подключить визуальные плагины от 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 вся ветка
Форум: "Media";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.044 c