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; }
public void UpdateChange(ISoundFactory factory) { if (currentSound != emitter.Sound) { // Changed: disposeSound(); } if (buffer == null && emitter.Sound != null) { loadSound(factory); currentSound = emitter.Sound; } if (emitter.Playing && !oldPlaying) { loadSound(factory); sourceVoice.SubmitSourceBuffer(buffer); sourceVoice.Start(); } else if (!emitter.Playing && oldPlaying) { sourceVoice.Stop(); sourceVoice.FlushSourceBuffers(); } }
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; } } }
protected override void StopNativeMusic() { isPlaying = false; if (source == null) { return; } source.Stop(); source.FlushSourceBuffers(); }
public void Dispose() { if (_voice != null && _voice.IsDisposed == false) { _voice.Stop(); _voice.FlushSourceBuffers(); _voice.DestroyVoice(); _voice.Dispose(); } }
//check voice status private void Check() { while (Voice.State.BuffersQueued > 0) { Thread.Sleep(10); } _voice.Stop(); _voice.FlushSourceBuffers(); isPlaying = false; Stopped?.Invoke(this); }
private void DisposeSource() { for (int i = 0; i < NumberOfBuffers; i++) { buffers[i] = null; } source.FlushSourceBuffers(); source.DestroyVoice(); source.Dispose(); source = null; }
public void Flush() { m_cueId = new MyCueId(MyStringHash.NullOrEmpty); m_voice.Stop(); m_voice.FlushSourceBuffers(); DisposeWaves(); m_isPlaying = false; m_isPaused = false; m_isLoopable = false; m_currentDescriptor = null; }
public void Shutdown() { buffer.Dispose(); sourceVoice.FlushSourceBuffers(); buffer = null; sourceVoice.Dispose(); sourceVoice = null; masteringVoice.Dispose(); masteringVoice = null; device.StopEngine(); device.Dispose(); }
public void Flush() { m_cueId = new MyCueId(MyStringHash.NullOrEmpty); m_voice.Stop(); m_voice.FlushSourceBuffers(); for (int i = 0; i < m_loopBuffers.Length; i++) { m_loopBuffers[i] = null; } m_isPlaying = false; m_isPaused = false; m_isLoopable = false; m_currentDescriptor = null; }
static void SetRow(int row) { double time = row / rowRate; // Stop and restart voice at different location. This is a bit nasty, // but it seems to work. sourceVoice.Stop(); sourceVoice.FlushSourceBuffers(); // Seek the stream back to start, and change PlayBegin. Seeking directly // in the stream does not seem to work. stream.Seek(0, System.IO.SeekOrigin.Begin); audioBuffer.PlayBegin = (int)(time * stream.Format.SamplesPerSecond); if (stream.Format.FormatTag == WaveFormatTag.WMAudio2) { // Ruond off play-position to the closest 128 samples. If we don't, // the nice gentlemen gets upset or something. (AKA the documentation // says so. It doesn't seem to cause any harm in reality, though) audioBuffer.PlayBegin = (int)System.Math.Floor(audioBuffer.PlayBegin * 128 + 0.5) / 128; } // Ngh. Even though the documentation says that the voice counters should // be reset if FlushSourceBuffers is called after Stop, guess what? They // arent! So let's keep track of how far off it is. samplesBias = sourceVoice.State.SamplesPlayed - audioBuffer.PlayBegin; // Submit data, and restart if needed sourceVoice.SubmitSourceBuffer(audioBuffer, stream.DecodedPacketsInfo); if (playing) { sourceVoice.Start(); } }
public void Clear() { //flush buffers SourceVoice.FlushSourceBuffers(); while (SourceVoice.State.BuffersQueued > 0) { SourceVoice.FlushSourceBuffers(); } SourceVoice.FlushSourceBuffers(); //stop sound SourceVoice.Stop(XAudio2.CommitNow); var buffers = _audioBuffers.ToArray(); _audioBuffers.Clear(); //dispose buffers foreach (var buffer in buffers) { buffer.Value.Stream.Dispose(); } //flush buffers SourceVoice.FlushSourceBuffers(); while (SourceVoice.State.BuffersQueued > 0) { SourceVoice.FlushSourceBuffers(); } }
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(); }
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; }
private void PlatformPlay() { if (_voice != null) { // Choose the correct buffer depending on if we are looped. var buffer = _loop ? _effect._loopedBuffer : _effect._buffer; if (_voice.State.BuffersQueued > 0) { _voice.Stop(); _voice.FlushSourceBuffers(); } _voice.SubmitSourceBuffer(buffer, null); _voice.Start(); } _paused = false; }
public void Start(bool louder = true) { if (_voice == null || _voice.IsDisposed) { return; } if (Queued) { // Gracefully restart this voice _voice.FlushSourceBuffers(); _resetAfterEnd = true; return; } // Emphasis the important voices to rise above the chaos! _voice.SetVolume(_baseVolume * (louder ? 2f : 1f)); _voice.SubmitSourceBuffer(_audioBuffer, _stream.DecodedPacketsInfo); _voice.Start(); }
internal bool Play(SourceVoice pVoice) { //Clear anything from its buffers (shouldn't be anything) pVoice.FlushSourceBuffers(); //Play pVoice.SubmitSourceBuffer(_buffer, DecodedPacketsInfo); pVoice.Start(); return(true); }
/// <summary> /// Plays the current instance. If it is already playing - the call is ignored. /// </summary> public void Play() { if (State == AudioState.Playing) { return; } if (voice.State.BuffersQueued > 0) { voice.Stop(); voice.FlushSourceBuffers(); } voice.SubmitSourceBuffer(CurrentAudioBuffer, Effect.DecodedPacketsInfo); voice.Start(); this.Update(); paused = false; }
public void cambioFrec(int frecuenciaNueva, int frecuenciaEnvolvente) { if (sourcevoice != null) { sourcevoice.SetVolume(0.0f); sourcevoice.FlushSourceBuffers(); //sourcevoice.SetFrequencyRatio(frecuenciaNueva / 2048); } sourcevoice.SetVolume(vol); llenaBuffer(BufferSamples, frecuenciaNueva, frecuenciaEnvolvente); sourcevoice.Start(); }
/// <summary> /// Plays the current instance. If it is already playing - the call is ignored. /// </summary> /// <exception cref="ObjectDisposedException">Is thrown if the current instance was already disposed.</exception> public void Play() { if (IsDisposed) { throw new ObjectDisposedException(this.GetType().FullName); } if (State == SoundState.Playing) { return; } if (voice.State.BuffersQueued > 0) { voice.Stop(); voice.FlushSourceBuffers(); } voice.SubmitSourceBuffer(CurrentAudioBuffer, Effect.DecodedPacketsInfo); voice.Start(); paused = false; }
public void StopImmediate() { if (immediateVoice != null) { immediateVoice.Stop(); immediateVoice.FlushSourceBuffers(); immediateVoice.BufferEnd -= ImmediateVoice_BufferEnd; immediateVoice.DestroyVoice(); immediateVoice.Dispose(); immediateVoice = null; Utilities.FreeMemory(immediateAudioBuffer.AudioDataPointer); immediateAudioBuffer = null; immediateDonePlaying = true; } }
void PlayDevice() { AudioBuffer buffer; byte * mixbuf = _hidden.mixbuf; byte * nextbuf = _hidden.nextbuf; int mixlen = _hidden.mixlen; if (!_enabled)// shutting down? { return; } // Submit the next filled buffer buffer = _hidden.audioBuffersRing[_hidden.nextBuffer]; buffer.AudioBytes = mixlen; buffer.AudioDataPointer = (IntPtr)nextbuf; //buffer.Context = _hidden.device; if (nextbuf == mixbuf) { nextbuf += mixlen; } else { nextbuf = mixbuf; } _hidden.nextbuf = nextbuf; _hidden.nextBuffer = ++_hidden.nextBuffer % _hidden.audioBuffersRing.Length; try { _sourceVoice.SubmitSourceBuffer(buffer, null); } catch (SharpDXException e) { if (e.HResult == ResultCode.DeviceInvalidated.Code) { // !!! FIXME: possibly disconnected or temporary lost. Recover? } // uhoh, panic! _sourceVoice.FlushSourceBuffers(); OpenedAudioDeviceDisconnected(); } }
public void StopImmediate() { Debug.Assert(PlatformUtils.IsInMainThread()); if (immediateVoice != null) { immediateVoice.Stop(); immediateVoice.FlushSourceBuffers(); immediateVoice.BufferEnd -= ImmediateVoice_BufferEnd; immediateVoice.DestroyVoice(); immediateVoice.Dispose(); immediateVoice = null; Utilities.FreeMemory(immediateAudioBuffer.AudioDataPointer); immediateAudioBuffer = null; immediateDonePlaying = true; } }
public void Stop() { if (playingTask != null) { quitEvent.Set(); playingTask.Wait(); playingTask = null; } if (sourceVoice != null) { sourceVoice.Stop(); sourceVoice.FlushSourceBuffers(); sourceVoice.DestroyVoice(); sourceVoice.BufferEnd -= SourceVoice_BufferEnd; sourceVoice.Dispose(); sourceVoice = null; } }
/// <summary> /// Plays the audio. /// </summary> /// <param name="stop">If true, will stop the sound and return its position to 0 before playing it. Passing false will have the effect of resuming the sound from the last position it was stopped at.</param> /// <param name="loop">Whether or not to loop the sound.</param> public void play(bool stop, bool loop) { this.looping = loop; isInitializingPlayback = true; if (loop) { buffer.LoopCount = AudioBuffer.LoopInfinite; } // We'll start the buffer from the beginning if we've never played this buffer before so that the sound can be loaded. // Otherwise, the sound might start from a random position in the buffer. if (stop || hasNeverPlayed) { hasNeverPlayed = false; voice.Stop(); voice.FlushSourceBuffers(); buffer.Stream.Position = 0; voice.SubmitSourceBuffer(buffer, null); } voice.Start(); isStopped = false; isInitializingPlayback = false; }
public override void Dispose() { if (InvokeRequired) { Invoke(new DisposeDelegate(Dispose)); return; } while (mReadingData) { Thread.Sleep(1); } mIsDisposed = true; mVoice.FlushSourceBuffers(); Thread.Sleep(1); mVoice.Stop(); //w.BaseStream.Dispose(); try { mVoice.Dispose(); } catch (Exception e) { System.Diagnostics.Debug.Print("Caught exception {0}.\n{1}", e.GetType(), e.Message); } foreach (var b in buffer) { b.buffer.Dispose(); } System.Diagnostics.Debug.Print("Disposed streaming buffer {0}.", thisBufferIndex); }
/// <summary> /// Dispose resources /// </summary> /// <param name="disposing">Free managed resources</param> protected virtual void Dispose(bool disposing) { if (disposing) { if (voice != null) { voice.BufferStart -= SourceVoice_BufferStart; voice.BufferEnd -= SourceVoice_BufferEnd; voice.LoopEnd -= SourceVoice_LoopEnd; } voice?.Stop(0); voice?.FlushSourceBuffers(); if (isReverbSubmixEnabled) { voice?.SetOutputVoices(null); isReverbSubmixEnabled = false; } voice?.DestroyVoice(); voice?.Dispose(); voice = null; } }
private void ClearBuffersImpl() { SourceVoice.FlushSourceBuffers(); }
public override void Flush() { _voice.FlushSourceBuffers(); }
public void Stop() { sourceVoice.Stop(PlayFlags.None, 0); sourceVoice.FlushSourceBuffers(); isStarted = false; }