Erreur avec Strawberry_5.20 absente en Active_5.12
Bonjour,
Bien que le problème soit mis en évidence sur un module je poste ici car il semble s'agir d'initialisation de chemin de fichier.
Je migre de Active_5.12 (32bits) en Strawberry_5.20 (64bits)
J'utilise le module Win32::MediaPlayer
Ce module fonctionne aussi bien en 5.12 qu'en 5.20
Le programme suivant fonctionne parfaitement dans les 2 versions de Perl.
NOUV.pl :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #!/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; |
Le problème apparaît lorsque j'utilise Win32::MediaPlayer dans un programme (ESS.pl) beaucoup plus long qui fait appel entre autre à plusieurs API Windows.
Suivant que je passe à Win32::MediaPlayer un chemin de fichier écrit en dur par moi-même ou un chemin généré par File::Spec et même par File::Spec::Win32, j'ai des comportements différents.
Avec le chemin en dur ça fonctionne toujours, avec un chemin généré, jamais, quelque soit la façon dont je triture le chemin :
Ceci fonctionne toujours, et bien d'autres essais...:
Code:
1 2 3 4
| $fichier_mp3 = "E:\\_APPLI\\Arabe\\Ass_1\\CDdecoup\\LLc_009\\FicTitre.mp3";
$fichier_mp3 = 'E://_APPLI//Arabe//Ass_1//CDdecoup//LLc_009//FicTitre.mp3';
...
$winmm->load($fichier_mp3); |
Ceci ne fonctionne jamais, et bien d'autres essais...:
Code:
1 2
| $fichier_mp3 = File::Spec::Win32->catfile( $Repertoire, 'FicTitre.mp3' );
$winmm->load($fichier_mp3); |
même après avoir trituré dans tous les sens :
Code:
1 2 3 4
| $fichier_mp3 = File::Spec::Win32->catfile( $Repertoire, 'FicTitre.mp3' );
my @TempArray = split (/\\/, $fichier_mp3);
print "ARRAY = @TempArray\n\n";
$fichier_mp3 = join("//", @TempArray); |
ou encore :
Code:
1 2 3 4
| $fichier_mp3 = File::Spec::Win32->catfile( $Repertoire, 'FicTitre.mp3' );
my @TempArray = split (/\\/, $fichier_mp3);
print "ARRAY = @TempArray\n\n";
$fichier_mp3 = join("\\\\", @TempArray); |
Je sèche dessus depuis 2 jours,
auriez-vous une idée ?
MERCI d'avance !
Ci-dessous divers essais, ceux qui fonctionnent correspondent aux chemins en dur,
Le dernier qui plante avec un chemin construit avec File::Spec::Win32