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类播放,相当容易。但是如果想通过其他方式播放或在要到处音频数据,则需要将音频数据以文件的方式保存到独立存储中。关于录制音频的保存将在后续介绍。

转载于:https://my.oschina.net/eclipse88/blog/73680

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值