Windows Phone 录制音频
Windows Phone 提供的访问麦克风的类为 Microsoft.Xna.Framework.Audio.Microphone ,该类属于 XNA Framework , 若要在 Silverlight 中访问 Windows Phone 麦克风,同样需要使用此类。所以需要添加引用 Microsoft.Xna.Framework。
1.声明局部变量,获取麦克风单例。
//麦克单例
private Microphone microphone = Microphone.Default;
//每次捕获音频缓存
private byte[] buf;
//音频流存储区
private MemoryStream audioStream;
2.由于在XNA中每33fp就会更新画面一次,但在Silverlight Application并没有这样的机制,为了确保录音的功能持续的更新状态与进行撷取动作,因此,需要透过指定一个定期执行 FrameworkDispatcher.Update() 的事件。
//设置定时器
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(33);
timer.Tick += delegate { try { FrameworkDispatcher.Update(); } catch { } };
timer.Start();
3.设置录音相关信息,启动录音。
//设置1秒的缓存区,没获取1秒音频就会调用一次BufferReady事件
microphone.BufferDuration = TimeSpan.FromMilliseconds(1000);
//分配1秒音频所需要的缓存区
buf = new byte[microphone.GetSampleSizeInBytes(microphone.BufferDuration)];
audioStream = new MemoryStream();
//BufferReady事件
microphone.BufferReady += new EventHandler<EventArgs>(microphone_BufferReady);
//启动录音
microphone.Start();
3.实现 BufferReady 事件处理程序。该处理程序将麦克风的数据复制到缓冲区中并将该缓冲区写入一个流。
void microphone_BufferReady(object sender, EventArgs e)
{
//将麦克风的数据复制到缓冲区中
microphone.GetData(buf);
//将该缓冲区写入一个流
audioStream.Write(buf, 0, buf.Length);
}
4.停止录音
//停止录音
microphone.Stop();
microphone.BufferReady -= new EventHandler<EventArgs>(microphone_BufferReady);
audioStream.Flush();
//将数据流转换为byte,recording中即为音频数据
byte[] recording = audioStream.ToArray();
audioStream.Dispose();
5.播放录音
//播放录音
SoundEffect sound = new SoundEffect(audioStream.ToArray(), microphone.SampleRate, AudioChannels.Mono);
sound.Play();
通过录制的byte字节流数据,可以通过SoundEffect类播放,相当容易。但是如果想通过其他方式播放或在要到处音频数据,则需要将音频数据以文件的方式保存到独立存储中。关于录制音频的保存将在后续介绍。
下一篇: 穿过一抹绿色,聆听六月心声
推荐阅读
-
Windows Phone 实用开发技巧(29):动态绑定Pivot
-
Windows Phone实用开发技巧(32):照片角度处理
-
Windows Phone开发之String与StringBuilder
-
设计windows phone页面主题
-
Adobe Audition怎么多人录制音频?
-
Adobe Audition怎么多人录制音频?
-
Audition CC 2018怎么录音? Audition录制音频的教程
-
iOS使用音频处理框架The Amazing Audio Engine实现音频录制播放
-
windows phone 配置PhoneGap开发环境(wp7 phonegap 开发环境)图文教程
-
MovieStudio怎么录制音频?