Створення плагінів до winamp

Windows весь свій робочий час (в проміжках між зависаннями) займається тим, що розсилає і приймає повідомлення. Наприклад, змінив користувач дозвіл екрана, Windows тут же повідомляє цю новину всім вікнам (вибачте за тавтологію), мовляв, пора б і перемалював. Зрозуміло, кожна програма може реагувати на будь-яке повідомлення по-своєму. Багато додатків визначають для себе деякі специфічні команди, які часто бувають просто необхідні. Візьмемо, наприклад, Microsoft Word. У нього є головне зовнішнє вікно, всередині якого розташовуються дочірні вікна, в яких відкриваються документи. Припустимо, користувач запустив Word і редагує який-небудь документ. І раптом він десь в "Провіднику" побачив ще один файл, який йому терміново потрібно редагувати в тому ж Word. Юзер два рази клацає по файлу, і знову запускається Word. Word-копія перевіряє, єдиний він і неповторний, або вже є його запущений побратим. Якщо є, то він посилає якесь повідомлення оригіналу і благополучно закривається. Word-оригінал ловить це повідомлення і з нього дізнається, що потрібно відкрити такий-то файл, і відкриває його, а користувач навіть і не помітив, що Word запускався вдруге. Winamp підтримує ряд нестандартних повідомлень. Завдяки цим повідомленням існує величезна кількість плагінів до нього і програм, які вміють управляти Winamp'ом.

Щоб послати Winamp'у якесь повідомлення, потрібно перш за все визначити ідентифікатор його вікна. Робиться це за допомогою WinApi-функції:

(Тут і далі використовується синтаксис Object Pascal);

lpClassName - назва класу шуканого вікна;

lpWindowName - заголовок шуканого вікна.

Для посилки повідомлення використовується ще одна WinApi-функція:

hWnd - ідентифікатор вікна, якому надсилається повідомлення;

Msg - посилається повідомлення;

wParam - перший параметр повідомлення;

lParam - другий параметр повідомлення.

Winamp підтримує два основних типи повідомлення (параметр Msg):

  • WM_COMMAND: служить тільки для подачі певних команд Winamp'у (Play, Stop, Next, Close і т.д.);
  • WM_USER: використовується не тільки для виконання дій, але і для визначення різної інформації (версія, поточна композиція, кількість композицій і т.д.).

У таблиці 1 наведені основні константи для першого параметра повідомлення WM_COMMAND.

Для їх використання запишіть наступну функцію:

WinampUser (1, 105); - повертає довжину поточної композиції в секундах.

Управляти Winamp'ом ми вже навчилися, це вміння стане в нагоді для написання плагінів до нього.

Модулі до Winamp'у бувають п'яти видів:

  1. Input - плагіни для програвання різних форматів;
  2. Output - для запису музики в різних форматах;
  3. General Purpose - плагіни загального призначення, в них найбільш часто використовуються повідомлення, які ми розглянули вище;
  4. DSP / Effect - для обробки звуку;
  5. Visualization - плагіни, які роблять що-небудь в такт музиці.

На сайті www.winamp.com можна скачати шаблони всіх типів плагінів. Для прикладу розглянемо маленький Візуалізаційні плагін, який змусить блимати лампочки Num Lock, Caps Lock і Scroll Lock в такт музиці. Для цього скористаємося відповідним шаблоном (vis_minisdk). У ньому є функція Render, яка через заданий проміжок часу отримує від Winamp'a інформацію про поточні рівні частот програється музики. Залишається тільки написати обробник цих даних:

Весь вихідний код і готовий плагін можна знайти на сторінці www.IvanFDC.narod.ru/download.html. Хочу зазначити, що даний плагін управляє тільки станом лампочок, а самі клавіші не чіпає. Тому при використанні плагіна можна набирати текст без жодних проблем.

Як бачимо, всю роботу по обробці звуку Winamp бере на себе, тому створювати плагіни до цього найпопулярнішого плеєру може навіть людина, вельми далекий від музики.

Версія для друку

Схожі статті