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