读书人

怎么在WP7下录制音频

发布时间: 2012-11-08 08:48:11 作者: rapoo

如何在WP7上录制音频
怎么在WP7下录制音频 怎么在WP7下录制音频怎么在WP7下录制音频这篇文章展示了如何在Windows Phone 7上录制音频。
简介
通过windows phone设备的麦克风来录制音频是非常容易的。Microsoft.Xna.Framework.Audio.Microphone支持这项功能:
Start-从话筒中捕捉音频
Stop-停止从话筒中捕捉音频
GetData-将数据从话筒中转换到缓冲区中
下面的示例代码假设在应用程序网页上有三个按钮- start, stop和 play。
参考和初始化
在Silverlight应用程序中使用话筒,我们提到了Microsoft.Xna.Framework,我们将它们加入到应用程序网页中来实施录制。
using System.IO;using System.Windows.Threading;using Microsoft.Xna.Framework;using Microsoft.Xna.Framework.Audio;
并声明下面这些变量:
Microphone microphone = Microphone.Default; byte[] buffer; MemoryStream stream = new MemoryStream(); SoundEffect sound;
开始录制
下面这些代码显示了如何使用话筒来录制音频:
private void recordButton_Click(object sender, RoutedEventArgs e){ microphone.BufferDuration = TimeSpan.FromMilliseconds(1000); buffer = new byte[microphone.GetSampleSizeInBytes(microphone.BufferDuration)]; microphone.Start();}
停止录制
停止录制音频的代码:
private void stopButton_Click(object sender, RoutedEventArgs e){ if (microphone.State == MicrophoneState.Started) { microphone.Stop(); }}
捕获缓存区中的记录
为了捕获缓存区中的记录,我们需要在页面中的构造函数里添加事件处理程序。
microphone.BufferReady += new EventHandler<EventArgs>(microphone_BufferReady);
并使用下面的event handler 代码
void microphone_BufferReady(object sender, EventArgs e){ microphone.GetData(buffer); stream.Write(buffer, 0, buffer.Length);}
播放录制的音频
在录制完成后进行播放
private void playButton_Click(object sender, RoutedEventArgs e){ sound = new SoundEffect(stream.ToArray(), microphone.SampleRate, AudioChannels.Mono); sound.Play();}
最后但并非不重要
为了使我们上述所介绍的代码能够运行,我们需要做更多的工作,当我们在Silverlight应用程序中使用XNA Game Studio,我们就需要模拟Game循环来使我们的程序能够正常的实施。定义下面的App.class XNAAsyncDispatcher类并将它添加到App()构造函数的下一行。
ApplicationLifetimeObjects.Add(new XNAAsyncDispatcher(TimeSpan.FromMilliseconds(50))); public class XNAAsyncDispatcher : IApplicationService{ private DispatcherTimer _frameworkDispatcherTimer; public XNAAsyncDispatcher(System.TimeSpan dispatchInterval) { FrameworkDispatcher.Update(); this._frameworkDispatcherTimer = new DispatcherTimer(); this._frameworkDispatcherTimer.Tick += newEventHandler(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(); }}
怎么在WP7下录制音频 怎么在WP7下录制音频

读书人网 >移动开发

热点推荐