//开始录制 private void btStart_Click(object sender, RoutedEventArgs e) { audioStream = new MemoryStream(); microphone.BufferDuration = TimeSpan.FromMilliseconds(1000); microphoneBuffer = new byte[microphone.GetSampleSizeInBytes(microphone.BufferDuration)]; microphone.BufferReady += microphoneBuffer_BufferReady; microphone.Start(); blnRecording = true; } //停止录制 private void btStop_Click(object sender, RoutedEventArgs e) { if (blnRecording) { microphone.Stop(); microphone.BufferReady -= microphoneBuffer_BufferReady; audioStream.Flush(); recording = audioStream.ToArray(); audioStream.Dispose(); //播放声音 var effect = new SoundEffect(recording, microphone.SampleRate, AudioChannels.Mono); effect.Play(); } btRecording.Visibility = Visibility.Visible; btStart.Visibility = Visibility.Collapsed; btStop.Visibility = Visibility.Collapsed; } void microphoneBuffer_BufferReady(object sender, EventArgs e) { microphone.GetData(microphoneBuffer); audioStream.Write(microphoneBuffer, 0, microphoneBuffer.Length); }
1、在Silverlight应用程序中使用XNA Game Studio,需要模拟Game循环来使我们的程序能够正常的实施。
2、定义下面的App.class XNAAsyncDispatcher类并将它添加到App()构造函数的下一行。ApplicationLifetimeObjects.Add(new XNAAsyncDispatcher(TimeSpan.FromMilliseconds(50)));
定义类XNAAsyncDispatcher
public class XNAAsyncDispatcher : IApplicationService { private DispatcherTimer _frameworkDispatcherTimer; public XNAAsyncDispatcher(System.TimeSpan dispatchInterval) { FrameworkDispatcher.Update(); this._frameworkDispatcherTimer = new DispatcherTimer(); this._frameworkDispatcherTimer.Tick += new EventHandler(frameworkDispatcherTimer_Tick); this._frameworkDispatcherTimer.Interval = dispatchInterval; } void IApplicationService.StartService(ApplicationServiceContext context) { this._frameworkDispatcherTimer.Start(); } void IApplicationService.StopService() { this._frameworkDispatcherTimer.Stop(); } void frameworkDispatcherTimer_Tick(object sender, EventArgs e) { FrameworkDispatcher.Update(); } }