如何在WP7上录制音频

15 篇文章 0 订阅
14 篇文章 0 订阅
 
这篇文章展示了如何在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();
   }
}

 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值