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 7 通过麦克风录音,并且播放,布布扣,bubuko.com

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

上一篇:coreldraw怎么画正方体?CDR做素描几何体效果的方法


下一篇:[转载] 与WIN不同,linux替换文件夹会删除原文件夹下的全部内容!