我使用TMediaPlayer组件播放音乐。
我的大多数曲目都可以正常使用。但它不适用于某些曲目。当我想播放它们时,会显示以下错误消息:
alt text http://i42.tinypic.com/vervci.jpg
哪个是德语,但大致意味着:
在项目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;
这不起作用。
答案 0 :(得分:2)
好的,我发现了问题的根源。我使用这个小Delphi MP3 Player Tutorial(你可以download project there)来测试你的MP3文件,我得到了与你的MP3相同的错误。
经过一些测试后,我发现其他MP3文件在该教程应用程序中运行良好。您的MP3适用于Windows Media Player和其他多媒体播放器。
是重新编码文件解决问题,但这不是真正的问题。问题来自MP3的元数据(ID3标签),而不是声音编码本身。
我使用Mp3tag 仅删除文件上的标记,之后一切运行良好,没有EMCIDeviceError。
似乎TMediaPlayer可能会崩溃某种格式的元数据。我还看到了TMediaPlayer错误报告,其中MP3文件在我的搜索过程中也嵌入了JPEG封面。
在我看来的论坛上,大多数人都在回答有关TMediaPlayer的人的错误,他们说TMediaPlayer真的已经过时了并且通常都很糟糕(我认为它已经过了10年没有更新)。如果您想在应用程序中使用强大的MP3支持,请考虑使用another component。您也可以在Delphi应用程序中使用Windows Media Player ActiveX。
关于try / except的其他问题请尝试以下内容:
try
//load & play here
except
on E:Exception do
ShowMessage('Cannot be played! ' + E.Message);
end;
如果它没有捕获错误,请考虑使用TApplicationEvents。
答案 1 :(得分:1)
您是否尝试在表单上设置TApplicationEvents控件,并处理OnException事件。
procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
E: Exception);
begin
if E is EMCIDeviceError then
begin
MessageDlg('Cannot be played, '+ e.message, mtError, [mbOK], 0)
//Or Do Nothing...
end else
MessageDlg(e.message, mtError, [mbOK], 0);
end;
Exception是在Open上引发的,而不是Play。因此,如果您可以更改代码以捕获打开过程中的异常。
MediaPlayer2.filename :='';
try
MediaPlayer2.Open;
except
on E: Exception do
MessageDlg('Can not be opened, '+ E.message, mtError, [mbOK], 0);
end;
if MediaPlayer2.Error = 0 then
MediaPlayer2.play;
我使用winlame重新编码了mp3,但它确实有效。你用什么来编码你的mp3?