コード例 #1
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();
            }
        }
コード例 #2
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;
        }