Esempio n. 1
0
		internal void Connect(WaveInterop.WaveCallback callback)
		{
			if (Strategy == WaveCallbackStrategy.NewWindow)
			{
				waveOutWindow = new WaveWindow(callback);
				waveOutWindow.CreateControl();
				Handle = waveOutWindow.Handle;
			}
			else if (Strategy == WaveCallbackStrategy.ExistingWindow)
			{
				waveOutWindowNative = new WaveWindowNative(callback);
				waveOutWindowNative.AssignHandle(Handle);
			}
		}
Esempio n. 2
0
		internal MmResult WaveOutOpen(out IntPtr waveOutHandle, int deviceNumber, WaveFormat waveFormat,
		                              WaveInterop.WaveCallback callback)
		{
			MmResult result;
			if (Strategy == WaveCallbackStrategy.FunctionCallback)
			{
				result = WaveInterop.waveOutOpen(out waveOutHandle, (IntPtr) deviceNumber, waveFormat, callback, IntPtr.Zero,
				                                 WaveInterop.CallbackFunction);
			}
			else
			{
				result = WaveInterop.waveOutOpenWindow(out waveOutHandle, (IntPtr) deviceNumber, waveFormat, Handle, IntPtr.Zero,
				                                       WaveInterop.CallbackWindow);
			}
			return result;
		}
Esempio n. 3
0
		public WaveWindow(WaveInterop.WaveCallback waveCallback)
		{
			this.waveCallback = waveCallback;
		}
Esempio n. 4
0
		// made non-static so that playing can be stopped here
		private void Callback(IntPtr hWaveOut, WaveInterop.WaveMessage uMsg, IntPtr dwUser, WaveHeader wavhdr,
		                      IntPtr dwReserved)
		{
			if (uMsg == WaveInterop.WaveMessage.WaveOutDone)
			{
				// check that we're not here through pressing stop
				var hBuffer = (GCHandle) wavhdr.userData;
				var buffer = (WaveOutBuffer) hBuffer.Target;

				lock (actionQueue)
				{
					actionQueue.Enqueue(new WaveOutAction(WaveOutFunction.BufferDone, buffer));
					workAvailable.Set();
				}

				// n.b. this was wrapped in an exception handler, but bug should be fixed now
			}
		}
Esempio n. 5
0
		/// <summary>
		/// Called when we get a new buffer of recorded data
		/// </summary>
		private void Callback(IntPtr waveInHandle, WaveInterop.WaveMessage message, IntPtr userData, WaveHeader waveHeader,
		                      IntPtr reserved)
		{
			if (message == WaveInterop.WaveMessage.WaveInData)
			{
				var hBuffer = (GCHandle) waveHeader.userData;
				var buffer = (WaveInBuffer) hBuffer.Target;

				length += buffer.BytesRecorded;
				if (DataAvailable != null)
				{
					DataAvailable(this, new WaveInEventArgs(buffer.Data, buffer.BytesRecorded));
				}
				if (recording)
				{
					buffer.Reuse();
				}
				else
				{
					if (RecordingStopped != null)
					{
						RecordingStopped(this, EventArgs.Empty);
					}
				}
			}
		}
Esempio n. 6
0
		// made non-static so that playing can be stopped here
		private void Callback(IntPtr hWaveOut, WaveInterop.WaveMessage uMsg, IntPtr dwInstance, WaveHeader wavhdr,
		                      IntPtr dwReserved)
		{
			if (uMsg == WaveInterop.WaveMessage.WaveOutDone)
			{
				var hBuffer = (GCHandle) wavhdr.userData;
				var buffer = (WaveOutBuffer) hBuffer.Target;
				// check that we're not here through pressing stop
				if (PlaybackState == PlaybackState.Playing)
				{
					if (!buffer.OnDone())
					{
						playbackState = PlaybackState.Stopped;
						RaisePlaybackStoppedEvent();
					}
				}

				// n.b. this was wrapped in an exception handler, but bug should be fixed now
			}
		}