Exemple #1
0
        private void CleanUpAudio()
        {
            if (waveOut != null)
            {
                waveOut.Stop();
                waveOut.Dispose();
                waveOut = null;
            }

            if (decompressor != null)
            {
                decompressor.Dispose();
                decompressor = null;
            }

            if (mediaReader != null)
            {
                mediaReader.Dispose();
                mediaReader = null;
            }

            bufferedWaveProvider = null;
            stream.Flush();
        }
Exemple #2
0
        private void MumbleLoop()
        {
            do
            {
                bool shouldRun = true;
                client.Mumble.Update();
                if (!client.Mumble.IsAvailable)
                {
                    shouldRun = false;
                }

                int mapId = client.Mumble.MapId;
                if (mapId == 0)
                {
                    shouldRun = false;
                }

                if (shouldRun)
                {
                    try
                    {
                        this.Dispatcher.Invoke(new Action <IGw2MumbleClient>(m =>
                        {
                            //Adjust volume acording to elevation
                            float volume = 0;
                            float Yloc   = Convert.ToSingle(m.AvatarPosition.Y);
                            if (Yloc <= 0)
                            {
                                volume = map(Yloc, -30, 0, Convert.ToSingle(MaxVolume.Value), 0.01f);
                            }
                            else
                            {
                                volume = map(Yloc, 0, 3, 0.01f, 0f);
                            }

                            //Lets not get crazy here, keep it between 0 and 1
                            volume = Clamp(volume, 0, 1);

                            _outputDevice.Volume = volume;
                            volumeSlider.Value   = volume;
#if DEBUG
                            DepthLabel.Content = $"Depth ({_outputDevice.Volume})";
#endif
                        }), this.client.Mumble);
                    }
                    catch (ObjectDisposedException)
                    {
                        // The application is likely closing
                        break;
                    }
                }

                Thread.Sleep(1000 / 60);
            } while (!stopRequested);

            _outputDevice.Stop();
            _outputDevice.Dispose();
            _outputDevice = null;
            _audioFile.Dispose();
            _audioFile = null;
            _loop.Dispose();
            _loop = null;
        }