public MainForm() { InitializeComponent(); soundFileDialog.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.MyMusic); challengeFileDialog.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); wmPlayer = new WMPLib.WindowsMediaPlayer(); defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice; }
public CoreAudioSession(CoreAudioDevice device, IAudioSessionControl control) { ComThread.Assert(); // ReSharper disable once SuspiciousTypeConversion.Global var audioSessionControl = control as IAudioSessionControl2; // ReSharper disable once SuspiciousTypeConversion.Global var simpleAudioVolume = control as ISimpleAudioVolume; if (audioSessionControl == null || simpleAudioVolume == null) { throw new InvalidComObjectException("control"); } _controlPtr = Marshal.GetIUnknownForObject(control); _audioSessionControl = new ThreadLocal <IAudioSessionControl2>(() => Marshal.GetUniqueObjectForIUnknown(_controlPtr) as IAudioSessionControl2); _meterInformation = new ThreadLocal <IAudioMeterInformation>(() => Marshal.GetUniqueObjectForIUnknown(_controlPtr) as IAudioMeterInformation); _simpleAudioVolume = new ThreadLocal <ISimpleAudioVolume>(() => Marshal.GetUniqueObjectForIUnknown(_controlPtr) as ISimpleAudioVolume); Device = device; _deviceMutedSubscription = Device.MuteChanged.Subscribe(x => { OnMuteChanged(_isMuted); }); _stateChanged = new Broadcaster <SessionStateChangedArgs>(); _disconnected = new Broadcaster <SessionDisconnectedArgs>(); _volumeChanged = new Broadcaster <SessionVolumeChangedArgs>(); _muteChanged = new Broadcaster <SessionMuteChangedArgs>(); _peakValueChanged = new Broadcaster <SessionPeakValueChangedArgs>(); AudioSessionControl.RegisterAudioSessionNotification(this); RefreshProperties(); RefreshVolume(); }
public CoreAudioSessionController(CoreAudioDevice device, IAudioSessionManager2 audioSessionManager) { if (audioSessionManager == null) { throw new ArgumentNullException(nameof(audioSessionManager)); } ComThread.Assert(); _device = device; _audioSessionManager = audioSessionManager; _audioSessionManager.RegisterSessionNotification(this); _sessionCache = new List <CoreAudioSession>(0); _sessionCreated = new Broadcaster <IAudioSession>(); _sessionDisconnected = new Broadcaster <string>(); RefreshSessions(); _processTerminatedSubscription = ProcessMonitor.ProcessTerminated.Subscribe(processId => { RemoveSessions(_sessionCache.Where(x => x.ProcessId == processId)); }); }