|
//模拟XNA的框架(凡是在wp7中应用xna的都必须先模拟此类) |
public
class XNAAsyncDispatcher : IApplicationService { private
DispatcherTimer frameworkDispatcherTimer; public
XNAAsyncDispatcher(TimeSpan dispatchInterval) { 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(); } } |
在App 构造函数里写 this .ApplicationLifetimeObjects.Add( new
XNAAsyncDispatcher(TimeSpan.FromMilliseconds(50))); 当程序激动时就开始模拟XNA GameTimer |
//后代代码 using
System; using
System.Collections.Generic; using
System.Linq; using
System.Net; using
System.Windows; using
System.Windows.Controls; using
System.Windows.Documents; using
System.Windows.Input; using
System.Windows.Media; using
System.Windows.Media.Animation; using
System.Windows.Shapes; using
Microsoft.Phone.Controls; using
System.IO; using
Microsoft.Xna.Framework.Audio; namespace
Wp7_录音 { public
partial class MainPage : PhoneApplicationPage { // Constructor public
MainPage() { InitializeComponent(); mic.BufferReady += Default_BufferReady; SoundEffect.MasterVolume = 1.0f; } MemoryStream ms; Microphone mic = Microphone.Default; // Wire up an event handler so we can empty the buffer when full // Crank up the volume to max // When the buffer‘s ready we need to empty it // We‘ll copy to a MemoryStream // We could push into IsolatedStorage etc void
Default_BufferReady( object
sender, EventArgs e) { byte [] buffer = new
byte [1024]; int
bytesRead = 0; while
((bytesRead = mic.GetData(buffer, 0, buffer.Length)) > 0) ms.Write(buffer, 0, bytesRead); } // The user wants to start recording. If we‘ve already made // a recording, close that MemoryStream and create a new one. // Start recording on the default device. private
void start_Click( object
sender, RoutedEventArgs e) { if
(ms != null ) ms.Close(); ms = new
MemoryStream(); mic.Start(); } // The user wants to stop recording. Checks the microphone // is stopped. Reset the MemoryStream position. // Play back the recording. Pitch is based on slider value private
void stop_Click( object
sender, RoutedEventArgs e) { if
(mic.State != MicrophoneState.Stopped) mic.Stop(); ms.Position = 0; SoundEffect se = new
SoundEffect(ms.ToArray(), mic.SampleRate, AudioChannels.Mono); //se.Play(1.0f, (float)slider1.Value, 0.0f); se.Play(); } } } |
本实例UI就两个Button 一个start 一个stop, 还有一个滑动条 Silder.
windows phone 7 通过麦克风录音,并且播放,布布扣,bubuko.com
原文:http://www.cnblogs.com/lonelyxmas/p/3581466.html