caw*_*caw 7 delphi mp3 windows-media-player audio-player
我使用 TMediaPlayer 组件来播放音乐。
它适用于我的大部分曲目。但它不适用于某些曲目。当我想播放它们时,会显示以下错误消息:
这是德语,但大致意思是:
在项目 pMusicPlayer.exe 中,发生了类 EMCIDeviceError 的异常。消息:“启动 MCI 时出错。”。进程已停止。继续“单个命令/语句”或“开始”。
程序调用TMediaPlayer的“Play”程序后直接退出。
例如,以下文件发生此错误:
我用 128 kBit/s 的比特率编码了这个文件,因此文件大小为 3.70 MB:它工作正常!
第一个文件有什么问题?Windows Media Player 或其他程序可以毫无问题地播放它。
Delphi 的 TMediaPlayer 是否可能无法处理大文件(例如 > 5 MB)或具有高比特率(例如 > 128 kBit/s)的文件?
我能做些什么来解决问题?
附加问题: 为什么我不能使用 try/except 来阻止消息窗口?
try
Player.Play;
except
showmessage('Cannot be played');
end;
Run Code Online (Sandbox Code Playgroud)
这不起作用。
好的,我找到了问题的根源。我使用这个小型Delphi MP3 播放器教程(您可以在那里下载项目)来测试您的 MP3 文件,我遇到了与您的 MP3 相同的错误。
经过一些测试后,我发现其他 MP3 文件可以在该教程应用程序中正常播放。您的 MP3 与 Windows Media Player 和其他多媒体播放器配合良好。
是的,重新编码文件可以解决问题,但这不是真正的问题。问题来自 MP3 的元数据(ID3 标签),而不是声音编码本身。
我使用Mp3tag只删除了文件上的标签,之后一切都播放得很好,没有 EMCIDeviceError。
似乎 TMediaPlayer 可能会因某种格式的元数据而崩溃。在我的搜索过程中,我还看到了 TMediaPlayer 的错误报告,其中包含 MP3 文件,这些文件也嵌入了 JPEG 封面艺术。
我在论坛上回答有关 TMediaPlayer 的错误的大多数人都说 TMediaPlayer 确实过时了,而且通常很糟糕(我认为它已经有 10 年没有更新了)。如果您希望在应用程序中提供强大的 MP3 支持,请考虑使用另一个组件。您还可以在 Delphi 应用程序中使用 Windows Media Player ActiveX。
对于有关 try/ except 的其他问题,请尝试以下操作:
try
//load & play here
except
on E:Exception do
ShowMessage('Cannot be played! ' + E.Message);
end;
Run Code Online (Sandbox Code Playgroud)
或者,如果 TApplicationEvents 没有捕获错误,请考虑使用它。