用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;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值