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

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) 
            void IApplicationService.StopService()
            void frameworkDispatcherTimer_Tick(object sender, EventArgs e) 
在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()
            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 = new MemoryStream();              
        // 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)                
            ms.Position = 0;               
            SoundEffect se =  new SoundEffect(ms.ToArray(), mic.SampleRate, AudioChannels.Mono);         
            //se.Play(1.0f, (float)slider1.Value, 0.0f);    

本实例UI就两个Button  一个start 一个stop, 还有一个滑动条  Silder.

posted @ 2011-10-20 14:07 Sir。 阅读(...) 评论(...) 编辑 收藏