Example #1
0
        private bool setupChannel(int Frequency, BASSASIOFormat Format)
        {
            proc = new ASIOPROC(AsioCallback);

            BassAsio.BASS_ASIO_Stop();

            if (!BassAsio.BASS_ASIO_ChannelReset(false,
                                                 -1,
                                                 BASSASIOReset.BASS_ASIO_RESET_PAUSE | BASSASIOReset.BASS_ASIO_RESET_JOIN))
            {
                return(false);
            }

            if (!BassAsio.BASS_ASIO_ChannelEnable(false, 0, proc, IntPtr.Zero))
            {
                return(false);
            }

            if (!BassAsio.BASS_ASIO_ChannelJoin(false, 1, 0))
            {
                return(false);
            }

            if (!BassAsio.BASS_ASIO_ChannelSetFormat(false, 0, Format))
            {
                return(false);
            }

            BassAsio.BASS_ASIO_SetRate((double)Frequency);

            if (!BassAsio.BASS_ASIO_ChannelSetRate(false, 0, (double)Frequency))
            {
                return(false);
            }

            return(BassAsio.BASS_ASIO_Start(0));
        }
        private bool EnableAndJoin(bool input, int channel, int numchans, ASIOPROC proc, BASSASIOFormat format)
        {
            bool flag = true;

            if (BassAsio.BASS_ASIO_ChannelIsActive(input, channel) == BASSASIOActive.BASS_ASIO_ACTIVE_DISABLED)
            {
                flag &= BassAsio.BASS_ASIO_ChannelEnable(input, channel, proc, IntPtr.Zero);
                for (int i = 1; i < numchans; i++)
                {
                    BassAsio.BASS_ASIO_ChannelJoin(input, channel + i, channel);
                }
            }
            else
            {
                flag &= BassAsio.BASS_ASIO_ChannelEnable(input, channel, proc, IntPtr.Zero);
            }
            flag &= BassAsio.BASS_ASIO_ChannelSetFormat(input, channel, format);
            return(flag & BassAsio.BASS_ASIO_ChannelSetRate(input, channel, this._samplerate));
        }
        public BassAsioHandler(bool input, int asioDevice, int asioChannel, int asioNumChans, BASSASIOFormat asioFormat, double asioSamplerate)
        {
            this._input    = input;
            this._device   = asioDevice;
            this._channel  = asioChannel;
            this._numchans = asioNumChans;
            this._format   = asioFormat;
            BassAsio.BASS_ASIO_Init(asioDevice, BassAsioHandler.UseDedicatedThreads ? BASSASIOInit.BASS_ASIO_THREAD : BASSASIOInit.BASS_ASIO_DEFAULT);
            BassAsio.BASS_ASIO_SetDevice(asioDevice);
            if (asioSamplerate <= 0.0)
            {
                this._samplerate = BassAsio.BASS_ASIO_GetRate();
            }
            else
            {
                BassAsio.BASS_ASIO_SetRate(asioSamplerate);
                this._samplerate = BassAsio.BASS_ASIO_GetRate();
            }
            if (this._input)
            {
                this._internalAsioProc = new ASIOPROC(this.AsioInputCallback);
                this.UseInput          = true;
            }
            else
            {
                this._internalAsioProc = new ASIOPROC(this.AsioOutputCallback);
            }
            bool           flag           = BassAsio.BASS_ASIO_IsStarted();
            BASSASIOActive bassasioactive = BassAsio.BASS_ASIO_ChannelIsActive(this._input, this._channel);

            if (flag && bassasioactive == BASSASIOActive.BASS_ASIO_ACTIVE_DISABLED)
            {
                BassAsio.BASS_ASIO_Stop();
            }
            this.EnableAndJoin(this._input, this._channel, this._numchans, this._internalAsioProc, this._format);
            if (flag)
            {
                BassAsio.BASS_ASIO_Start(0, 0);
            }
        }
Example #4
0
 public static extern bool BASS_ASIO_ChannelSetFormat([MarshalAs(UnmanagedType.Bool)] bool input, int channel, BASSASIOFormat format);