Résoudre de fameux problème de EMCIDeviceError

Résolu
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 - 17 avril 2007 à 20:54
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 21 avril 2007 à 13:20
Bonjour à tous,


Bon j'aimerais savoir comment pourrat-on régler ce problème de "EMCIDeviceError..."

En effet je ne suis pas le seul à qui cela arrive !


Sur mon réveil j'ai ce problème, sur le programme de DezMp3 il existe
aussi, y compris sur plein d'autre programme qui utilisent le
TMediaPlayer.


Donc j'ai un peu cherché sur le net mais sans plus, et sur l'aide de delphi, niet...

Quelqu'un connaitrait-il un moyen de tester si le mp3 qui souhaite être joué est valide.

Et détecter si le lecteur est déjà en reoute de l'arrêter quand on quitte le lecteur.

En effet comme beaucoup de monde le sait, si quelqu'un fait cela :


  Lecteur.Stop;

  lecteur.Close;

  Close;


Et que le lecteur n'est pas ouvert, le programme plante...


@+

19 réponses

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
17 avril 2007 à 21:51
Salut,

if Lecteur.DeviceID <> 0 then // <- si un périphérique est ouvert...
begin
  Lecteur.Stop;
  Lecteur.Close;
end;

Bonne prog'
3
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
17 avril 2007 à 22:05
En effet, c'est EMCIDeviceError qu'il faut mettre et non pas EMCIDeviceException.
Pour l'explication du on E: Exception ... met ta souris sur le *except* ou bien sur le *try* et fait F1.

Sinon, il me semble que la solution de japee n'est pas efficace dans tous les cas (je me souviens avoir eu des problèmes avec ce test - mais je ne peux pas t'en dire plus).
En tout cas, si cette soluce fonctionne, elle est à préférer à la mienne.



++
3
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
17 avril 2007 à 21:03
Voici une musique qui déclenche une erreur si les lecteurs MP3 utilisant TMediaPlayer :

Cascada-Miracle.mp3 Cascada Miracle

Il existerait aussi un moyen de changer le message si l'erreur MCI est détectée :

<hr size="2" width="100%" />Message contient la chaîne de texte àafficher dans la boîte de dialogue des exceptions quand l'exception est déclenchée.

Syntaxe Delphi :
propertyMessage:string

Syntaxe C++:
__propertyAnsiStringMessage ={read=FMessage,write=FMessage};

Description

Message stocke la chaîne du message d'erreur àafficher quand l'exception est déclenchée.Tous les constructeurs de la classe Exception attendent un paramètre chaîne àstocker dans Message.Le texte du message peut être codéen dur comme paramètre d'un constructeur Exception,créécomme paramètre dynamique,ou chargédepuis un fichier ressource comme paramètre formatédynamiquement ou statique.
<hr size="2" width="100%" />
@+
0
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
17 avril 2007 à 21:51
C'est pas bête mais cela ne fonctionne pour cette raison :

"Identificateur non déclaré : 'EMCIException'"

Pourrais-tu aussi me dire comment fonctionne cette ligne :

"on E: EMCIException"

@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
17 avril 2007 à 21:52
J'avais pas rafraîchi... mais ça tient toujours
0
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
17 avril 2007 à 22:16
Ok ca fait un premier problème de résolu !
Merci beaucoup !

Maintenant il manque plus qu'une petite chose je pense !
En effet si j'applique partout ta "protection" japee, cela va forcément à un moment raté, car si je ne peux pas l'appliquer partout malheureusement, voici un exemple :

  if (choice < Titres.Items.Capacity) then
  begin
      ProgressBar1.Position:=0;
      if Lecteur.DeviceID <> 0 then
      begin
        Lecteur.Stop;
        Lecteur.Close;
      end;
      Lecteur.FileName:=Chemin.Items[choice];
      Lecteur.Open;
      Lecteur.Play;
      ProgressBar1.Max := Lecteur.Length;
      ProgressBar1.Min := 0;
  end;

Comment vais-je savoir si la musique que je viens de sélectionnée est correcte ou pas
Ca je ne peux pas pour le moment.

@+
0
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
17 avril 2007 à 22:36
Parfais ca fonctionne parfaitement !

Merci à florenth pour avoir trouvé la solution à ce fameux problème !

