MCI播放mp3文件error:初始化mci时发生问题

  今天使用MCI写一个音乐播放器雏形的时候,使用的是mp3文件,在打开第一个文件时候还没有问题,但是在换了一个mp3文件之后,发现打开文件失败了,使用mciGetErrorString函数得到其错误为:初始化mci时发生问题。

  在百度上找了很多问题,都没有找到,在一个贴吧里看见有人说似乎只有网易云音乐的mp3文件打开会出现问题,别的都不会。抱着这个想法,又在qq音乐上下了一个mp3音乐文件,果然没有问题。

  但是知其然不知其所以然,还是很迷惑。后来想到可以把这个中文错误翻译一下在bing或者Google上找,于是尝试以Initializing MCI搜索bing,还真找到了MS的英文错误原文:a problem occured in initializing mci。并在StackOverFlow上找到了正解,链接如下:

  https://stackoverflow.com/questions/2443527/delphi-error-when-starting-mci

  这个答案大致的意思就是:

  Ok,我发现了问题的源头。我使用了这个小型的Delhpi MP3 Player Tutorial(你可以在这里下载这个项目)去测试了你的MP3文件并且我(也)得到了和你的MP3一样的错误。

  在一些测试之后我发现了其他MP3文件在这个Tutorial应用上播放良好。你的MP3则在Windows Media Player 和 其他多媒体播放器上播放良好。

  是的,重新编码这个文件解决了问题,但这并不是一个真的“问题”。这个问题来自于MP3的元数据(这个ID3 tags)而并非声音文件本身的编码问题。

  我使用Mp3tag操作这个文件,之一除了这个tags,在此之后所有一切工作良好,没有EMCIDeviceError。

  看起来是TMediaPlayer在遇到一些格式的元数据时会崩溃。在我搜索时,我也看到了TMediaPlayer的有关嵌入JPEG封面的MP3文件的bug报告。

  后面的不在翻译了。到这里其实很明白了。网易云使用的是嵌入JPEG封面的mp3格式,而我后来使用QQ音乐下载的文件则不是这种格式的。而这一点,假如你是win10系统,在删除文件时候,就可以看出来。

  

  这个是网易云音乐下载的mp3格式音乐,删除时候是有文件封面的。

 

  而这个是QQ音乐下载的mp3格式,这个显然没有封面,这个使用MCI播放也确实良好。

 

posted @ 2018-04-17 18:05  泛未分晨  阅读(2249)  评论(1编辑  收藏  举报