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.
作者:SIR@君
Email:sirjun@foxmail.com
云购:注册立送五元红包,1元也能抢购IPhone啦!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述