public virtual void close() { lock ( mSyncRoot ) { #if TEST sout.println("vstidrv#close"); #endif if (ui != null && !ui.IsDisposed) { ui.Close(); } try { sout.println("vstidrv#close; (aEffect==null)=" + (aEffect == null)); if (aEffect != null) { aEffect.Dispatch(AEffectOpcodes.effClose, 0, 0, IntPtr.Zero, 0.0f); } sout.println("vstidrv#close; dllHandle=" + dllHandle); if (dllHandle != IntPtr.Zero) { win32.FreeLibrary(dllHandle); } aEffect = null; dllHandle = IntPtr.Zero; mainDelegate = null; audioMaster = null; } catch (Exception ex) { serr.println("vstidrv#close; ex=" + ex); } releaseBuffer(); } }
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); }