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文件,但其他程序则无法调用,因此,本文提供的方法就不再适用了,请读者根据自己的需求考虑别的方案。

使用DirectShow播放AMR文件相关推荐

  1. 网页上播放微信录音amr文件方案

    在最近的H5项目中,遇到了个棘手的问题. 项目中需要使用微信录音的JSSDK接口,录完音后上传到自己的服务器上.流程如图: 整个流程非常清晰,也十分顺利.但下载到网站服务器上的文件时amr格式的音频文 ...

  2. java 播放amr_amr格式转mp3和直接播放amr格式的文件-sunziren

    原创文章,转载请注明出处! 前言: amr作为一种高压缩比的音频格式,受到很多客户的青睐.本文主要涉及两部分的内容,一是amr如何转为mp3格式,二是如何直接播放amr格式的文件. 1. 如何使用Ja ...

  3. HTML + js 播放amr音频文件

    将amr文件转化成base64字符串,用js转换成音频播放 js文件下载链接: https://pan.baidu.com/s/1kWsLOc3 密码: 2ca5 链接: https://pan.ba ...

  4. h5移动端播放amr格式的音频文件兼容安卓IOS

    基于amr.js和RecorderJs,最底部有线上demo代码 播放 AMR: var amr = new BenzAMRRecorder(); amr.initWithUrl('path/to/v ...

  5. Web端播放 .amr音频文件,企业微信会话存档语音文件

    前言:amr格式是微信上的语音格式,比如企业微信会话存档语音文件保存时就会遇到,由于html标签都不支持amr格式的语音文件,因此采用如下开源项目: https://github.com/BenzLe ...

  6. 直接播放amr格式文件的js工具:amrnb

    将微信录音下载到自己的服务器后,格式为amr格式,在浏览器中无法正常播放.经过一番查找,使用amrnb工具可以转码后播放. 可以使用网页直接播放amr格式文件,也可以将mp3文件编码为amr文件后再播 ...

  7. android播放amr音频文件格式,iOS 播放不了android的amr文件

    AMR AMR全称Adaptive Multi-Rate,自适应多速率编码,主要用于移动设备的音频(手机打电话),压缩比比较大,但相对其他的压缩格式质量比较差,由于多用于人声,通话,效果还是很不错的. ...

  8. c++ DirectShow播放任意格式的视频

    利用opencv只能处理.avi的视频,opencv之前的版本之前试过好像是只能处理.avi未压缩版本的视频,未压缩过的视频相当大,一个文件大概是几十个G.(这个不确定,因为之前用的压缩过的.avi的 ...

  9. C# Window Form解决播放amr格式音乐问题

    最近搞一个项目,需要获取微信端语音文件,下载之后发现是AMR格式的录音文件,这下把我搞晕了,C#中的4种播放模式不支持播放AMR,想到都觉得头痛,如何是好?最后找到的方案,其实也简单:windows ...

最新文章

  1. 【专访英特尔高级首席工程师戴金权】普通数据工程师,如何玩转深度学习?
  2. send和WSASend区别
  3. java切割文件_Java如何将大文件切割成小文件
  4. (转)生产者/消费者问题的多种Java实现方式 (待整理)
  5. CodeForces - 1543D1 RPD and Rap Sheet (Easy Version)(异或+交互)
  6. 【最全解析】1050 螺旋矩阵 (25分)
  7. KeyMob应用开发者服务平台帮助开发者推广和盈利
  8. 学python分析双色球_我通过使用Python分析了80多个工作拒绝而学到的东西
  9. Android 使用View绘制文字(DrawText)技术总结
  10. 本体论:Gene Ontology (基因本体)
  11. 计算机电脑怎么开热点,怎么在电脑上开热点?电脑开热点的两种方法介绍
  12. 爬虫--Scrapy之Downloader Middleware
  13. 蓝侠==la*uan,破解中国共享软件联盟著名灌水专家“蓝侠””
  14. 阿里巴巴CTO行癫:阿里双11是世界互联网技术的超级工程
  15. 戴蒙德对新冠疫情等的分析与看法笔记
  16. try、catch、finally 用法总结
  17. 【详细】国内网站备案流程与步骤
  18. Java项目:智能点餐推荐系统(java+SSM+JSP+BootStrap+Mysql)
  19. 中企海外周报 | 海尔俄罗斯洗衣机互联工厂开业;奥克斯建造泰国智能生产基地...
  20. 安卓开发 输入单词表,点击读出单词 TextToSpeech

热门文章

  1. 2013年搜索引擎盘点,爱恨交加
  2. 《2012年中国移动信息化成果汇编》慧点科技篇
  3. 给初学者看的,笔记本术语解释
  4. 常量表达式值 constexpr
  5. 如何高效使用SQLite .net (C#)
  6. 基于docker的storm集群搭建
  7. i7 13700kf和i7 13700k区别
  8. 01 理解Django框架下MTV模式(1)
  9. python量化交易策略实例_用 Python 实现你的量化交易策略
  10. python queryset_django 中QuerySet特性功能详解