Delphi:启动MCI时出错

时间:2010-03-14 19:55:21

标签: delphi mp3 windows-media-player audio-player

我使用TMediaPlayer组件播放音乐。

我的大多数曲目都可以正常使用。但它不适用于某些曲目。当我想播放它们时,会显示以下错误消息:

alt text http://i42.tinypic.com/vervci.jpg

哪个是德语,但大致意味着:

在项目pMusicPlayer.exe中发生了EMCIDeviceError类的异常。消息:“启动MCI时出错。”。过程停止了。继续“单一命令/声明”或“开始”。

程序在调用TMediaPlayer的“Play”程序后直接退出。

以下文件发生此错误,例如:

  • 文件大小:7.40 MB
  • 持续时间:4:02分钟
  • 比特率:256 kBit / s

我用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;

这不起作用。

2 个答案:

答案 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?