zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    Oracle解除死锁
    观察者模式
    观察者模式
    第一个go程序
    第一个go程序
    Jersey处理表单Post信息
    Jersey处理表单Post信息
    JS获取操作系统及浏览器信息
    JS获取操作系统及浏览器信息
    Linux常用命令
  • 原文地址:https://www.cnblogs.com/qingci/p/2218901.html
Copyright © 2011-2022 走看看