繁体   English   中英

我怎么知道音频文件的格式?

[英]How do I know the format of audio file?

我想制作一个音乐播放器,并且要在打开时过滤掉文件而不是音频文件。
我应该使用QAudioDecoder吗?
但是我用QAudioDecoder检查的每个文件都告诉我相同的编解码器“ audio / pcm”。

QAudioDecoder decoder;
decoder.setSourceFilename(fileUrl.toLocalFile());
qDebug() << decoder.audioFormat().codec();

如何通过不仅仅检查文件名是否以“ .mp3”或“ .wav”结尾的方式来知道Qt媒体播放器是否支持音频文件的格式?

而且我发现在音乐播放器上播放某些文件时长不正确。 但是,当我使用其他音乐播放器应用程序播放文件时,它会在其他音乐播放器上提供正确的持续时间。

或我的应用无法播放某些文件,但其他可以。
控制台说:

DirectShowPlayerService :: doSetUrlSource:未解决的错误代码0x80070002(?t?Χ?????? w ?????? C)

但更改文件名后,可以将其打开。

我应该如何在音乐播放器上修复这些文件,而不是一一修复文件的可能错误或不受支持的格式?


我写了这段代码来检查我打开的文件是否是受支持的音频文件。

QMediaPlayer audioChecker;
audioChecker.setMedia(fileUrl);
qDebug() << audioChecker.media().canonicalUrl().fileName();
qDebug() << audioChecker.isAudioAvailable();
if(audioChecker.error() == QMediaPlayer::NoError) {
    qDebug() << "no error";
}
if(audioChecker.error() == QMediaPlayer::FormatError) {
    qDebug() << "format error";
}

无论我测试了哪个文件,它都告诉我没有错误。

安慰:

“ musicplayer.exe”

没错
“ musicplayer.exe”

没错
“ musicplayer.ilk”

没错
“ musicplayer.exe”

没错
“一个song.mp3”

没错

但是,没有音频的文件怎么会没有错误呢? 为什么音频文件的音频不可用?


没关系。 我刚刚读到setMedia()立即返回,并且不等待媒体加载。 因此这是正常的,因为没有加载,所以没有音频,也没有错误。 我想我将创建一个线程类来检查我的文件。

顺便说一句,文件的不正确的持续时间是固定的。 它与LAV分离器有关吗?

  1. 关于如何在不检查其后缀的情况下检查文件中的音频格式,有一个名为mediainfo的工具,其命令行工具如下运行:

     mediainfo -f [filepath] 

    您将获得有关文件的完整信息,包括视频和音频(如果存在)。 在这些参数中,“音频”类别下有一个“格式”值,指示内部的实际音频格式。 例如。 AAC / AC3

  2. 关于文件可以在更改名称后播放,我认为文件名中可能包含一些空格字符,或者播放器无法访问由名称指定的文件。

Qt的文档中

对于播放不是简单的未压缩音频的媒体或音频文件,可以使用QMediaPlayer C ++类[…]支持的压缩音频格式取决于操作系统环境,以及用户可能安装的媒体插件。

一个简单的示例如何使用QMediaPlayer类:

player = new QMediaPlayer;
// ...
player->setMedia(QUrl::fromLocalFile("/Users/me/Music/coolsong.mp3"));
player->setVolume(50);
player->play();

要验证是否支持编解码器,可以使用QMediaPlayer类的error()方法,该方法将为您返回错误代码(请参见文档 )。

因此,在调用setMedia() ,您可以执行以下操作:

if (player->error() == QMediaPlayer::FormatError)
{
    // Codec/format unsupported
}

关于打开文件时得到的错误代码:

  • 检查路径中是否没有\\字符(如果有的话,请换一个\\
  • 检查您是否有空格,特殊字符等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM