View Single Post
Old 17th December 2013, 04:19   #1
ChenJianFeng
Junior Member
 
Join Date: Dec 2013
Posts: 2
How to use winamp plugin in java?

I used JNA to map the plugin functions and variables.

This is my plugin class:

code:
public interface dsp_stereo extends Library{
dsp_stereo INSTANCE = (dsp_stereo) Native.loadLibrary("dsp_stereo", dsp_stereo.class);
public winampDSPHeader winampDSPGetHeader2();
}



This is winampDSPHeader class:

code:
public class winampDSPHeader extends Structure{
public int version;
public String description;
public static interface getModuleFunc extends Callback{
winampDSPModule invoke(int i);
}
public getModuleFunc getModule;
@Override
protected List getFieldOrder() {
return Arrays.asList(new String[] { "version", "description", "getModule"});
}
}



This is winampDSPModule class:

code:
public class winampDSPModule extends Structure{
public String description;
public HWND hwndParent;
public HINSTANCE hDllInstance;
public static interface configFunc extends Callback{
void invoke(winampDSPModule this_mod);
}
public configFunc Config;
public static interface initFunc extends Callback{
int invoke(winampDSPModule this_mod);
}
public initFunc Init;
public static interface modifySamplesFunc extends Callback{
int invoke(winampDSPModule this_mod, short[] samples, int numsamples, int bps, int nch, int srate);
}
public modifySamplesFunc ModifySamples;
public static interface quitFunc extends Callback{
void invoke(winampDSPModule this_mod);
}
public quitFunc Quit;
public Pointer userData;

@Override
protected List getFieldOrder() {
return Arrays.asList(new String[] { "description", "hwndParent", "hDllInstance", "Config", "Init", "ModifySamples", "Quit", "userData"});
}
public winampDSPModule(){

}
}



This is my main class:

code:
public class Test{
public static void main(String[] args){
JFrame f = new JFrame();
f.setTitle("asd");
f.setVisible(true);
f.setSize(300, 400);

dsp_stereo lib = dsp_stereo.INSTANCE;
winampDSPHeader header = lib.winampDSPGetHeader2();
winampDSPModule module = header.getModule.invoke(0);
module.hwndParent = null;
module.hDllInstance = Kernel32.INSTANCE.GetModuleHandle("dsp_stereo");
module.Init.invoke(module);
}
}



The plugin appeared when i ran the code. But it is not responding when i clicked on it. Do i missed something on my code?
ChenJianFeng is offline   Reply With Quote