| // 注意: // 任何呆在前台的插件窗口都应该将按键传送给其父(WinAMP 的)窗口,以确保 // 用户仍旧可以控制 WinAMP(除非用户按了 ESC 键或者插件所指定的键)。 // 在存储配置时,配置数据应当统一存放在 // 请将这个插件例程看作一个框架。 typedef struct winampVisModule { char *description; // 模块描述(出现在插件选择列表框下面得下拉列表框中) HWND hwndParent; // 父窗口------------- (由主调应用填充) HINSTANCE hDllInstance; // 此 DLL 的实例句柄 - (由主调应用填充) int sRate; // 采样速率 ---------- (由主调应用填充) int nCh; // 声道数 ------------ (由主调应用填充) int latencyMs; // 从调用 RenderFrame 到真正绘制的潜伏时间(毫秒) // (主调应用在获取数据的时候会查看这个值) int delayMs; // 每两次调用之间的间隔时间(毫秒) // 数据依照各自的 Nch(声道数) 条目被填充 int spectrumNch; int waveformNch; unsigned char spectrumData[2][576]; // 频谱数据 unsigned char waveformData[2][576]; // 波形数据 void (*Config)(struct winampVisModule *this_mod); // 模块配置函数 int (*Init)(struct winampVisModule *this_mod); // 初始化函数(创建窗口等等)。成功返回0 int (*Render)(struct winampVisModule *this_mod); // “表演”函数。成功返回0,如返回1表示插件应该终止 void (*Quit)(struct winampVisModule *this_mod); // 模块退出函数。完成之后调用 void *userData; // 用户数据 (可选) } winampVisModule; typedef struct { int version; // VID_HDRVER (当前模块的版本) char *description; // 插件的描述(出现在选择插件对话框的插件列表框中) winampVisModule* (*getModule)(int); // 用来获取模块结构 } winampVisHeader; // 定义导出标识 typedef winampVisHeader* (*winampVisGetHeaderType)(); // 当前模块的版本 (0x101 == 1.01) #define VIS_HDRVER 0x101 |