Ejemplo n.º 1
0
        public override void Play(AudioBuffer buffer)
        {
            _xa2Buffer            = (XAudio2AudioBuffer)buffer;
            _channelCount         = GetChannelCount(_xa2Buffer.Format);
            _emitter.ChannelCount = _channelCount;
            if ((_channelCount > 1 && !_stereoState) || (_channelCount == 1 && _stereoState))
            {
                float volume = _sourceVoice.Volume;
                _sourceVoice.DestroyVoice();
                _sourceVoice.Dispose();
                WaveFormat waveFormat = new WaveFormat(_xa2Buffer.Frequency, GetChannelCount(_xa2Buffer.Format));
                _sourceVoice = new SourceVoice(_engine.XAudio2, waveFormat, VoiceFlags.None, maxFrequencyRatio: 2.0f);
                _sourceVoice.SetVolume(volume);
                _emitter.ChannelAzimuths = new[] { 0.0f };
                _dspSettings             = new DspSettings(_channelCount, 2);
                UpdateSourcePosition();
                _stereoState = _channelCount == 2;
            }

            if (_sourcePositionDirty)
            {
                UpdateSourcePosition();
                _sourcePositionDirty = false;
            }

            _audioBuffer.Stream     = _xa2Buffer.DataStream;
            _audioBuffer.AudioBytes = _xa2Buffer.SizeInBytes;
            _audioBuffer.Flags      = BufferFlags.EndOfStream;
            _sourceVoice.Stop();
            _sourceVoice.FlushSourceBuffers();
            _sourceVoice.SubmitSourceBuffer(_audioBuffer, null);
            _sourceVoice.Start();
        }
Ejemplo n.º 2
0
 public override void Dispose(bool disposing)
 {
     if (disposing)
     {
         if (sourceVoice != null)
         {
             sourceVoice.FlushSourceBuffers();
             sourceVoice.Stop();
             sourceVoice.Dispose();
             sourceVoice = null;
         }
         if (xAudioBuffer != null)
         {
             xAudioBuffer.Stream.Dispose();
             xAudioBuffer.Stream = null;
             xAudioBuffer        = null;
         }
         if (xAudio != null)
         {
             xAudio.StopEngine();
             xAudio.Dispose();
             xAudio = null;
         }
     }
 }
Ejemplo n.º 3
0
        public void Reset()
        {
            isPlaying = false;
            buffer.Dispose();
            sourceVoice.FlushSourceBuffers();
            buffer = null;
            sourceVoice.Dispose();
            sourceVoice = null;
            masteringVoice.Dispose();
            masteringVoice = null;

            masteringVoice = new MasteringVoice(device, waveFormat.Channels, waveFormat.SamplesPerSecond);

            sourceVoice = new SourceVoice(device, waveFormat, VoiceFlags.None);
            // sourceVoice.BufferStart += new System.EventHandler<ContextEventArgs>(sourceVoice_BufferStart);

            sourceVoice.Volume = 0.5f;
            buffer             = new AudioBuffer();
            buffer.AudioData   = new System.IO.MemoryStream();

            bytesPerSample = (waveFormat.BitsPerSample / 8) * waveFormat.Channels;

            for (int i = 0; i < BUFFER_COUNT; i++)
            {
                sampleData[i] = new short[SAMPLE_SIZE * waveFormat.Channels];
                bData[i]      = new byte[SAMPLE_SIZE * bytesPerSample];
            }
            sourceVoice.SubmitSourceBuffer(buffer);
            currentBuffer = 0;
            playBuffer    = 0;
            samplePos     = 0;
        }
Ejemplo n.º 4
0
        void CloseDevice()
        {
            _sourceVoice?.Stop(PlayFlags.None, XAUDIO2_COMMIT_NOW);
            _sourceVoice?.FlushSourceBuffers();
            _sourceVoice?.DestroyVoice();
            _sourceVoice?.Dispose();

            _xaudio2?.StopEngine();

            _masteringVoice?.DestroyVoice();
            _masteringVoice?.Dispose();

            _xaudio2?.Dispose();

            _sourceVoice    = null;
            _masteringVoice = null;
            _xaudio2        = null;

            //if (_hidden.handle.IsAllocated)
            //{
            //    _hidden.handle.Free();
            //    _hidden.device = IntPtr.Zero;
            //}

            if (_hidden.mixbuf != null)
            {
                Marshal.FreeHGlobal((IntPtr)_hidden.mixbuf);
                _hidden.mixbuf = null;
            }

            _dev = null;
        }
