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(); }
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; } } }
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; }
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; }
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(); }
public void Dispose() { _sourceVoice?.DestroyVoice(); _sourceVoice?.Dispose(); _buffer.Stream.Dispose(); _stream?.Dispose(); }
public void Dispose() { buffer.Dispose(); srcVoice.Dispose(); masteringVoice.Dispose(); device.Dispose(); }
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(); }
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; } }
/// <summary> /// Dispose /// </summary> public void Dispose() { _voice.DestroyVoice(); _voice.Dispose(); _stream.Dispose(); _buffer.Stream.Dispose(); }
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(); } }
// 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(); })); }
private static void finishSource(SourceVoice s) { if (sources.ContainsKey(s)) { s.DestroyVoice(); s.Dispose(); sources[s].Stream.Dispose(); } }
public void Dispose() { if (m_voice == null) { return; } m_voice.DestroyVoice(); m_voice.Dispose(); m_voice = null; }
public void Dispose() { if (_voice != null && _voice.IsDisposed == false) { _voice.Stop(); _voice.FlushSourceBuffers(); _voice.DestroyVoice(); _voice.Dispose(); } }
private void Stop() { if (playerState != PlayerState.Stopped) { sourceVoice.DestroyVoice(); sourceVoice.Dispose(); audioBuffer.Stream.Dispose(); SetPlayerState(PlayerState.Stopped); } }
private void DisposeSource() { for (int i = 0; i < NumberOfBuffers; i++) { buffers[i].Dispose(); } source.FlushSourceBuffers(); source.Dispose(); source = null; }
internal void PlatformSpecificDisposeImpl() { if (SourceVoice == null) { return; } SourceVoice.DestroyVoice(); SourceVoice.Dispose(); }
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; } }
public void Shutdown() { buffer.Dispose(); sourceVoice.FlushSourceBuffers(); buffer = null; sourceVoice.Dispose(); sourceVoice = null; masteringVoice.Dispose(); masteringVoice = null; device.StopEngine(); device.Dispose(); }
public void Stop() { thread?.Abort(); if (sourceVoice != null && buffer != null && xaudio2 != null && masteringVoice != null) { sourceVoice.DestroyVoice(); sourceVoice.Dispose(); sourceVoice = null; xaudio2.Dispose(); masteringVoice.Dispose(); } }
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; }
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(); }
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; }
public void Dispose() { if (_voice != null && !_voice.IsDisposed) { _voice.DestroyVoice(); _voice.Dispose(); } if (_stream != null) { _stream.Dispose(); } }
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; } }
/// <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; } }
public override void Dispose() { if (_voice != null) { _voice.Dispose(); } if (_masteringVoice != null) { _masteringVoice.Dispose(); } if (_xaudio2 != null) { _xaudio2.Dispose(); } }
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(); }