Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1188227789
неискушенный
2007-08-27 19:16
2007.09.23
что это за объект - TAtom?


3-1174479646
DelphiLexx
2007-03-21 15:20
2007.09.23
Объект по работе с cross-таблицей


2-1188474394
DmitriyG.
2007-08-30 15:46
2007.09.23
Translate Error


15-1187954311
artalina
2007-08-24 15:18
2007.09.23
Ищу удаленного рарзрабочика Delphi


3-1179599806
ARTEM779
2007-05-19 22:36
2007.09.23
проблема с дочерными окнами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский