用c++获取音频文件的信息 达到异步播放的效果(2)
2016-12-28 14:13
316 查看
接着昨天的播放说
昨天的播放只能精确到秒级 在测试了之后 发现 要精确到毫秒(至少是100毫秒)的级别才能让人听不出来有问题
所以研究了下 发现可以用文件大小 / 比特率 * 8 的方式来获取到比较精确的播放时长(我自己的需求是控制到100ms)
int bps = 0, timeLength;
float size = 0.0, fBase = 0.1;
int base = 1, index = 0;
string bpsValue = ptrFolder->GetDetailsOf(_variant_t((IDispatch *)ptrItem), 28);
string fileSize = ptrFolder->GetDetailsOf(_variant_t((IDispatch *)ptrItem), 1);
for (int i = bpsValue.size() - 1; i >= 0; i--)
{
char bpsChar = bpsValue[i];
if (bpsChar >= '0' && '9' >= bpsChar)
{
bps = bps + (bpsChar - '0') * base;
base *= 10;
}
}
base = 1;
//先算小数 再算整数
//有小数的情况
index = fileSize.find_first_of('.');
if (index != -1)
{
for (int i = index + 1; i < fileSize.size(); i++)
{
char sizeChar = fileSize[i];
if (sizeChar >= '0' && '9' >= sizeChar)
{
size = size + (sizeChar - '0') * fBase;
fBase *= 0.1;
}
}
}
else
{
index = fileSize.size();
}
for (int i = index - 1; i >= 0; i--)
{
char sizeChar = fileSize[i];
if (sizeChar >= '0' && '9' >= sizeChar)
{
size = size + (sizeChar - '0') * base;
base *= 10;
}
}
//取100MS单位的精确度
timeLength = size / bps * 8 * 10;
timeLength = timeLength * 100;
写得很随意 请各位多多指教
昨天的播放只能精确到秒级 在测试了之后 发现 要精确到毫秒(至少是100毫秒)的级别才能让人听不出来有问题
所以研究了下 发现可以用文件大小 / 比特率 * 8 的方式来获取到比较精确的播放时长(我自己的需求是控制到100ms)
int bps = 0, timeLength;
float size = 0.0, fBase = 0.1;
int base = 1, index = 0;
string bpsValue = ptrFolder->GetDetailsOf(_variant_t((IDispatch *)ptrItem), 28);
string fileSize = ptrFolder->GetDetailsOf(_variant_t((IDispatch *)ptrItem), 1);
for (int i = bpsValue.size() - 1; i >= 0; i--)
{
char bpsChar = bpsValue[i];
if (bpsChar >= '0' && '9' >= bpsChar)
{
bps = bps + (bpsChar - '0') * base;
base *= 10;
}
}
base = 1;
//先算小数 再算整数
//有小数的情况
index = fileSize.find_first_of('.');
if (index != -1)
{
for (int i = index + 1; i < fileSize.size(); i++)
{
char sizeChar = fileSize[i];
if (sizeChar >= '0' && '9' >= sizeChar)
{
size = size + (sizeChar - '0') * fBase;
fBase *= 0.1;
}
}
}
else
{
index = fileSize.size();
}
for (int i = index - 1; i >= 0; i--)
{
char sizeChar = fileSize[i];
if (sizeChar >= '0' && '9' >= sizeChar)
{
size = size + (sizeChar - '0') * base;
base *= 10;
}
}
//取100MS单位的精确度
timeLength = size / bps * 8 * 10;
timeLength = timeLength * 100;
写得很随意 请各位多多指教
相关文章推荐
- 用c++获取音频文件的信息 达到异步播放的效果(1)
- 用java获取mp3文件播放时长和tag信息
- C++获取文件大小等信息
- IOS开发——获取本地音频文件(属性/信息)
- 【Android开发经验】如何获取媒体库中所有音频文件信息,并在文件增删后及时更新媒体库(转)
- 【C#获取音频文件的播放时间】
- 用java获取mp3文件播放时长和tag信息
- IOS MPMoviePlayerViewController 获取当前音频文件播放时间点
- 实现php获取mp3文件元信息如播放时间歌曲作者等
- C#获取音频文件(MP3等)播放时间长度的几种方式
- 【Android开发经验】如何获取媒体库中所有音频文件信息,并在文件增删后及时更新媒体库
- C#获取 Flv视频文件播放时间长度等信息
- C++获取文件夹和文件信息
- 音频文件播放时间的获取
- C++获取flv视频文件的播放时间
- 最近想做一个音乐播放器,苦于不知道怎么获取音频文件的tag信息,查了很多资料,终于稍微有点眉目
- 获取音频文件的ID3信息,歌手,专辑,专辑图片等信息
- 如何从mp3,wma等音频文件中获取歌曲信息
- ajax实现异步请求,不跳转页面的情况下,达到检验用户名等信息是否效果的功能!
- 利用MediaPlayer 获取一个音频或者视频文件的播放时长