public virtual bool open(int block_size, int sample_rate) { dllHandle = win32.LoadLibraryExW(path, IntPtr.Zero, win32.LOAD_WITH_ALTERED_SEARCH_PATH); if (dllHandle == IntPtr.Zero) { serr.println("vstidrv#open; dllHandle is null"); return(false); } mainProcPointer = win32.GetProcAddress(dllHandle, "main"); mainDelegate = (PVSTMAIN)Marshal.GetDelegateForFunctionPointer(mainProcPointer, typeof(PVSTMAIN)); if (mainDelegate == null) { serr.println("vstidrv#open; mainDelegate is null"); return(false); } audioMaster = new audioMasterCallback(AudioMaster); if (audioMaster == null) { serr.println("vstidrv#open; audioMaster is null"); return(false); } aEffectPointer = IntPtr.Zero; try { aEffectPointer = mainDelegate(audioMaster); } catch (Exception ex) { serr.println("vstidrv#open; ex=" + ex); return(false); } if (aEffectPointer == IntPtr.Zero) { serr.println("vstidrv#open; aEffectPointer is null"); return(false); } blockSize = block_size; sampleRate = sample_rate; aEffect = new AEffectWrapper(); aEffect.aeffect = (AEffect)Marshal.PtrToStructure(aEffectPointer, typeof(AEffect)); aEffect.Dispatch(AEffectOpcodes.effOpen, 0, 0, IntPtr.Zero, 0); int ret = aEffect.Dispatch(AEffectOpcodes.effSetSampleRate, 0, 0, IntPtr.Zero, (float)sampleRate); #if DEBUG sout.println("vstidrv#open; dll_path=" + path + "; ret for effSetSampleRate=" + ret); #endif aEffect.Dispatch(AEffectOpcodes.effSetBlockSize, 0, blockSize, IntPtr.Zero, 0); // デフォルトのパラメータ値を取得 int num = aEffect.aeffect.numParams; paramDefaults = new float[num]; for (int i = 0; i < num; i++) { paramDefaults[i] = aEffect.GetParameter(i); } return(true); }
public virtual float getParameter(int index) { float ret = 0.0f; try { ret = aEffect.GetParameter(index); } catch (Exception ex) { serr.println("vstidrv#getParameter; ex=" + ex); } return(ret); }