|
|
//模拟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