Domanda

Io uso la componente TMediaPlayer per la riproduzione di musica.

Funziona bene con la maggior parte delle mie piste. Ma non funziona con alcune tracce. Quando voglio giocare li, viene visualizzato il seguente messaggio di errore:

alt text

Quale è tedesco, ma grosso modo significa che:

Nel progetto pMusicPlayer.exe si è verificata un'eccezione del EMCIDeviceError di classe. Messaggio: "Errore all'avvio di MCI.". Processo è stato fermato. Continuare con "Single Command / Dichiarazione" o "Start".

Il programma viene chiuso direttamente dopo aver chiamato la procedura di "Play" di TMediaPlayer.

Questo errore si è verificato con il seguente file, ad esempio:

  • dimensione del file: 7.40 MB
  • Durata: 4:02 minuti
  • bitrate: 256 kbit / s

ho codificato questo file con un bitrate di 128 kbit / s, e quindi una dimensione di file di 3.70 MB:! Funziona bene

Cosa c'è di sbagliato con il primo file? Windows Media Player o altri programmi possono giocare senza alcun problema.

E 'possibile che TMediaPlayer di Delphi non può gestire file di grandi dimensioni (ad esempio> 5 MB) o file con un bitrate elevato (ad esempio> 128 kbit / s)?

Che cosa posso fare per risolvere il problema?

domanda supplementare: Perché non posso usare try / tranne che per evitare che la finestra di messaggio?

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

Questo non funziona.

È stato utile?

Soluzione

OK ho scoperto la fonte del problema. Ho usato questo piccolo rel="nofollow Delphi Lettore MP3 Tutorial (puoi download del progetto ci ) per testare il file MP3 ed ho ottenuto lo stesso errore che hai con il tuo MP3 .

Dopo alcuni test ho scoperto che i file MP3 altri giocare bene con tale applicazione tutorial. Il tuo MP3 lavorato bene con Windows Media Player e altri lettori multimediali.

Si ri-codifica del file risolve il problema, ma non è il vero problema. Il problema provenire dai metadati del MP3 (tag ID3), e non il suono codifica stessa.

Mp3tag per solo rimuovere i tag sul file e tutto ciò che ha giocato bene dopo che, non EMCIDeviceError.

Sembra che TMediaPlayer può mandare in crash con alcuni formati di metadati. Ho visto anche le segnalazioni di bug TMediaPlayer con file MP3 che EMBEDED copertina JPEG troppo durante la mia ricerca.

La maggior parte delle persone che sono state rispondendo bug persone circa TMediaPlayer sui forum ho guardato dicevano che TMediaPlayer è davvero obsoleto ed è generalmente male (penso che non sono stati aggiornati in come 10 anni). Se si desidera un forte sostegno MP3 nell'applicazione considerare l'utilizzo di un altro componente . Si potrebbe anche usare Windows Media Player ActiveX nella vostra applicazione Delphi troppo.

Per la vostra ricevere altre informazioni sul try / tranne provare qualcosa di simile:

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

In alternativa è possibile utilizzare un TApplicationEvents se non è la cattura l'errore.

Altri suggerimenti

Hai provato mettendo a controllo TApplicationEvents sul modulo, e la gestione della OnException eventi.

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;

L'eccezione viene sollevata per l'Open, non il gioco. Quindi, se è possibile modificare il codice per intercettare le eccezioni sulla procedura aperta.

  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;

ho ri-codificato mp3 utilizzando winLAME e funziona. Cosa stai usando per codificare i vostri MP3?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top