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); }
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; }