WP7应用程序中添加麦克风支持
通过选择“文件 | 新建项目”菜单命令来创建一个新项目。
将显示“新建项目”窗口。展开“Visual C#”模板,然后选择“Silverlight for Windows Phone”模板。
选择“Windows Phone 应用程序”模板。填写所需的项目名称。
在“解决方案资源管理器”中,右键单击“引用”,然后选择“添加引用...”。
从 .NET 组件列表中选择 Microsoft.Xna.Framework,然后单击“确定”按钮。
如果您看到一个对话框,该对话框警告有关向 Silverlight 程序集添加引用的信息,请单击“是”。
向 MainPage.xaml.cs 文件的顶部添加以下 using 语句:
using System.IO; using System.Windows.Threading; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio;
在 MainPage.xaml.cs 中,将变量声明为 MainPage 类的全局成员:
public partial class MainPage : PhoneApplicationPage {Microphone microphone = Microphone.Default;byte[] buffer;MemoryStream stream = new MemoryStream();SoundEffect sound; // ...
由于我们在 Silverlight 应用程序中使用 XNA Game Studio,因此需要模拟 XNA Game Studio 在正常情况下为我们实现的游戏循环。将以下代码添加到 MainPage 类构造函数中对 InitializeComponent 的调用之后,以模拟 XNA Game Studio 游戏循环:
// Timer to simulate the XNA Game Studio game loop (Microphone is from XNA Game Studio) DispatcherTimer dt = new DispatcherTimer(); dt.Interval = TimeSpan.FromMilliseconds(50); dt.Tick += delegate { try { FrameworkDispatcher.Update(); } catch { } }; dt.Start();
向 MainPage 类中添加一个新的 Microphone.BufferReady 事件处理程序:
microphone.BufferReady += new EventHandler<EventArgs>(microphone_BufferReady);
变量声明以及完成的构造函数应如下所示:
public partial class MainPage : PhoneApplicationPage {Microphone microphone = Microphone.Default;byte[] buffer;MemoryStream stream = new MemoryStream();SoundEffect sound;// Constructorpublic MainPage(){InitializeComponent();// Timer to simulate the XNA Game Studio game loop (Microphone is from XNA Game Studio)DispatcherTimer dt = new DispatcherTimer();dt.Interval = TimeSpan.FromMilliseconds(33);dt.Tick += delegate { try { FrameworkDispatcher.Update(); } catch { } };dt.Start();microphone.BufferReady += new EventHandler<EventArgs>(microphone_BufferReady);} ...
实现 BufferReady 事件处理程序。该处理程序将麦克风的数据复制到缓冲区中并将该缓冲区写入一个流。
void microphone_BufferReady(object sender, EventArgs e) {microphone.GetData(buffer);stream.Write(buffer, 0, buffer.Length); }
添加用户开始从麦克风捕获音频的方法。录制按钮 Click 事件的该事件处理程序分配一个足够大的缓冲区,可包含 1 秒钟的音频,并通过调用 Microphone.Start 开始收集该数据。
private void recordButton_Click(object sender, RoutedEventArgs e) {microphone.BufferDuration = TimeSpan.FromMilliseconds(1000);buffer = new byte[microphone.GetSampleSizeInBytes(microphone.BufferDuration)];microphone.Start(); }
添加用户停止从麦克风捕获音频的方法。停止按钮 Click 事件的该事件处理程序检查麦克风当前是否正在收集输入。如果是,则代码会调用 Microphone.Stop 结束录制。
private void stopButton_Click(object sender, RoutedEventArgs e) {if (microphone.State == MicrophoneState.Started){microphone.Stop();} }
添加用户播放捕获的音频的方法。播放按钮 Click 事件的该事件处理程序使用其中保存音频数据的流分配一个新的 SoundEffect 对象。然后,该对象调用 SoundEffect.Play 方法。
private void playButton_Click(object sender, RoutedEventArgs e) {sound = new SoundEffect(stream.ToArray(), microphone.SampleRate, AudioChannels.Mono);sound.Play(); }
15、存储音频
using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream stream = storage.CreateFile(memoInfo.FileName))
{
// Write buffers from collection
foreach (byte[] buffer in memoBufferCollection)
stream.Write(buffer, 0, buffer.Length);
// Write partial buffer
stream.Write(extraBuffer, 0, extraBytes);
}
但是在多个页面page中都要用到microphone时,会出现第二个页面录音不成功的现象
我遇到的情况是录到的stream总为空;
语音室microphon是共享的,第一个页面中
microphone.BufferReady += new EventHandler<EventArgs>(microphone_BufferReady);
会对第二个页面产生影响,所有从第一个页面中将microphone.Stop()时要解除该绑定事件
microphone.BufferReady -= new EventHandler<EventArgs>(microphone_BufferReady);
WP7应用程序中添加麦克风支持相关推荐
- Abp Vnext应用程序项目中添加docker支持的小结
文章目录 介绍 具体步骤 1.创建项目 2.添加docker支持 3.调整 4.运行实例 总结 介绍 abp vnext 里面的只有 module 项目里面是自动添加 docker 支持的,因为其是面 ...
- MFC应用程序中添加控制台窗口
在MFC程序中输出调试信息的方法有两种,一种是使用TRACE宏,可以向Output窗口输出调试信息:另一种是用MessageBox,弹出消息框来输出调试信息,但会影响程序的运行. 其实有一种方法可以更 ...
- chrome麦克风权限_如何在Chrome扩展程序中处理麦克风输入权限和语音识别
chrome麦克风权限 by Palash Taneja 由Palash Taneja 如何在Chrome扩展程序中处理麦克风输入权限和语音识别 (How to handle mic input pe ...
- MFC应用程序中添加控制台窗口---debug输出窗口
在MFC程序中输出调试信息的方法有两种,一种是使用TRACE宏,可以向Output窗口输出调试信息:另一种是用MessageBox,弹出消息框来输出调试信息,但会影响程序的运行. 其实有一种方法可以更 ...
- GUI程序中添加控制台调试
本文转自:http://blog.csdn.net/pkueecser/article/details/7469761 在MFC程序中输出调试信息的方法有两种,一种是使用TRACE宏,可以向Outpu ...
- 在C++程序中添加逻辑流程控制
在C++ 程序中添加逻辑流程控制 问题的引出 在计算机程序中,除了常见的执行流程控制,还有逻辑流程控制:有时,执行流程即为逻辑流程,但在大多数情况下还是有所区别的,例如,假定有一个W ...
- matlab 集体注释,向程序中添加注释
- MATLAB Simulink
- MathWorks 中国
向程序中添加注释 编写代码时,最好添加描述代码的注释.注释有助于其他人员理解您的代码,并且有助您在稍后返回代码时再度记起.在程序开发和测试期间,您还可以使用注释来注释掉任何不需要运行的代码. 在实时编 ...
- java怎么加定时器_JAVA WEB程序中添加定时器
JAVA WEB程序中添加定时器 //这是我的定时器类,用来定时执行某段任务: package com.my.time; import java.text.ParseException; import ...
- 如何在RCP程序中添加一个banner栏
前言:这段时间还算比较空闲,我准备把过去做过的有些形形色色,甚至有些奇怪的研究总结一下,也许刚好有人用的着也不一定,不枉为之抓耳挠腮的时光和浪费的电力.以前有个客户提出要在RCP程序中添加一个bann ...
最新文章
- plsql(轻量版)_触发器
- python历史以及基础知识
- caffe学习系列(1):图像数据转换成db(leveldb/lmdb)文件
- 如何进行筛选数组(源码解析)
- 基于PCA的特征提取
- activemq中怎么知道推送消息是否成功_消息队列面试,你能顶得住面试官这波10大连环炮的攻势吗?...
- 《沃顿商学院谈判课》读书笔记
- 苹果笔记本能玩英雄联盟吗_英雄联盟手游要上线了,王者荣耀还会有人玩吗
- 自定义PPT背景的大小
- 福禄克CFP2-100-Q与OFP2-100-Q区别
- 三国群英传服务器维护是几点,20191112维护公告
- 社保到底是多交好,还是少交好?
- 小型OSPF路由网络的搭建
- 批量给pdf添加目录(最完整详细方法)
- (Adventure项目)自行车业务数据分析报告(三)
- 销售人员如何利用好企业微信crm?
- 转载 解密蓝牙mesh系列 | 第五篇 【好友(Friend)和低功耗节点(LPN)】【友谊(Friendship)参数】【友谊建立】【友谊(Friendship)消息传送】【安全性】【友谊终止】
- 从键盘输入若干行文本,每行以回车结束,以 ctrl+z 作为输入结束符,统计其行数
- python socket recv非阻塞_socket非阻塞recv大坑
- 【蓝桥杯集训100题】scratch猫鼠大战 蓝桥杯scratch比赛专项预测编程题 集训模拟练习题第11题
热门文章
- 西门子S7-1200小练手之电机星三角启动
- c语言随机数教学成果与反思,教学成果报告-渤海大学.pdf
- 计算机网络--应用层(2)P2P应用
- html移动端语音波纹,html5 +css3 点击后水波纹扩散效果 兼容移动端
- [POI2013] MOR-Tales of seafaring
- 智邦国际销售管理系统对企业有哪些作用?
- Linux云计算之web 平台搭建(LAMP-CtenOS 6)
- 淘宝数据分析:利用数据细分目标客户群
- 文献阅读笔记LUCC
- 【JavaWeb之旅二】MySQL数据库之SQL语句中的DML语句与DQL语句