zdc253212956 发表于 2015-5-9 10:09:33

windows phone 7 通过麦克风录音,并且播放

//模拟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;
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.
页: [1]
查看完整版本: windows phone 7 通过麦克风录音,并且播放