delphimp3windows-media-playeraudio-player

Delphi: EMCIDeviceError when starting MCI


I use the TMediaPlayer component for playing music.

It works fine with most of my tracks. But it doesn't work with some tracks. When I want to play them, the following error message is shown:

alt text

Which is German but roughly means that:

In the project pMusicPlayer.exe an exception of the class EMCIDeviceError occurred. Message: "Error when starting MCI.". Process was stopped. Continue with "Single Command/Statement" or "Start".

The program quits directly after calling the procedure "Play" of TMediaPlayer.

This error occurred with the following file for example:

I've encoded this file with a bitrate of 128 kBit/s and thus a file size of 3.70 MB: It works fine!

What's wrong with the first file? Windows Media Player or other programs can play it without any problems.

Is it possible that Delphi's TMediaPlayer cannot handle big files (e.g. > 5 MB) or files with a high bitrate (e.g. > 128 kBit/s)?

What can I do to solve the problem?

Additional question: Why can't I use try/except to prevent the message window?

  try
    Player.Play;
  except
    showmessage('Cannot be played');
  end;

This doesn't work.


Solution

  • OK I found out the source of the problem. I used this small Delphi MP3 Player Tutorial (you can download project there) to test your MP3 file and I got the same error as you have with your MP3.

    After some tests I found out that others MP3 files play well with that tutorial application. Your MP3 worked well with Windows Media Player and other multimedia players.

    Yes re-encoding the file solve the problem, but it's not the true problem. The problem come from the metadata of the MP3 (the ID3 tags) and not the sound encoding itself.

    I used Mp3tag to only remove the tags on the file and everything played well after that, no EMCIDeviceError.

    It seems that TMediaPlayer can crash with some format of metadata. I also saw TMediaPlayer bug reports with MP3 files that embeded JPEG cover art too during my search.

    Most people that were answering people bugs about TMediaPlayer on forums I looked were saying that TMediaPlayer is really outdated and is generally bad (I think it haven't been updated in like 10 years). If you want strong MP3 support in your application consider using another component. You could also use the Windows Media Player ActiveX in your Delphi application too.

    For your additional question about the try/except try something like:

    try
        //load & play here
    except
        on E:Exception do
            ShowMessage('Cannot be played! ' + E.Message);
    end;
    

    Or consider using a TApplicationEvents if it's not catching the error.