Ejemplo n.º 5
0
        static void PlayPCM(XAudio2 device, string fileName)
        {
            //WaveStream stream = new WaveStream(fileName);
            var s = System.IO.File.OpenRead(fileName);
            WaveStream stream = new WaveStream(s);
            s.Close();

            AudioBuffer buffer = new AudioBuffer();
            buffer.AudioData = stream;
            buffer.AudioBytes = (int)stream.Length;
            buffer.Flags = BufferFlags.EndOfStream;

            SourceVoice sourceVoice = new SourceVoice(device, stream.Format);
            sourceVoice.SubmitSourceBuffer(buffer);
            sourceVoice.Start();

            // loop until the sound is done playing
            while (sourceVoice.State.BuffersQueued > 0)
            {
                if (GetAsyncKeyState(VK_ESCAPE) != 0)
                    break;

                Thread.Sleep(10);
            }

            // wait until the escape key is released
            while (GetAsyncKeyState(VK_ESCAPE) != 0)
                Thread.Sleep(10);

            // cleanup the voice
            buffer.Dispose();
            sourceVoice.Dispose();
            stream.Dispose();
        }
Ejemplo n.º 6
0
 public void Dispose()
 {
     _sourceVoice?.DestroyVoice();
     _sourceVoice?.Dispose();
     _buffer.Stream.Dispose();
     _stream?.Dispose();
 }
Ejemplo n.º 7
0
 public void Dispose()
 {
     buffer.Dispose();
     srcVoice.Dispose();
     masteringVoice.Dispose();
     device.Dispose();
 }
Ejemplo n.º 8
0
        static void PlayPCM(XAudio2 device, string fileName)
        {
            //WaveStream stream = new WaveStream(fileName);
            WaveStream stream;

            using (var s = System.IO.File.OpenRead(fileName))
            {
                stream = new WaveStream(s);
            }

            AudioBuffer buffer = new AudioBuffer();

            buffer.AudioData  = stream;
            buffer.AudioBytes = (int)stream.Length;
            buffer.Flags      = BufferFlags.EndOfStream;

            SourceVoice sourceVoice = new SourceVoice(device, stream.Format);

            sourceVoice.SubmitSourceBuffer(buffer);
            sourceVoice.Start();

            // loop until the sound is done playing
            while (sourceVoice.State.BuffersQueued > 0)
            {
                Thread.Sleep(10);
            }

            // cleanup the voice
            buffer.Dispose();
            sourceVoice.Dispose();
            stream.Dispose();
        }
Ejemplo n.º 9
0
        private void Dispose(bool disposing)
        {
            if (!_disposed)
            {
                if (disposing)
                {
                    StopFxSounds();
                    StopEnvSounds();

                    _currentBgm?.DestroyVoice();
                    _currentBgm?.Dispose();
                    _currentBgm = null;

                    _fxLinkedSoundList.Clear();
                    _envLinkedSoundList.Clear();

                    UnloadAll();

                    _fxSubmixVoice.DestroyVoice();
                    _fxSubmixVoice.Dispose();

                    _envSubmixVoice.DestroyVoice();
                    _envSubmixVoice.Dispose();

                    _masteringVoice.DestroyVoice();
                    _masteringVoice.Dispose();

                    _xAudio2.Dispose();
                }

                _disposed = true;
            }
        }
Ejemplo n.º 10
0
 /// <summary>
 /// Dispose
 /// </summary>
 public void Dispose()
 {
     _voice.DestroyVoice();
     _voice.Dispose();
     _stream.Dispose();
     _buffer.Stream.Dispose();
 }
Ejemplo n.º 11
0
        private void PlayWaveHelper(string soundFile, string soundText)
        {
            var filepath = GetFilePath(soundFile, soundText).Result;

            var nativefilestream = new NativeFileStream(filepath, NativeFileMode.Open, NativeFileAccess.Read);

            using (var soundstream = new SoundStream(nativefilestream))
            {
                var waveFormat = soundstream.Format;
                var buffer     = new AudioBuffer
                {
                    Stream     = soundstream.ToDataStream(),
                    AudioBytes = (int)soundstream.Length,
                    Flags      = BufferFlags.EndOfStream
                };

                if (_sourceVoice != null)
                {
                    _sourceVoice.DestroyVoice();
                    _sourceVoice.Dispose();
                }

                _sourceVoice = new SourceVoice(_xAudio, waveFormat);

                _sourceVoice.SubmitSourceBuffer(buffer, soundstream.DecodedPacketsInfo);
                _sourceVoice.BufferEnd += obj =>
                {
                    _lock.Set();
                };

                _sourceVoice.Start();
            }
        }
