用c++获取音频文件的信息 达到异步播放的效果(2)

接着昨天的播放说

昨天的播放只能精确到秒级 在测试了之后 发现 要精确到毫秒(至少是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;

写得很随意 请各位多多指教

猜你喜欢

转载自blog.csdn.net/u012414639/article/details/53907017