Beispiel #1
0
		private void OnBufferDone(WaveOutBuffer buffer)
		{
			if (playbackState == PlaybackState.Playing)
			{
				if (!buffer.OnDone())
				{
					playbackState = PlaybackState.Stopped;
					RaisePlaybackStopped();
				}
			}
		}
Beispiel #2
0
		/// <summary>
		/// Initialises the WaveOut device
		/// </summary>
		/// <param name="waveProvider">Wave provider to play</param>
		public void Init(IWaveProvider waveProvider)
		{
			if (Thread.CurrentThread.ManagedThreadId != waveOutThread.ManagedThreadId)
			{
				lock (actionQueue)
				{
					actionQueue.Enqueue(new WaveOutAction(WaveOutFunction.Init, waveStream));
					workAvailable.Set();
				}
				return;
			}

			waveStream = waveProvider;
			int bufferSize = waveProvider.WaveFormat.ConvertLatencyToByteSize(desiredLatency);
			//waveStream.GetReadSize((desiredLatency + 2) / 3);
			numBuffers = 3;

			MmException.Try(
				WaveInterop.waveOutOpen(out hWaveOut, (IntPtr) devNumber, waveStream.WaveFormat, callback, IntPtr.Zero,
				                        WaveInterop.CallbackFunction), "waveOutOpen");

			buffers = new WaveOutBuffer[numBuffers];
			playbackState = PlaybackState.Stopped;
			var waveOutLock = new object();
			for (int n = 0; n < numBuffers; n++)
			{
				buffers[n] = new WaveOutBuffer(hWaveOut, bufferSize, waveStream, waveOutLock);
			}
		}
Beispiel #3
0
		/// <summary>
		/// Initialises the WaveOut device
		/// </summary>
		/// <param name="waveProvider">WaveProvider to play</param>
		public void Init(IWaveProvider waveProvider)
		{
			waveStream = waveProvider;
			int bufferSize =
				waveProvider.WaveFormat.ConvertLatencyToByteSize((DesiredLatency + NumberOfBuffers - 1)/NumberOfBuffers);

			MmResult result;
			lock (waveOutLock)
			{
				result = callbackInfo.WaveOutOpen(out hWaveOut, DeviceNumber, waveStream.WaveFormat, callback);
			}
			MmException.Try(result, "waveOutOpen");

			buffers = new WaveOutBuffer[NumberOfBuffers];
			playbackState = PlaybackState.Stopped;
			for (int n = 0; n < NumberOfBuffers; n++)
			{
				buffers[n] = new WaveOutBuffer(hWaveOut, bufferSize, waveStream, waveOutLock);
			}
		}