Ejemplo n.º 12
0
        // ReSharper disable once UnusedParameter.Local
        private void PlayImpl(string soundName, double balance, double volume)
        {
            var soundStream = GetSoundStream(soundName);

            if (soundStream == null)
            {
                return;
            }

            var stream = new WaveStream(soundStream);
            var voice  = new SourceVoice(_audioDevice, stream.Format)
            {
                Volume = (float)volume
            };
            var buf = new AudioBuffer {
                AudioData = stream, AudioBytes = (int)stream.Length
            };

            voice.SubmitSourceBuffer(buf);
            voice.Start();

            // This does not work, need matrix http://xboxforums.create.msdn.com/forums/t/75836.aspx
            //voice.SetChannelVolumes(2, new[] {(float) (balance <= 0 ? 1 : balance), (float) (balance >= 0 ? 1 : -balance)});

            voice.BufferEnd += (sender, args) => _playerThreadDispatcher.BeginInvoke((Action)(() =>
            {
                voice.Stop();
                buf.Dispose();
                voice.Dispose();
                stream.Dispose();
            }));
        }
Ejemplo n.º 13
0
 private static void finishSource(SourceVoice s)
 {
     if (sources.ContainsKey(s))
     {
         s.DestroyVoice();
         s.Dispose();
         sources[s].Stream.Dispose();
     }
 }
Ejemplo n.º 14
0
 public void Dispose()
 {
     if (m_voice == null)
     {
         return;
     }
     m_voice.DestroyVoice();
     m_voice.Dispose();
     m_voice = null;
 }
Ejemplo n.º 15
0
 public void Dispose()
 {
     if (_voice != null && _voice.IsDisposed == false)
     {
         _voice.Stop();
         _voice.FlushSourceBuffers();
         _voice.DestroyVoice();
         _voice.Dispose();
     }
 }
Ejemplo n.º 16
0
 private void Stop()
 {
     if (playerState != PlayerState.Stopped)
     {
         sourceVoice.DestroyVoice();
         sourceVoice.Dispose();
         audioBuffer.Stream.Dispose();
         SetPlayerState(PlayerState.Stopped);
     }
 }
Ejemplo n.º 17
0
 private void DisposeSource()
 {
     for (int i = 0; i < NumberOfBuffers; i++)
     {
         buffers[i].Dispose();
     }
     source.FlushSourceBuffers();
     source.Dispose();
     source = null;
 }
Ejemplo n.º 18
0
        internal void PlatformSpecificDisposeImpl()
        {
            if (SourceVoice == null)
            {
                return;
            }

            SourceVoice.DestroyVoice();
            SourceVoice.Dispose();
        }
Ejemplo n.º 19
0
        public void MarkComplete(RemoveActivePlaybackEngineCallback callback)
        {
            while (source == null || source.State.BuffersQueued > 0)
            {
                Thread.Sleep(10);
            }

            source.Dispose();
            callback();
            GC.KeepAlive(this);
        }
        private void DisposePlayer()
        {
            _sourceVoice.Dispose();
            _sourceVoice = null;

            for (int i = 0; i < _audioBuffersRing.Length; i++)
            {
                Utilities.FreeMemory(_memBuffers[i].Pointer);
                _memBuffers[i].Pointer = IntPtr.Zero;
            }
        }
Ejemplo n.º 21
0
 public void Shutdown()
 {
     buffer.Dispose();
     sourceVoice.FlushSourceBuffers();
     buffer = null;
     sourceVoice.Dispose();
     sourceVoice = null;
     masteringVoice.Dispose();
     masteringVoice = null;
     device.StopEngine();
     device.Dispose();
 }
Ejemplo n.º 22
0
 public void Stop()
 {
     thread?.Abort();
     if (sourceVoice != null && buffer != null && xaudio2 != null && masteringVoice != null)
     {
         sourceVoice.DestroyVoice();
         sourceVoice.Dispose();
         sourceVoice = null;
         xaudio2.Dispose();
         masteringVoice.Dispose();
     }
 }
Ejemplo n.º 23
0
        private bool disposedValue = false;         // To detect redundant calls

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    voice.Dispose();
                    buffer.Stream.Dispose();
                }
                disposedValue = true;
            }
        }
 private void disposeSound()
 {
     if (buffer == null)
     {
         return;
     }
     // cleanup the voice
     buffer.Dispose();
     sourceVoice.Dispose();
     buffer      = null;
     sourceVoice = null;
 }
Ejemplo n.º 25
0
 public void Reset()
 {
     if (sVoice != null)
     {
         sVoice.Stop();
         sVoice.Dispose();
     }
     if (audioWriter != null)
     {
         audioWriter.Close();
     }
     if (audioBuffer != null)
     {
         audioBuffer.Dispose();
     }
     sVoice                = new SourceVoice(device, audioFormat, VoiceFlags.None);
     audioBuffer           = new AudioBuffer();
     audioBuffer.AudioData = new MemoryStream();
     audioWriter           = new BinaryWriter(audioBuffer.AudioData);
     mVoice.Volume         = volume;
     sVoice.Start();
 }
