使用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文件,但其他程序则无法调用,因此,本文提供的方法就不再适用了,请读者根据自己的需求考虑别的方案。
使用DirectShow播放AMR文件相关推荐
- 网页上播放微信录音amr文件方案
在最近的H5项目中,遇到了个棘手的问题. 项目中需要使用微信录音的JSSDK接口,录完音后上传到自己的服务器上.流程如图: 整个流程非常清晰,也十分顺利.但下载到网站服务器上的文件时amr格式的音频文 ...
- java 播放amr_amr格式转mp3和直接播放amr格式的文件-sunziren
原创文章,转载请注明出处! 前言: amr作为一种高压缩比的音频格式,受到很多客户的青睐.本文主要涉及两部分的内容,一是amr如何转为mp3格式,二是如何直接播放amr格式的文件. 1. 如何使用Ja ...
- HTML + js 播放amr音频文件
将amr文件转化成base64字符串,用js转换成音频播放 js文件下载链接: https://pan.baidu.com/s/1kWsLOc3 密码: 2ca5 链接: https://pan.ba ...
- h5移动端播放amr格式的音频文件兼容安卓IOS
基于amr.js和RecorderJs,最底部有线上demo代码 播放 AMR: var amr = new BenzAMRRecorder(); amr.initWithUrl('path/to/v ...
- Web端播放 .amr音频文件,企业微信会话存档语音文件
前言:amr格式是微信上的语音格式,比如企业微信会话存档语音文件保存时就会遇到,由于html标签都不支持amr格式的语音文件,因此采用如下开源项目: https://github.com/BenzLe ...
- 直接播放amr格式文件的js工具:amrnb
将微信录音下载到自己的服务器后,格式为amr格式,在浏览器中无法正常播放.经过一番查找,使用amrnb工具可以转码后播放. 可以使用网页直接播放amr格式文件,也可以将mp3文件编码为amr文件后再播 ...
- android播放amr音频文件格式,iOS 播放不了android的amr文件
AMR AMR全称Adaptive Multi-Rate,自适应多速率编码,主要用于移动设备的音频(手机打电话),压缩比比较大,但相对其他的压缩格式质量比较差,由于多用于人声,通话,效果还是很不错的. ...
- c++ DirectShow播放任意格式的视频
利用opencv只能处理.avi的视频,opencv之前的版本之前试过好像是只能处理.avi未压缩版本的视频,未压缩过的视频相当大,一个文件大概是几十个G.(这个不确定,因为之前用的压缩过的.avi的 ...
- C# Window Form解决播放amr格式音乐问题
最近搞一个项目,需要获取微信端语音文件,下载之后发现是AMR格式的录音文件,这下把我搞晕了,C#中的4种播放模式不支持播放AMR,想到都觉得头痛,如何是好?最后找到的方案,其实也简单:windows ...
最新文章
- 【专访英特尔高级首席工程师戴金权】普通数据工程师,如何玩转深度学习?
- send和WSASend区别
- java切割文件_Java如何将大文件切割成小文件
- (转)生产者/消费者问题的多种Java实现方式 (待整理)
- CodeForces - 1543D1 RPD and Rap Sheet (Easy Version)(异或+交互)
- 【最全解析】1050 螺旋矩阵 (25分)
- KeyMob应用开发者服务平台帮助开发者推广和盈利
- 学python分析双色球_我通过使用Python分析了80多个工作拒绝而学到的东西
- Android 使用View绘制文字(DrawText)技术总结
- 本体论:Gene Ontology (基因本体)
- 计算机电脑怎么开热点,怎么在电脑上开热点?电脑开热点的两种方法介绍
- 爬虫--Scrapy之Downloader Middleware
- 蓝侠==la*uan,破解中国共享软件联盟著名灌水专家“蓝侠””
- 阿里巴巴CTO行癫:阿里双11是世界互联网技术的超级工程
- 戴蒙德对新冠疫情等的分析与看法笔记
- try、catch、finally 用法总结
- 【详细】国内网站备案流程与步骤
- Java项目:智能点餐推荐系统(java+SSM+JSP+BootStrap+Mysql)
- 中企海外周报 | 海尔俄罗斯洗衣机互联工厂开业;奥克斯建造泰国智能生产基地...
- 安卓开发 输入单词表,点击读出单词 TextToSpeech