Et félicitation à vous deux deux pour avoir cherché un moyen de contourner ce problème, qui n'en est plus un maintenant :)
0
Utilisateur anonyme
17 avril 2007 à 22:39
[auteurdetail.aspx?ID=206167 Also know as,]




1)Le code de Japee répond à ta demande :"détecter si le lecteur est déjà en route de l'arrêter quand on quitte le lecteur" et ne répond en rien à "Comment vais-je savoir si la musique que je viens de sélectionnée est correcte". Tu confonds deux choses.

Autrement dit la réponse de Japee par rapport à ta demande est valable dans tout les cas.

2)Ensuite c'est bien plus joli

if (choice < Titres.Items.Capacity) then
With Lecteur Do
    Begin
      ProgressBar1.Position:=0;
      if DeviceID <> 0 then
         begin
            Stop;
           Close;
         end;
      FileName:=Chemin.Items[choice];
      Open;
      Play;
      ProgressBar1.Max := Length;
      ProgressBar1.Min := 0;
   End;
 end;

3)Pour répondre à ta question sur le caractere valide ou non d'un mp 3 :
*Premier cas : il y a un soucis dans le header. Il suffit alors de le lire et de comparer à ce qu'il doit etre. En cas de différence le mp3 n'est pas valide.
*Il plante au milieu : Ben pas d'autre solution que de le lire d'une facon ou d'une autre pour le savoir (lecture directe, stream ect ect).

De toute facon cela va imposer à l'utilisateur un temps d'attente considérable avant d'entendre la musique commencer, et ca il ne va pas aimer .

La fonction de florenth te permet de "lever" l'erreur EMCIDeviceError
mais pas de la détecter

Pour finir le TMediaPlayer c'est de la merde
0
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
17 avril 2007 à 22:46
Ah j'avoue ton code est bien plus beau mais moi j'ai l'habitude de faire du C pur, pas du delphi :)

Et faut avouer que le C est parfois bien plus agréable à utiliser que Delphi dans sa réalisation !

Merci pour tes précisions Francky23012301 [auteurdetail.aspx?ID=560094
]
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
18 avril 2007 à 08:28
C, C++, Delphi, tous sont mus par la même lois : les competences ou les lacunes du developpeur.

si certains langages sont plus puissant, plus souples, plus costaud, plus simple que d'autres, aucuns n'echape a cela.

maintenant, quand on elabore un programme autour d'un composant aussi "pourri" que le TMediaPlayer, il faut s'attendre a ce que le niveau et le resultat sois bien en deça d'un WinAmp, MPC ou iTune.
même en cherchant bien on ne pourras pas faire ce qu'on veux.

La solutions ? passer par un autre composant, Bass, FMod, WinAmp API, DSEngine sont autant d'APIs de son plus ou moins complete, plus ou moins facile d'accés, qui permettent d'elaborer réellement un vrai player, leger, simple, efficace et bien au dessus du niveau d'un TMediaPlayer ou d'un pseudo machin bidule bassé sur du code by M$ ... car avouons le bien, depenser autant d'argent, de temps et de mega-octets avec un player et des technologies lourdes et completement farfelues c'est vraiment au final soit un foutage de gueule soit un acte desesperé pour cacher une certaine incompetence.
Microsoft a tendance a souvent confondre interroperabilitée et intrusivitée quand ils elaborent un programme, IE, WMP, WMessenger, des trucs dans des machins dans des bidules, tous dependants des uns et des autres ne laissant au final que deux choix possible a l'utilisateur final, l'utilisation de ces programmes avec leurs lots de mauvaises surprise (95% des utilisateurs) ou le passage radical a des solutions opensource, gratuite et de meilleure qualitée en abandonnant les lourds dans un recoins du disque dur (puisque suppression impossible).

Mais grace a cette politique de "l'emmerdement maximum", microsoft nourris l'opensource en envoyant leurs "clients" chez eux, tant mieux pour nous :) Microsoft n'a bientot plus d'avenir possible dans cette voie, puisque bientot les contrats avec les gouvernements et instances gouvernementales vont etre arrétés au profit de solutions non contraignante (cad Linux) pour une question de securité nationale et certains pays on deja choisis cette voie, administrations, armées, ecoles toutes sous linux, de plus le grand public sais plus ou moins que Linux est maintenant un produit alternatif "presque" abordable (en matiere d'utilisation), beaucoup d'amateurs passe sous linux, j'ai moi même eu plusieurs distrib, mais jamais trop utilisés a cause des programmes non dispo dessus.