Ejemplo n.º 26
0
 public void Dispose()
 {
     _quit = true;
     _audioThread.Wait();
     Stop();
     foreach (var buffer in _buffers)
     {
         buffer.Dispose();
     }
     _voice.Dispose();
     _masteringVoice.Dispose();
     _xAudio.Dispose();
 }
 private void PlatformDispose(bool disposing)
 {
     if (disposing)
     {
         if (_voice != null)
         {
             _voice.DestroyVoice();
             _voice.Dispose();
         }
     }
     _voice  = null;
     _effect = null;
 }
Ejemplo n.º 28
0
        public void Dispose()
        {
            if (_voice != null && !_voice.IsDisposed)
            {
                _voice.DestroyVoice();
                _voice.Dispose();
            }

            if (_stream != null)
            {
                _stream.Dispose();
            }
        }
Ejemplo n.º 29
0
        private void DisposePlayer()
        {
            audioDecoder.Dispose();
            audioDecoder = null;

            sourceVoice.Dispose();
            sourceVoice = null;

            for (int i = 0; i < audioBuffersRing.Length; i++)
            {
                Utilities.FreeMemory(memBuffers[i].Pointer);
                memBuffers[i].Pointer = IntPtr.Zero;
            }
        }
Ejemplo n.º 30
0
        /// <summary>
        /// dis pose the woto player, and realese all the resources.
        /// </summary>
        /// <param name="force">
        /// the value to check if you want to lose all the
        /// resources or not.
        /// </param>
        private void DisposePlayer(bool force = false)
        {
            try
            {
                if (!(audioDecoder is null))
                {
                    audioDecoder.Dispose();
                    if (force)
                    {
                        audioDecoder = null;
                    }
                }
                if (!(masteringVoice is null))
                {
                    masteringVoice.Dispose();
                    if (force)
                    {
                        sourceVoice = null;
                    }
                }
                if (!(sourceVoice is null))
                {
                    sourceVoice.Dispose();
                    if (force)
                    {
                        sourceVoice = null;
                    }
                }
                if (!(_stream is null))
                {
                    _stream.Close();
                    _stream.Dispose();
                    _stream = null;
                }

                if (!(audioBuffersRing is null || memBuffers is null))
                {
                    for (int i = 0; i < audioBuffersRing.Length; i++)
                    {
                        Utilities.FreeMemory(memBuffers[i].Pointer);
                        memBuffers[i].Pointer = IntPtr.Zero;
                    }
                }
            }
            catch
            {
                return;
            }
        }
Ejemplo n.º 31
0
 public override void Dispose()
 {
     if (_voice != null)
     {
         _voice.Dispose();
     }
     if (_masteringVoice != null)
     {
         _masteringVoice.Dispose();
     }
     if (_xaudio2 != null)
     {
         _xaudio2.Dispose();
     }
 }
Ejemplo n.º 32
0
        public void Play( Form on )
        {
            var screens = Screen.AllScreens;
            var screens_left  = screens.Min( screen => screen.Bounds.Left  );
            var screens_right = screens.Max( screen => screen.Bounds.Right );
            var screens_width = screens_right-screens_left;

            var bestScreen = screens.OrderByDescending( screen => {
                var area = screen.Bounds;
                area.Intersect( on.Bounds );
                return area.Width*area.Height;
            }).First();

            var balances = new[]{1.5f,1.5f};
            if ( screens.Length==3 && DisplayBalances.ContainsKey(bestScreen.DeviceName) ) balances = DisplayBalances[bestScreen.DeviceName];

            var path   = Registry.CurrentUser.OpenSubKey(@"AppEvents\Schemes\Apps\.Default\"+Name+@"\.Current").GetValue(null) as string;
            var stream = new WaveStream(path);
            var buffer = new AudioBuffer() { AudioBytes=(int)stream.Length, AudioData=stream, Flags=BufferFlags.EndOfStream };

            var voice = new SourceVoice( XAudio2, stream.Format );
            voice.SubmitSourceBuffer( buffer );
            voice.SetChannelVolumes( balances.Length, balances );
            voice.BufferEnd += (sender,ctx) => {
                try {
                    on.BeginInvoke(new Action(()=>{
                        voice.Dispose();
                        buffer.Dispose();
                        stream.Dispose();
                    }));
                } catch ( InvalidOperationException ) {
                    // herp derp on must be disposed/gone
                }
            };
            voice.Start();
        }