有没有办法确定音频文件的比特率是否可变,并通过LibTag提取sampleCount()?我需要找出原因,因为Qt QMediaPlayer类错误地计算了具有可变比特率的音频文件的持续时间,而纠正的唯一方法是发现音频是否具有可变比特率,并将长度除以sampleCount()持续时间。
由于文档TagLib有点混乱,我设法只创建了fileref
void MainWindow::playerOnMediaStatusChanged(QMediaPlayer::MediaStatus status)
{
if (status == QMediaPlayer::BufferedMedia) {
QString mediafile = playlist->currentMedia().canonicalUrl().toString();
TagLib::FileRef fr(reinterpret_cast<constwchar_t*>(mediafile.utf16()),true);
//…
}
}
但是我不知道如何发现音频是否具有可变的比特率及其sampleCount()
是的,我知道这是topic,但是与夏普语言有关
你能帮助我吗?
提前致谢
最佳答案
您需要使用TagLib::MPEG::File
才能访问XingHeader
。这是一个例子:
static void printXingHeader(const char *fileName)
{
TagLib::FileRef ref(fileName);
TagLib::MPEG::File *file = dynamic_cast<TagLib::MPEG::File *>(ref.file());
if(!file)
return;
TagLib::MPEG::Properties *properties = file->audioProperties();
const TagLib::MPEG::XingHeader *xingHeader = properties->xingHeader();
if(!xingHeader)
return;
std::cout << "total frames: " << xingHeader->totalFrames()
<< " total size: " << xingHeader->totalSize()
<< std::endl;
}
关于c++ - 如何使用TagLib-C++从MP3文件读取XingHeaders,VBRIHeaders和sampleCount,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39592116/