protected virtual bool StartWASAPI()
 {
     for (var a = 1; a <= START_ATTEMPTS; a++)
     {
         Logger.Write(this, LogLevel.Debug, "Starting WASAPI, attempt: {0}", a);
         try
         {
             var success = BassWasapi.Start();
             if (success)
             {
                 Logger.Write(this, LogLevel.Debug, "Successfully started WASAPI.");
                 return(true);
             }
             else
             {
                 Logger.Write(this, LogLevel.Warn, "Failed to start WASAPI: {0}", Enum.GetName(typeof(Errors), Bass.LastError));
             }
         }
         catch (Exception e)
         {
             //Nothing can be done.
             Logger.Write(this, LogLevel.Warn, "Failed to start WASAPI: {0}", e.Message);
         }
         Thread.Sleep(START_ATTEMPT_INTERVAL);
     }
     Logger.Write(this, LogLevel.Warn, "Failed to start WASAPI after {0} attempts.", START_ATTEMPTS);
     return(false);
 }
Beispiel #2
0
        /// <summary>
        /// Start Recording.
        /// </summary>
        public void Start()
        {
            _silencePlayer?.Play();

            BassWasapi.CurrentDevice = _deviceIndex;

            if (!BassWasapi.Start())
            {
                _silencePlayer?.Stop();
            }
        }
Beispiel #3
0
 protected virtual bool StartWASAPI()
 {
     if (BassWasapi.IsStarted)
     {
         Logger.Write(this, LogLevel.Debug, "WASAPI has already been started.");
         return(false);
     }
     Logger.Write(this, LogLevel.Debug, "Starting WASAPI.");
     BassUtils.OK(BassWasapi.Start());
     return(true);
 }
Beispiel #4
0
        /// <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;
        }
Beispiel #5
0
        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();
        }
 public bool Start()
 {
     BassWasapi.CurrentDevice = DeviceIndex;
     return(BassWasapi.Start());
 }