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

原文: 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[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)