用c++获取音频文件的信息 达到异步播放的效果(1)
来源:互联网 发布:淘宝照片拍摄方法 编辑:程序博客网 时间:2024/06/05 15:22
这几个月加班都懵逼了 好久没有写博客了
这几天要做一个可即时打断的语音端 要想有暂停 续播这样的功能 我用的mciSendString 异步播放来实现打断的效果
其中想要获取音频文件的播放时长 找了好久才找到可以用的 哎 真是恼火 各种需求
连续加班三个月 哎 希望明年有个好去处 不过还好 至少遇到个好师傅
#include "parsePlayTime.h"
#import <Shell32.dll>
parsePlayTime::parsePlayTime()
{
//时长字符串中对应下标其代表的秒数
timeIndex[3] = 600;
timeIndex[4] = 60;
timeIndex[6] = 10;
timeIndex[7] = 1;
}
parsePlayTime::~parsePlayTime()
{
}
int parsePlayTime::parseVoicePlayTime(std::string filePath)
{
std::string fileName, dirName;
dirName = filePath.substr(0, filePath.find_last_of('\\') + 1).c_str();
fileName = filePath.substr(filePath.find_last_of('\\') + 1);
CoInitialize(NULL);
clock_t time;
Shell32::IShellDispatchPtr ptrShell;
ptrShell.CreateInstance(__uuidof(Shell32::Shell));
_variant_t var((short)Shell32::ssfRECENT);
//解析目录
Shell32::FolderPtr ptrFolder = ptrShell->NameSpace(dirName.c_str());
if (ptrFolder == NULL)
{
return -1;
}
//解析文件
Shell32::FolderItemPtr ptrItem = ptrFolder->ParseName(fileName.c_str());
if (ptrItem == NULL)
{
return -1;
}
std::string timeValue = ptrFolder->GetDetailsOf(_variant_t((IDispatch *)ptrItem), 27);
int timeLength = 0;
for (int i = timeValue.size() - 1; i >= 0; i--)
{
if (timeValue[i] >= '0' && timeValue[i] <= '9')
{
timeLength += (timeValue[i] - '0') * timeIndex[i];
}
}
ptrItem.Release();
ptrFolder.Release();
ptrShell.Release();
CoUninitialize();
//由于精度只能到秒 少于1S的都按1S算
timeLength > 0 ? timeLength : 1;
//最后要换算成毫秒
timeLength *= 1000;
return timeLength;
}
拿到的时长是字符串 又因为我们的音频文件最多几分钟 所以就随便写了个转换的代码
主要是拿播放时长的代码
代码也是借鉴了网上一位大神的 码完代码 找不到网站了 如果侵犯了您的权益 请联系我删除 先说声抱歉。
刚入门的小菜鸡 请各位多多指教
- 用c++获取音频文件的信息 达到异步播放的效果(1)
- 用c++获取音频文件的信息 达到异步播放的效果(2)
- 音频文件播放时间的获取
- 获取音频文件的ID3信息
- 【C#获取音频文件的播放时间】
- 获取手机的音频文件展示并播放
- Android 实现简单的音乐播放器效果(音频文件的三种存放)
- ajax实现异步请求,不跳转页面的情况下,达到检验用户名等信息是否效果的功能!
- iOS开发:获取一个视频、音频文件的播放时长
- AJAX实现异步提交登陆达到页面友好的效果
- java实现音频文件的播放
- 播放SDcard上面的音频文件
- unity播放加密的音频文件
- java 实现音频文件的播放
- 用低调达到高调追求的效果
- 用一个listview达到ScrollView的效果
- 最近想做一个音乐播放器,苦于不知道怎么获取音频文件的tag信息,查了很多资料,终于稍微有点眉目
- 简单的用 Microsoft.DirectX.DirectSound播放wave音频文件
- [SPOJ220]PHRASES - Relevant Phrases of Annihilation(后缀数组+二分)
- CSDN博客的开通,写在2016的年末。
- python 判断网络连通
- [Leetcode] Search for a Range
- Django创建简易博客
- 用c++获取音频文件的信息 达到异步播放的效果(1)
- magical record 用法和介绍
- C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信
- ArrayList 和 LinkedList 和Vector使用上有什么区别?实现上有什么区别?
- 以太坊go-ethereum客户端(三)两种全节点启动模式
- 数字信号处理
- Android Things简介:它真的来了!
- 对角矩阵
- Hadoop完全分布式环境搭建