Ça me surprend, seulement parce que j'ai 3 ou 4 programmes pour lesquels c'est passé.
Bon, abandonne, si non ça va me mettre mal à l'aise
MERCI Beaucoup
Ça me surprend, seulement parce que j'ai 3 ou 4 programmes pour lesquels c'est passé.
Bon, abandonne, si non ça va me mettre mal à l'aise
MERCI Beaucoup
Pourrais-tu faire, dans le même script, ceci :
- définir une variable $mp3_lit avec le contenu en dur ("ce qui marche") et appeler MediaPlayer avec pour écouter
- définir un peu plus loin une variable $mp3_cat avec le contenu avec catfile et appeler Mediaplayer pour voir que ça plante
- ajouter le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if ($mp3_lit ne $mp3_cat) { print "MP3 files differs\n[$mp3_lit]\n[$mp3_cat]\n"; }
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Pas de changement
J'entends bien le 1er load dans les deux cas.
Le second load plante dans les deux cas avec MP3 files differs
j'ai essayé les deux :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #$fichier_mp3 = "E:\\_APPLI\\Arabe\\Ass_1\\CDdecoup\\LLc_009\\FicTitre.mp3"; #$fichier_mp3 = 'E://_APPLI//Arabe//Ass_1//CDdecoup//LLc_009//FicTitre.mp3';
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #####################DUF #$fichier_mp3 = "E:\\_APPLI\\Arabe\\Ass_1\\CDdecoup\\LLc_009\\FicTitre.mp3"; #$fichier_mp3 = 'E://_APPLI//Arabe//Ass_1//CDdecoup//LLc_009//FicTitre.mp3'; # my @TempArray = split (/\\/, $fichier_mp3); # print "ARRAY = @TempArray\n\n"; # $fichier_mp3 = join("//", @TempArray); # $fichier_mp3 = join("\\\\", @TempArray); # print "FICMP3_1040=$fichier_mp3=\n\n\n"; # my $mp3_lit = 'E://_APPLI//Arabe//Ass_1//CDdecoup//LLc_009//FicTitre.mp3'; my $mp3_lit = "E:\\_APPLI\\Arabe\\Ass_1\\CDdecoup\\LLc_009\\FicTitre.mp3"; sleep(1); $winmm->load($mp3_lit); $winmm->play; sleep(4); my $mp3_cat = File::Spec::Unix->catfile( $Repertoire, 'FicTitre.mp3' ); if ($mp3_lit ne $mp3_cat) { print "MP3 files differs\n[$mp3_lit]\n[$mp3_cat]\n"; } $fichier_mp3 = File::Spec::Unix->catfile( $Repertoire, $mp3_cat ); $winmm->load($fichier_mp3); $winmm->play; sleep(4); exit;
Je poursuis ici :
Les chemins sont systématiquement différents.
A la limite le deuxième essais serait meilleurs rien que des / ou //
Cependant j'avais aussi des doutes et j'avais essayé :
Une fois modifiés, les chemins en dur plantaient aussi !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #$fichier_mp3 = "E:\\_APPLI\\Arabe\\Ass_1\\CDdecoup\\LLc_009\\FicTitre.mp3"; #$fichier_mp3 = 'E://_APPLI//Arabe//Ass_1//CDdecoup//LLc_009//FicTitre.mp3'; # my @TempArray = split (/\\/, $fichier_mp3); # print "ARRAY = @TempArray\n\n"; # $fichier_mp3 = join("//", @TempArray); # $fichier_mp3 = join("\\\\", @TempArray); # print "FICMP3_1040=$fichier_mp3=\n\n\n";
Le code devient illisible mais :
ça plante avant le print
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #####################DUF #$fichier_mp3 = "E:\\_APPLI\\Arabe\\Ass_1\\CDdecoup\\LLc_009\\FicTitre.mp3"; $fichier_mp3 = 'E://_APPLI//Arabe//Ass_1//CDdecoup//LLc_009//FicTitre.mp3'; my @TempArray = split (/\/\//, $fichier_mp3); print "ARRAY = @TempArray\n\n"; $fichier_mp3 = join("//", @TempArray); # $fichier_mp3 = join("\\\\", @TempArray); print "\chemins triturés\n"; print "FICMP3_1040=$fichier_mp3=\n\n\n"; $fichier_mp3 = File::Spec::Unix->catfile( $Repertoire, $fichier_mp3 ); $winmm->load($fichier_mp3); $winmm->play; sleep(4); print "FICMP3_1040=$fichier_mp3=\n\n\n";
Bonsoir,
Je viens d'essayer ce programme et ça fonctionne chez moi :
Je suis sous Strawberry Perl 5.20, windows 8.1 et 64-bits. J'ai Win32::MediaPlayer 0.3 et mon programme est encodé en UTF-8 SANS BOM.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #!/usr/bin/perl use strict; use warnings; use utf8; use File::Spec; use Win32::MediaPlayer; my $Time = 0; my $winmm = new Win32::MediaPlayer; my $Repertoire = "Z:/Ma musique/S/Snow Patrol/A Hundred Million Suns/"; my $Fic = "Crack The Shutters.mp3"; my $fichier_Trad_Ora = File::Spec->catfile( $Repertoire, $Fic ); $winmm->load($fichier_Trad_Ora); $winmm->play; $winmm->volume(80); $Time = $winmm->length; sleep(15); $winmm->close;
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Bonjour djibril,
MERCI pour le retour !
C'est rassurant !
moi aussi celui-ci fonctionne !
Je suis en Strawberry Perl 5.20, win7 64-bits.
J'ai Win32::MediaPlayer 0.3 et mon programme est encodé en UTF-8 SANS BOM.
Dans celui qui ne fonctionne pas j'ai au départ :
J'ai supprimé un max :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #!/usr/bin/perl use strict; use warnings; use utf8; use Carp; use Tk; use Tk::LabFrame; use Tk::ROText; use Tk::Photo; use TestModule; use English '-no_match_vars'; use File::Spec; use File::Spec::Win32; use Config::Std; use Win32::MediaPlayer; use File::Basename; use Win32::API; $Win32::API::DEBUG = 1;
J'ai toujours le plantage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #!/usr/bin/perl use strict; use warnings; use utf8; use Tk; use Tk::LabFrame; use Tk::ROText; use Tk::Photo; use File::Spec; use File::Spec::Win32; use Config::Std; use Win32::MediaPlayer;
[EDIT 05:00] Ajout
Pour info j'ai inclus la lecture d'un .mp3 dans un autre programme (Regex.pl que j'ai collé sur le forum) et qui utilise :
Ça fonctionne parfaitement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #!/usr/bin/perl use warnings; use strict; use utf8; use Tk; use Tk::Dialog; use Tk::Photo; use Tk::LabFrame; use Tk::ROText; use File::Spec; use Config::Std; use Win32::MediaPlayer; # Pour jouer un fichier son
Les autres programmes tourneront en 5.20
Je vais conserver la 5.12 pour faire tourner celui qui plante en 5.20
A mon niveau, ça n'a pas de conséquence grave, mais je ne vois pas une PME ou une administration se satisfaire d'une pareille situation...
Encore MERCI pour le temps que tu as passé sur le pb
et surtout pour les FAQ dans lesquelles je puise à grandes brassées
@+
Juste pour info, ça a fonctionné correctement à 3 reprises dont 2 hier.
Comme je n'y croyait pas, à la 3ème j'ai sauvegardé ess.pl sans y avoir touché en ess_sav.pl
puis j'ai relancé, les 2 plantent à nouveau indéfiniment...
Bon j'arrête les frais.
Encore MERCI pour vos interventions !
[EDIT 08:03] Ajout reboot :
Craignant un pourrissement de la mémoire j'ai fait une fermeture/ouverture de session, plusieurs fois, ça a fonctionné 1 fois la première !
Revigoré, j'ai rebooté le PC à 2 reprises, ça n'a plus fonctionné
Nous vivons une époque formidable c'est nerveux
J'effacerai toutes les images inutiles dans 2 ou 3 jours...
Voici les deux dernières OK_UneFois.png & HS_SansRienChangerAuPrecedent.png :
Bonjour,
Fonctionne chez moi. J'ai testé à 15 reprises , même en lançant plusieurs programmes en même temps.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 #!/usr/bin/perl use strict; use warnings; use utf8; use File::Spec; use Win32::MediaPlayer; use Tk; use Tk::LabFrame; use Tk::ROText; use Tk::Photo; use File::Spec; use File::Spec::Win32; use Config::Std; my $Time = 0; my $winmm = new Win32::MediaPlayer; my $Repertoire = "Z:/Ma musique/S/Snow Patrol/A Hundred Million Suns"; my $Fic = "Crack The Shutters.mp3"; my $fichier_Trad_Ora = File::Spec->catfile( $Repertoire, "Crack The Shutters.mp3" ); $winmm->load($fichier_Trad_Ora); $winmm->play; $winmm->volume(80); $Time = $winmm->length; sleep(35); $winmm->close;
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Bonjour !
Je n'en doute pas une seconde, les autres fonctionnent aussi chez moiFonctionne chez moi. J'ai testé à 15 reprises , même en lançant plusieurs programmes en même temps.
MERCI et bonne journée !
Il faudrait peut-être tester le programme complet non ?
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
En fait ess.pl c'est le programme arabe.pl complet que je triture.
Il fait plus de 3000 lignes
Je te l'avais passé une fois, j'avais dû le couper en 2.
Plus faire un extrait cohérent des cours c'est maous !
Si ce n'est pas un modèle du genre, il tourne super bien en 5.12 en l'état, sans modif, depuis 2012...
Je viens de reproduire l'ano, je l'ai filmée, mais la séquence fait 110 Mo, je ne sais pas si ça va passer, elle est spinoza.texte.free.fr/HDPVR_20140722_0902.ts
Le son est mauvais, mais on voit bien le premier lancement est OK, le deuxième plante !
Je veux bien qu'en changeant de version, il y ait des améliorations, comme celles sur lesquelles je suis tombé, du genre initialisation API Windows incomplète...
mais là, aléatoire de surcroît, je ne vais pas m'appesantir dessus... à l'occasion si j'ai une idée...
Comme je le faisais remarquer dans la discussion sur le choix Active/Strawberry : l'administration n'est plus mon job, s'il faut passer des journées pour pouvoir utiliser ce qui fonctionnait avant, c'est pas du boulot...
Au fait j'irai y faire un +1 dans Strawberry, qui me convient parfaitement. [Edit : Plus possible ]
Avant de l'installer j'avais essayé Active_5.18 il n'y avait même pas Tk dans ppm graphique !
Ce sont tes commentaires favorables qui m'ont décidé, je ne regrette pas
Là tous mes autres outils sont disponibles et fonctionnent parfaitement.
Encore MERCI pour ta proposition, mais franchement c'est un boulot conséquent, tout ça pour des chemins de fichier construits en dur ou avec File::Spec ...
Désolé de ne pouvoir aidé, je n'arrive même pas à lancer MP avec un chemin en dur :/
Quelle est ta version installée de Win32::API ? (et celle de djibril ?).
La mienne : 0.77 (semble-t-il la dernière)
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Bonjour Philou67430,
Comme je l'ai écrit plus haut, je ne pousse pas plus mes investigations... sauf lumière subite !
Ceci dit perso j'ai tout mon temps, et peux te fournir toutes les infos qui te passent par la tête... si c'est pour satisfaire tes besoins ou ta curiosité...
Donc ne sois pas désolé, c'est moi qui suis gêné de vous avoir mis tous les deux à contribution !
Pour lancer le petit programme rudimentaire, Win32::API n'est pas nécessaire.
Avec seulement Win32::MediaPlayer , bien sympa, tu devrais pouvoir écouter un mp3
Je suis étonné qu'il ne fonctionne pas dans un contexte simple
Pour info :
C'est effectivement la dernière, enfin celle que j'ai eu avec l'utilitaire cpan de la 5.20
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Michel@MiDo ~ $ perl -MWin32::MediaPlayer -E 'print $Win32::MediaPlayer::VERSION' 0.3 Michel@MiDo ~ $ perl -MWin32::MediaPlayer -E 'print $Win32::API::VERSION' 0.77 Michel@MiDo ~ $
Si si justement, Win32::MediaPlayer repose essentiellement sur Win32::API, d'où ma question. Sans Win32::API installé, Win32::MediaPlayer ne peut pas fonctionner (Win32::MediaPlayer fait un "use" de Win32::API et ne contient en fait que de simples méthodes d'interface faisant appel à Win32::API).
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Oui, il est utilisé !
Je voulais dire qu'il n'est pas nécessaire d'y faire appel :
Effectivement lorsqu'il y a une erreur on voit bien qu'il l'utilise !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #!/usr/bin/perl use strict; use warnings; use utf8; use File::Spec; # Gestion des noms des chemins sous tous les OS use Win32::MediaPlayer; # Pour jouer un fichier son my $Time = 0; my $winmm = new Win32::MediaPlayer; my $Repertoire = "E:/_APPLI/Arabe/Ass_1/CDdecoup/LLc_009/"; my $Fic = "Tr_001.mp3"; my $fichier_Trad_Ora = File::Spec->catfile( $Repertoire, $Fic ); $winmm->load($fichier_Trad_Ora); $winmm->play; $winmm->volume(80); $Time = $winmm->length; sleep (4); $winmm->close;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Tk::Error: Win32::API::Call: parameter 1 had a buffer overflow at C:/Strawberry/ perl/site/lib/Win32/MediaPlayer.pm line 120.
Et donc ?
Quelle est sa version ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part perl -MWin32::API -e "print $Win32::API::VERSION"
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
0.77
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 E:\_APPLI\Arabe>perl -MWin32::API -e "print $Win32::API::VERSION" 0.77 E:\_APPLI\Arabe>
OK, donc ça ne vient pas non plus de là
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Je m'en doutais
D'autant que chez moi c'est aléatoire.
Les premières fois je pensais avoir fait une fausse manip...
Du coup j'ai tenté de filmer l'anomalie, par chance, juste après un boot, j'ai pu la reproduire
A mes débuts quand je disais à mes vieux collègues que l'ordinateur n'en faisait qu'à sa tête ils se regardaient en riant et m'invitaient à revoir mon code
Quand tu y penses relance-le tel quel, juste après un boot ou un changement de session...
Eurêka
Bonjour,
J'ai trouvé la parade, mais je n'arrive pas à formuler une explication cohérente
Peu importe l'explication, je vous livre mes constatations.
En faisant un autre petit programme, j'ai pu reproduire l'anomalie.
Il y a bien une différence de comportement Active_5.12 / Strawberry_5.20
Je n'arrive pas à cerner si elle vient :
- de File::Spec
- du fichier de configuration géré avec Config::Std, le fichier est initialement sauvegardé UTF8 NO BOM
- le résultat d'un sprintf
- ...???
En tout état de cause lorsque le nom du fichier à destination de Win32::MediaPlayer
est constitué de cette façon :
En Active_5.12 ça passe, en Strawberry_5.20 ça casse
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $NumFic3 = sprintf '%03d', $numfic; $fichier_mp3 = File::Spec->catfile( $RepBase, $config{$SelectSec}{repertoire}, "Fic_$NumFic3.mp3" );
Avant l'appel de Win32::MediaPlayer, j'ai ajouté :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $fichier_mp3 = encode("iso-8859-16", $fichier_mp3);
Donc :
Ça passe tant en Active_5.12 que Strawberry_5.20
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #! perl use warnings; use strict; use utf8; use Tk; use Tk::Photo; use Tk::LabFrame; use Tk::ROText; use File::Spec; # Permet une meilleure gestion des noms des chemins sous tous les OS use Encode; # Pour encoder en iso-8859-16 use Config::Std; # Lecture/ecriture d'un fichier .ini use Win32::MediaPlayer; # Lecture d'un fichier son my $winmm = new Win32::MediaPlayer; .... # éventuellement : $numfic++; .... $NumFic3 = sprintf '%03d', $numfic; $fichier_mp3 = File::Spec->catfile( $RepBase, $config{$SelectSec}{repertoire}, "Fic_$NumFic3.mp3" ); $fichier_mp3 = encode("iso-8859-16", $fichier_mp3); $winmm->load($fichier_mp3); $winmm->play; $winmm->volume(100); $Time = $winmm->length; $Pause = ($Time + 100); Temporisation ($Pause); $winmm->close;
En Strawberry ça passait tant que je sauvegardais le numéro du fichier dans le fichier de configuration et que je l'utilisais tel quel avec File::Spec
L'anomalie est apparut, lorsque pour jouer les fichiers suivants, j'ai manipulé avec sprintf, le numéro qui fait parti du nom du fichier...
Philou67430, si tu as le temps essaye d'encoder le nom du fichier en iso-8859-16 avant de le loader...
Autant ça lui suffira
Il semble que Win32::MediaPlayer soit pointilleux sur le l'encodage du nom de fichier...
Désolé d'avoir abusé de votre temps.
Si vous souhaitez que je fasse d'autres tests pour mieux cerner la cause, je suis entièrement disponible.
Mais seulement si vous avez du temps à perdre...
Encore MERCI pour votre aide.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager