您的位置:首页 > 编程语言 > C语言/C++

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

写得很随意 请各位多多指教
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++