1. 程式人生 > >用c++獲取音訊檔案的資訊 達到非同步播放的效果(2)

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

寫得很隨意 請各位多多指教