Bref ... je fais du HS, mais pas vraiment puisqu'il s'agit d'argumenter pourquoi il faut eviter dés maintenant de trop s'attacher a certaines choses estampillées M$, certe windows existera toujours, XP ne devrait pas trop avoir de soucis a ce faire comparé a son petit frere "vista" et son futur petit frere "viena" ... rapellons nous les beaux jours que windows 98 et NT4 on eus aprés la sortie de windows XP, j'ai même vus en 2001 des PC sous Windows 3.11 parfaitement fonctionnels !!! .
Vista n'est qu'un systeme de transition comme le fut Windows Me. Viena serat problement un pseudo Vista amelioré apportant peut etre enfin autre chose qu'une nouvelle interface dont tout le monde se fiche et enfin, le successeur de Viena apparaitra surrement et deviendra, a l'instar d'XP, LA vraie nouveautée (aprés quelques services pack qui gommeront les betises).
Donc tout cela nous amene aux alentours de 2010-2012 pour voir une nouvelle "revolution" ou plutot un nouveau cycle de technologie, un nouvel age d'or pour l'utilisateur. A moins que Viena soit la surprise tant attendue, mais j'en doute vus le peu de temps qu'ils vont passer dessus (un peu moins de 2 a 3 ans contre 5 a 6 ans pour ses predecesseurs).
Je pense que d'ici la, XP a encore du chemin a faire avant qu'il ne soit definitivement mis a la "corbeille", un SP3 symbolique (le dernier) annoncé pour 2008 (2009 donc) devrait peut etre enfin stabiliser le tout, esperons le...

bref tout ça pour dire que Windows Media Player est le reflet de tout ceci, de la mediocrité melangée a de la branlette intellectuelle.
qui au final ne sert qu'a subtiliser quelques sous a l'utilisateur et emmerder les developpeurs qui de plus en plus on du mal a suivre toute ces incecentes mises a jours et pseudo-nouveautées qui necessite toute notre adaptatabilitée et attention, pour ne pas perdre le fil, mais on as tendances a oublier qu'une perceuse viseuse deviseuse virbomasseur telephone ne remplacera jamais un ancestral marteau (essayez de planter un clou avec un vibro tient...).
Je doute même qu'un jours CS puisse continuer a subsister sur de l'asp.net... mais qui sais, peut etre l'avenir nous reserve-t-il de bonnes surprises (a mettre au conditionnel).

fin du HS ...
<hr size="2" width="100%" />Croc (click me)
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
18 avril 2007 à 09:27
salut,

un détail sur ton code:

if (choice < Titres.Items.Capacity) then
c'est faux! Il ne faut PAS tester Capacity pour vérifier les index ! mais count. (lit l'aide pour plus d'info)

[HS]

@Foxi:
très bon résumé du problème de microsoft. même si j'aurais carrément qualifier ME de beta à l'échelle mondial. (vu que basé sur le noyau 9x, mais avec des function de XP comme la restauration système)

sinon,
"j'ai moi même eu plusieurs distrib, mais jamais trop utilisés [Linux] a cause des programmes non dispo dessus."
ouai, dommage que pas plus de programmeur ne travail sur des projet open source d'envergure. non ? hum.
(je dis ça, mais je ne le fait pas non plus)

/HS

A+

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
18 avril 2007 à 09:28
Foxi tu t'es complètement laché là
On sent que le beson de dire ca trainait depuis longtemps, on prend donc à nouveau rendez-vos mardi prochain !

Non mais plus sèrieusement tu as tout à fait raison sur le fait que tout ou presque dépend du developpeur.

Mais je ne te cache pas non plus que si je viens sur ce site c'est bel et bien pour apprendre

En tout cas félicitation pour ton message, je pense que beaucoup de monde devrait le lire...

@+
0
Utilisateur anonyme
18 avril 2007 à 09:36
Ou la la, il y en a qui vont faire une crise cardiaque en lisant ton message f0xi (même si partage certains points).

