使用DirectShow播放AMR文件

         AMR全称Adaptive Multi-Rate,自适应多速率编码,主要用于移动设备的音频,压缩比比较大,但相对其他的压缩格式质量比较差,由于多用于人声,通话,效果还是很不错的。其具体的文件格式可以参考其他文章或RFC3267 RTP Payload Format for AMR and AMR-WB

       AMR文件多用于NOKIA手机,其特点是由于采用了自适应多速率编码,使得文件的尽寸变得很小,是WAV文件的1/10甚至更小。因此,如果程序中能够使用AMR文件代替WAV文件,在部署的时候就会占用更小的存储空间。当然,得在音频质量和文件大小两个因素上进行权衡。

      AMR文件不是Windows Mobile必须支持的文件格式,因此,要想在程序中对其进行解码播放有一定的困难。不过,由于AMR文件的广泛应用,大部分Windows Mobile手机的OEM厂商在出厂时都会选择第三方的解码器内置于手机当中,从而能够对其进行解码。因此,编程序来播放AMR文件是可行的。

     我们在手机上双击AMR格式的音频文件,可以发现Windows Media Player可以对其播放,那至少可以说明手机中已经包含了相应的解码器,因此,拿出对付多媒体文件最便捷的工具——DirectShow。

声明三个接口指针
 IGraphBuilder* m_pGraph;
 IMediaControl* m_pControl;
 IMediaEvent* m_pEvent;

获取接口地址
 HRESULT hr= CoInitialize(NULL);
 hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
  IID_IGraphBuilder, (void **)&m_pGraph);
 hr = m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pControl);
 hr = m_pGraph->QueryInterface(IID_IMediaEvent, (void **)&m_pEvent);

渲染文件至输出设备,播放语音
 hr = m_pGraph->RenderFile(_T("//存储卡//7001102.amr"), NULL);
 if (SUCCEEDED(hr))
  {
    hr = m_pControl->Run();
    if (SUCCEEDED(hr))
    {
       long evCode;
       m_pEvent->WaitForCompletion(INFINITE, &evCode);
       m_pControl->Stop();
    }
  }

释放接口实例
 if (m_pControl)
 {
  m_pControl->Release();
  m_pControl=NULL;
 }
 if (m_pEvent)
 {
  m_pEvent->Release();
  m_pEvent=NULL;
 }
 if (m_pGraph)
 {
  m_pGraph->Release();
  m_pGraph=NULL;
 }
CoUninitialize();

别忘了头文件和库文件:#include "dshow.h",strmiids.lib

    以上程序略去了对失败的处理部分,使用时可自行加上,另外,有些手机中带的解码器具有版权保护,虽然媒体播放器可以调用这些Filter播放AMR文件,但其他程序则无法调用,因此,本文提供的方法就不再适用了,请读者根据自己的需求考虑别的方案。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文斌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值