public bool Init(int Frequency = 44100, int Channels = 2, bool Shared = true) { if (DeviceInfo.IsInitialized) { return(true); } bool Result = BassWasapi.Init(DeviceIndex, Frequency, Channels, Shared ? WasapiInitFlags.Shared : WasapiInitFlags.Exclusive, proc: proc); if (Result) { ReferenceCount++; } return(Result); }
/// <summary> /// Create a new instance of <see cref="LoopbackProvider"/>. /// </summary> /// <param name="Device"><see cref="WasapiLoopbackDevice"/> to use.</param> /// <param name="IncludeSilence">Whether to record silence?... default = true</param> public LoopbackProvider(WasapiLoopbackDevice Device, bool IncludeSilence = true) { _deviceIndex = Device.DeviceIndex; _proc = Procedure; if (IncludeSilence) { _silencePlayer = new Silence(PlaybackDevice.Devices.First(Dev => Dev.Info.Driver == Device.Info.ID)); } BassWasapi.Init(_deviceIndex, Procedure: _proc); BassWasapi.CurrentDevice = Device.DeviceIndex; var info = BassWasapi.Info; WaveFormat = WaveFormat.CreateIeeeFloatWaveFormat(info.Frequency, info.Channels); }
/// <summary> /// If device is null we will attempt default input index /// </summary> public static void StartInputCapture(WasapiInputDevice device) { int inputDeviceIndex = BassWasapi.DefaultInputDevice; AudioAnalysis.InputMode = AudioAnalysis.InputModes.WasapiDevice; if (device == null) { if (_inputDevices.Count == 0) { Log.Error("No wasapi input devices found"); return; } Log.Error($"Attempting default input {BassWasapi.DefaultInputDevice}."); device = _inputDevices[0]; } else { Log.Debug($"Initializing WASAPI audio input for {device.DeviceInfo.Name}... "); inputDeviceIndex = device.WasapiDeviceIndex; } Bass.Configure(Configuration.UpdateThreads, false); // Bass.Configure(Configuration.DeviceBufferLength, 1024); BassWasapi.Stop(); BassWasapi.Free(); if (!BassWasapi.Init(inputDeviceIndex, Frequency: 0, Channels: 0, //Flags: WasapiInitFlags.Buffer | WasapiInitFlags.Exclusive, Flags: WasapiInitFlags.Buffer, Buffer: (float)device.DeviceInfo.DefaultUpdatePeriod, Period: (float)device.DeviceInfo.DefaultUpdatePeriod, Procedure: _wasapiProcedure, User: IntPtr.Zero)) { Log.Error("Can't initialize WASAPI:" + Bass.LastError); return; } BassWasapi.Start(); AudioAnalysis.InputMode = AudioAnalysis.InputModes.WasapiDevice; }
public void WasapiInit() { int i; do { i = new Random().Next(BassWasapi.DeviceCount); }while (!BassWasapi.GetDeviceInfo(i).IsEnabled); if (BassWasapi.GetDeviceInfo(i).IsInitialized) { BassWasapi.CurrentDevice = i; BassWasapi.Free(); } var proc = new WasapiProcedure((b, c, u) => c); Assert.IsTrue(BassWasapi.Init(i, 44100, 2, WasapiInitFlags.Shared, 0, 0, proc), "Cannot Init a random WASAPI device - {0}", Bass.LastError); Assert.IsTrue(BassWasapi.Free(), "Cannot free initialized WASAPI device - {0}", Bass.LastError); }
private void SetEnableWasapi(bool enable) { if (!enable) { BassWasapi.Stop(); //BassWasapi.Free(); _timer.Stop(); _timer.IsEnabled = false; return; } if (!_initialized) { var str = _deviceList[_deviceIndex % _deviceList.Count]; var array = str.Split(' '); _wasapiDeviceIndex = Convert.ToInt32(array[0]); Log.Debug($"Initializing WASAPI for {str}... #{_wasapiDeviceIndex}"); if (!BassWasapi.Init(_wasapiDeviceIndex, Frequency: 0, Channels: 0, //Flags: WasapiInitFlags.Buffer | WasapiInitFlags.Exclusive, Flags: WasapiInitFlags.Buffer, Buffer: 1, //0.0041f/2, // was 1 Period: 1, //0.0041f/2, Procedure: _wasapiProcedure, User: IntPtr.Zero)) { Log.Error("Can't initialize WASAPI:" + Bass.LastError); return; } _initialized = true; } BassWasapi.Start(); System.Threading.Thread.Sleep(100); _timer.IsEnabled = true; _timer.Start(); }