De toute façon ca vait bien longtemps que Bill Gates n'est plus un information passionné (et ca se trouve il n'est même plus dans le coup), mais simplement un homme d'affaire qui a comme seul objectif de garder le monopole afin d'empecher les petits de se développer.

Tout ca pour dire Also Know As, que le TMediaPlayer est vraiment le plus mauvais choix et que quiite à débuter autant prendre de bonnes habitudes et utiliser les dll que f0xi t'a souligné

@+
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
18 avril 2007 à 10:18
Hello,

Il en prend pour son grade, le TMediaplayer, lol...

Je suis d'accord avec f0xi dans les grandes lignes.
Je fais par ailleurs partie de ceux qui tournaient encore sous Win3.11 et Dos 6.22 en 2001.

Mais je vais me faire l'avocat du diable.

Je pense qu'on a tous débutés un jour (il n'y a pas si longtemps) en prog. Si on aime la musique, un des premiers programmes qu'on a envie de réaliser, c'est un "Winamp" perso. Dans cette optique, le TMediaPlayer me paraît valable pour arriver rapidement à un résultat.

On arrive certes vite aux limites des possibilités de ce compo, mais de toute manière, faire un player complet demande beaucoup de temps et de compétence, et les problèmes à résoudre sont si nombreux qu'on comprend vite pourquoi il faut une équipe pour développer et maintenir un tel logiciel. Ce qui relègue à mon avis le problème de savoir si TMediaPlayer est oui ou non un composant de qualité au second plan.

D'ailleurs, idéalement, le code d'un player devrait être articulé en modules qui rendraient l'adaptation à tel ou tel composant ou dll aisé, sans avoir à tout reprendre fondamentalement.

Et si vous continuez à taper sur TMediaPlayer, je poste le code du player perso que j'utilise tous les jours, que j'avais fait à base de ce composant il y a quelques temps, et dont le code me fait honte maintenant, mais ça fonctionne je vous dis. En plus il est Winamp like.

Bonne prog'
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
18 avril 2007 à 14:18
Nan mais il faut pas dramatiser non plus.
Certes, tout ce qu'a dit f0xi est juste mais le TMediaPlayer suffit pour de petites interventions musicales.
Parce que triballer Bass.dll juste pour lire des .mid, c'est pas terrible.
Et puis j'aime pas miniFmod.

Et puis ça fache jappe
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
20 avril 2007 à 19:50
an 2020:
"Bill Gates, c'est qui celui-là ?"
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
21 avril 2007 à 10:06
Le tmediaPlayer est en plus tatillon si le chemin complet du fichier fait plus de 107 (je crois)  caractères. la soluce c'est de convertir le nom du fichier (path+filename.ext) en nom DOS avant de demandera tmedia player de l'ouvrir.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
21 avril 2007 à 13:20
Oui, Microsoft pratique une certaine politique informatique..
Mais avouons-le jusqu'à présent cela ne lui a pas mal réussi !
ils ont tellement de pognon que même les amendes pour abus de position dominante
représentent de simples amuses-gueules..
qu'ils ne paient d'ailleurs jamais puisqu'ils sont bardés de puissantes sociétés d'assurance et de ré-assurance le tout harnachées par une impressionnante cohorte d'avocats les plus chevronnés sur la terre.

Bref, s'il en était besoin de le démontrer, Microsoft est devenu un monstre tentaculaire qui fait à peu près ce qu'il veut et de plus Bill Gates n'est pas un personnage si désagréable que çà.

le seul moyen serait se passer de leurs services en adoptant un autre système
(comme l'évoque foxi)
Mais l'autre, ben faut qu'il fasse ses preuves ou que les états décident de construire autre chose et le temps que les petits nouveaux dépassent le Maître il va falloir faire avec.. et pendant ce temps-là, la fortune de Microsoft se poursuit en suivant une croissance exponentielle !

Peut-être même que Microsoft va finir par acheter LINUX..

A suivre..

Cantador
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
17 avril 2007 à 21:46
En utilisant un bloc try..except, tu peux (en dehors de Delphi) etouffer l'erreur et la canalyser comme tu veux.

Un truc du genre (pas testé) :

try
  Lecteur.Stop;
  Lecteur.Close;
except
  on E: EMCIException do
  begin
   
// Code qui gère l'erreur
  end;
  on E: Exception do raise;
end;
-2
Rejoignez-nous