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); } }
public static extern bool BASS_ASIO_ChannelSetFormat([MarshalAs(UnmanagedType.Bool)] bool input, int channel, BASSASIOFormat format);