コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: vstidrv.cs プロジェクト: kixtarte/cadencii
        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();
            }
        }
コード例 #4
0
ファイル: vstidrv.cs プロジェクト: kixtarte/cadencii
        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;
        }