FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» PANORAMIC V 1
Utilisation de PLAY Emptypar jjn4 Aujourd'hui à 18:59

» Gestion d'un système client-serveur.
Utilisation de PLAY Emptypar Klaus Aujourd'hui à 16:52

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Utilisation de PLAY Emptypar Froggy One Aujourd'hui à 11:16

» @Jack
Utilisation de PLAY Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
Utilisation de PLAY Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
Utilisation de PLAY Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Utilisation de PLAY Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Utilisation de PLAY Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Utilisation de PLAY Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Utilisation de PLAY Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Dessine-moi une galaxie
Utilisation de PLAY Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Utilisation de PLAY Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Utilisation de PLAY Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Utilisation de PLAY Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Utilisation de PLAY Emptypar leclode Mer 17 Avr 2024 - 11:07

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment :
Cdiscount : -30€ dès 300€ ...
Voir le deal

 

 Utilisation de PLAY

Aller en bas 
4 participants
AuteurMessage
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Utilisation de PLAY Empty
MessageSujet: Utilisation de PLAY   Utilisation de PLAY EmptySam 19 Sep 2009 - 15:47

J'utilise la séquence suivante pour jouer un morceau de musique mp3:
Code:
Sound 1
File_Load 1, "Musik.mp3"
Play 1
et ça marche.
Maintenant je veux enchaîner une série de morceaux (une liste .m3u), je mets donc le code ci-dessus en sous-programme, je lis le fichier liste et j'appelle le s/p à partir d'une boucle en donnant le nom du fichier à jouer.
Ca ne marche pas: le PLAY commence à jouer et rend la main tout de suite à l'appelant, et la 2ème demande arrivant immédiatement derrière je pars en erreur avec un numéro d'objet (Sound) déjà utilisé.
J'ai essayé en changeant le numéro d'objet Sound à chaque appel mais ça plante:
Code:
Jouer:
n = n + 1
Sound n
File_load n, fs$
Play n
Return
Y a-t-il un moyen de savoir quand le Play est terminé pour attendre et enchaîner seulement à ce moment-là ? ou quelque chose m'échappe...
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2692
Date d'inscription : 13/09/2009

Utilisation de PLAY Empty
MessageSujet: Possible comme ça   Utilisation de PLAY EmptySam 19 Sep 2009 - 18:11

J'ai essayé avec des wav et en modifiant un peu le programme de départ(ça devrait marcher pareil avec des mp3)
et ça a marché. Le code, c'est :
dim a$(3),i
a$(1)="APPLAUS.WAV"
a$(2)="baille2.wav"
a$(3)="bins.wav"
sound 1
for i=1 to 3
file_load 1,a$(i)
play 1
wait 2000
next i
On entend les trois sons les uns après les autres, mais cela ne garantit pas que tous avaient fini de jouer.
A ma connaissance, il n'y a pas de moyen de savoir à l'avance combien de temps va durer un son et d'adapter la durée du Wait en conséquence.
Mais peut-être y-a-t-il un moyen que je ne connais pas...
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
jjn4

jjn4


Nombre de messages : 2692
Date d'inscription : 13/09/2009

Utilisation de PLAY Empty
MessageSujet: ou alors   Utilisation de PLAY EmptySam 19 Sep 2009 - 18:27

Ou alors, si on sait à l'avance quelles musiques vont être jouées, on mesure chacune leur longueur, mais c'est un peu galère...
Nouveau code :
dim a$(3),a(3),i
a$(1)="APPLAUS.WAV" : a(1)=6
a$(2)="baille2.wav" : a(2)=2
a$(3)="bins.wav" : a(3)=3
sound 1
for i=1 to 3
file_load 1,a$(i)
play 1
wait a(i)*1000
next i
(dites donc, comment vous faites pour faire apparaître ces petites fenêtres blanches où vous insérer votre code ?)
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
jjn4

jjn4


Nombre de messages : 2692
Date d'inscription : 13/09/2009

Utilisation de PLAY Empty
MessageSujet: fin   Utilisation de PLAY EmptySam 19 Sep 2009 - 19:22

J'espère que ça répond à la question posée.
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Utilisation de PLAY Empty
MessageSujet: Re: Utilisation de PLAY   Utilisation de PLAY EmptyDim 20 Sep 2009 - 17:45

Merci Jean Jacques pour tes efforts, mais ta réponse ne me satisfait pas complètement. En effet ça marche pour jouer un son bref, on estime à peu près la durée, mais moi je parle de morceaux mp3, par exemple une chanson qui dure 2 ou 3 minutes, impossible de faire un wait approximatif pour ça, il faudrait connaître la durée exacte de chaque morceau (d'ailleurs peut-être qu'elle est écrite quelque part dans le fichier mp3, il faudrait savoir où).
Déjà mon sous-programme n'est pas correct, le Sound devrait être défini en dehors et une fois pour toutes.
Je vais continuer à chercher, merci en tout cas...

Pour insérer le code, en cours de saisie tu sélectionnes la zone qui contient le code, puis tu cliques en haut sur le bouton "Code".
De même pour faire Gras, Italiques, souligné etc...
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2692
Date d'inscription : 13/09/2009

Utilisation de PLAY Empty
MessageSujet: Autre solution   Utilisation de PLAY EmptyDim 20 Sep 2009 - 20:30

Pour les musique plus longues, je vois bien une solution.
Elle est un peu tordue et les puristes de la programmation sophistiquée crieraient certainement au scandale, mais ça marche, je l'ai essayée :
Code:
rem j'ai une musique mp3 qui dure un peu moins de 2 min 10 sec, soit 130 sec
rem (si on peut appeler ça une musique, c'est la sirène des pompiers, mais bon)
rem sachant que wait dure au maximum 30 sec, cela fait 4*wait(max) + 10 sec
dim a : a=130
sound 1
file_load 1,"XXXXDOC-Pompiers.mp3"
play 1
while a>30
 wait 30000
 a=a-30
end_while
wait a*1000
print "fini"
file_load 1,"APPLAUS.WAV"
play 1
print "Terminé"
Bien sûr, ce serait mieux si M. PANORAMIC nous créait une possibilité de gérer la file sonore, mais on va pas être trop exigeant.
J'espère que ça pourra te servir.
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Utilisation de PLAY Empty
MessageSujet: Re: Utilisation de PLAY   Utilisation de PLAY EmptyDim 20 Sep 2009 - 20:54

D'accord, mais ça ne résout pas du tout mon problème, le wait a une durée fixe. Si j'enchaîne un morceau de 1'30" puis un de 3'15", puis un de 2', etc., je mets le Wait à combien ?
On pourrait peut-être évaluer la durée du morceau en fonction de la taille du fichier, mais je crois que ce n'est pas aussi simple, ça fait intervenir d'autres éléments: le bitrate, le taux d'échantillonnage...
Il faudrait surtout un moyen de savoir quand le fichier a été entièrement traité et attendre ce temps-là, mais pas sûr que ce soit possible.
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Utilisation de PLAY Empty
MessageSujet: Re: Utilisation de PLAY   Utilisation de PLAY EmptyDim 20 Sep 2009 - 22:00

Bon, j'ai fait un truc empirique qui tourne chez moi:
Code:
Rem **** Play.bas jouer un MP3 ou une liste (M3U) de MP3
dim p$, fs$, n, lof, duree, s, ops, j, reste
Label Jouer, Carfic
Sound 1

ops = 16049: rem **** octets de fichier par seconde (approx.)

If Param_Number > 0
    p$ = Param_Value$(1)
    n = 1
    If upper$(Right$(p$, 3)) = "M3U"
        Rem liste
        File_Open_Read 1, p$
        While File_Eof(1) = 0
            File_Readln 1, fs$: fs$ = "C:\Mesdoc\Mp3\Compil1\" + fs$
            Gosub Carfic
            Gosub Jouer
            rem **** attente de la fin du morceau
            j = int(duree/25): reste = 25*Frac(duree/25)
            If j > 0
                For s = 1 to j
                    Wait 25000
                Next s
            End_If
            Wait reste*1000
        End_While
    Else
        fs$ = p$: Gosub Carfic
        Gosub Jouer
    End_If
End_If
TERMINATE

Jouer:
File_load 1, fs$
Play 1
Return

Carfic:
Filebin_Open_Read 2, fs$
lof = Filebin_Size(2): rem **** taille du fichier mp3
Filebin_Close 2
duree = INT(lof/ops) + 2: rem **** ajout 2 secondes de battement par sécurité
Return
Remarques:
- Sur un certain nombre de mp3 j'ai fait la moyenne du nombre d'octets de fichier pour 1 seconde de musique: constante ops = 16049.
Je calcule la durée en fonction de la taille du fichier et j'ajoute 2 secondes de sécurité (S/P Carfic).
- Le Wait étant limité à 30s j'ai fait des morceaux de 25s.
- Le programme (Play.exe) est lancé avec en paramètre le nom du fichier .m3u
- le chemin indiqué ligne 15 est évidemment à adapter pour chacun, c'était juste pour un essai (mon fichier liste ne contient que le nom du fichier, pas son chemin complet).
- La valeur ops doit sans doute être adaptatée en fonction du type d'encodage des mp3, bitrate etc., c'est empirique et ça ne vaut pas un calcul exact en fonction des paramètres qui figurent dans le fichier, mais je ne sais pas où.

EDIT:
J'ai continué mes investigations (Google) et j'ai trouvé un petit soft, Tag.exe, qui permet entre une multitude de possibilités de lister les caractéristiques ('tags') d'un fichier mp3, en ligne de commande. Pour ceux que ça intéresse, c'est là: http://www.softpedia.com/progDownload/Tag-Download-21935.html
Il suffit donc de lancer Tag.exe avec Execute, avec en paramètre le fichier mp3:
Code:
EXECUTE "ChemindeTag.exe Chemindemonfichier.mp3 >Fichresul.txt"
et de rechercher dans le fichier résultat entre autres la durée du morceau.
Au moins la durée est exacte, et non plus approximative.
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Utilisation de PLAY Empty
MessageSujet: Re: Utilisation de PLAY   Utilisation de PLAY EmptyLun 21 Sep 2009 - 17:14

J'ai refait avec l'utilisation de Tag.exe (voir ci-dessus) pour la durée.
Et pour l'attente j'ai mis une boucle de n secondes avec 1 seconde à chaque fois, pour pouvoir arrêter le programme (sinon je pense qu'il attend la fin de la boucle pour prendre le click en compte).
Sur le click de fin prématurée ('Quitter'), on part en erreur
'Access violation at address 48. Read of address 48'
qui est un bug connu de Jack crois-je me souvenir.
Je redonne tout le code (il a pris un peu d'embonpoint):
Code:
Rem **** Play.bas jouer un MP3 ou une liste (M3U) de MP3
Dim Fichtag$, Fichresul$, rep$, a$, b$, d$
dim p$, fs$, duree, s, i, j
Dim tag$(10), tagl$(10)
tag$(1) = "Format:": tag$(2) = "Details:": tag$(3) = "Tags:"
tag$(4) = "Title:": tag$(5) = "Artist:": tag$(6) = "Album:"
tag$(7) = "Year:": tag$(8) = "Track:": tag$(9) = "Genre:"
tag$(10) = "Comment:"
Label Jouer, Carfic, Fin

Fichtag$ = "C:\Util\Tag.exe":    Rem **** pour récupérer la durée
Fichresul$ = "Z:\Temp.txt":      Rem **** fichier temporaire quelconque
rep$ = "C:\Mesdoc\Mp3\Compil1\": Rem **** répertoire des musiques (à ajuster)

Width 0, 280: Height 0, 210
Sound 1
Button 3: Top 3, 140: Left 3, 75: Width 3, 100: Height 3, 24: Caption 3, "Quitter"
On_Click 3, Fin
List 4: Top 4, 10: Left 4, 10: Width 4, 245: Height 4, 120

If Param_Number > 0
    p$ = Param_Value$(1)
    If upper$(Right$(p$, 3)) = "M3U"
        p$ = rep$ + p$: Rem **** Fichier 'liste' (.m3u)
        File_Open_Read 1, p$: Rem **** Prise en compte des fichiers mp3 à jouer
        While File_Eof(1) = 0
            File_Readln 1, fs$: fs$ = rep$ + fs$
            Gosub Carfic
            Gosub Jouer
            For j = 1 To duree: Wait 1000: Next j: Rem **** attente de la fin
        End_While
    Else
        fs$ = p$: Gosub Carfic
        Gosub Jouer
    End_If
End_If
Fin:
TERMINATE

Jouer:
File_load 1, fs$
Play 1
Return

Carfic:
If File_Exists(Fichresul$) = 1 Then File_Delete Fichresul$
Execute chr$(34) + Fichtag$ + " --tofilen " + Fichresul$ + " " + fs$ + chr$(34): Rem caractéristiques du MP3
wait 1000
File_Open_Read 2, Fichresul$
File_Readln 2, a$: Rem nom du fichier
While File_Eof(2) = 0
    File_Readln 2, a$: a$ = Rtrim$(a$)
    b$ = Trim$(left$(a$, 8)): rem print b$
    for i = 1 to 10
        If Len(a$) > Len(tag$(i))
            if b$ = tag$(i) then tagl$(i) = mid$(a$, 10, len(a$) - 9): Exit_For
        End_If
    next i
End_While
File_Close 2
File_Delete Fichresul$
d$ = right$(tagl$(2), 5)
duree = 2 + 60*val(left$(d$, 2)) + val(right$(d$, 2)): rem durée en secondes
Print_Target_Is 4
Clear 4
Print fs$
Print "Artiste: " + tagl$(5)
Print "Titre  : " + tagl$(4)
Print "Durée  : " + d$
Print "Album  : " + tagl$(6)
Print "Année  : " + tagl$(7)
Print "Piste  : " + tagl$(8)
Print "Genre  : " + tagl$(9)
Return
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Utilisation de PLAY Empty
MessageSujet: Re: Utilisation de PLAY   Utilisation de PLAY EmptyLun 21 Sep 2009 - 17:58

Salut JL35,
Jai essayer ton code, mais il plante immédiatement (il y a une fin de processus, gerée par Windows, immédiate).
A+
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Utilisation de PLAY Empty
MessageSujet: Re: Utilisation de PLAY   Utilisation de PLAY EmptyLun 21 Sep 2009 - 20:29

Salut Jean Claude, merci d'avoir essayé.

Je précise que le code doit être compilé en .exe et lancé comme tel, puisqu'il attend un paramètre, Param_Value$(1) qui doit être soit un fichier mp3, soit une liste (.m3u) de fichiers mp3.
Sans paramètre donné il va tout de suite au Terminate.
J'ai supposé également que ces fichiers sont tous dans un même répertoire qu'il faut préciser dans rep$, qu'il faut avoir installé quelque part Tag.exe et préciser son chemin d'accès dans Fichtag$, et donner le chemin d'accès à un fichier temporaire dans Fichresul$

Certes, il faudrait paramétrer tout ça, mais c'était surtout pour faire un essai, l'environnement est facile à modifier.

Pour faire un essai sans compiler, il faut ôter le If Param_Number et son End_If, et remplacer le p$ = Param_Value par p$ = le nom d'un fichier mp3 ou m3u.
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

Utilisation de PLAY Empty
MessageSujet: Re: Utilisation de PLAY   Utilisation de PLAY EmptyMar 22 Sep 2009 - 9:00

Citation :
Y a-t-il un moyen de savoir quand le Play est terminé pour attendre et enchaîner seulement à ce moment-là ?
Dans l'état actuel, il n'y a aucun moyen.

Citation :
Bien sûr, ce serait mieux si M. PANORAMIC nous créait une possibilité de gérer la file sonore, mais on va pas être trop exigeant.
J'ai codé et testé une commande PLAY_WAIT qui joue le son et qui attend la fin pour redonner la main à l'application.
Code:
sound 1
file_load 1,"son1.wav"
play_wait 1
file_load 1,"son2.wav"
play_wait 1:rem ou play 1 tout simplement
Les 2 sons son1.wav et son2.wav sont joués l'un après l'autre.

Cette commande sera disponible dans une version de travail (version "instantanée") qui sortira dans quelques jours.

Je ne veux pas anticiper, mais cette version aura aussi:
- le point-virgule utilisable dans print (print a;b;"aaa";c$ qui équivaut à print str$(a)+str$(b)+"aaa"+c$),
- l'apostrophe pour mettre un commentaire (tout comme rem),
- deux nouvelles commandes Excel,
- un input modifié (affichage sur la ligne de saisie),
- peut-être un nouvel objet: SPIN (si le codage est suffisamment avancé),
etc.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Utilisation de PLAY Empty
MessageSujet: Re: Utilisation de PLAY   Utilisation de PLAY EmptyMar 22 Sep 2009 - 14:18

Je crois comprendre que le PLAY était plutôt dans l'esprit de jouer un fond sonore pendant qu'on faisait autre chose (jeux par exemple), dans ce cas on s'en fiche de savoir quand c'est fini.
Mais dans mon cas, le Play_Wait devrait me convenir tout à fait et simplifier mon programme au maximum.
PS ce que je ne saisis pas bien, c'est comment tu gères le play_wait s'il n'y a aucun moyen de savoir quand le play est terminé ?

Bonnes nouvelles aussi pour le ';', l'apostrophe etc.
Que du bon, comme toujours, merci Jack.
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

Utilisation de PLAY Empty
MessageSujet: Re: Utilisation de PLAY   Utilisation de PLAY EmptyMar 22 Sep 2009 - 16:40

Citation :
ce que je ne saisis pas bien, c'est comment tu gères le play_wait s'il n'y a aucun moyen de savoir quand le play est terminé ?
C'est archi simple. Pour jouer un son (ou une musique), j'appelle des API Windows.
Pour PLAY, je demande à Windows lors de l'appel qu'il rende la main immédiatement à l'application. Le son ou la musique sont alors joués "en arrière plan".
Dans le cas de PLAY_WAIT, je demande à Windows de ne rendre la main à l'application que lorsque le son ou la musique est terminé.

Je ne connais pas du tout la durée pendant laquelle le son ou la musique sera joué, c'est Windows qui se débrouille: on demande un "service" et c'est Windows qui gère.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Utilisation de PLAY Empty
MessageSujet: Re: Utilisation de PLAY   Utilisation de PLAY EmptyMar 22 Sep 2009 - 16:57

D'accord, je comprends.
Question à mille francs: et si on voulait interrompre le morceau en cours, un genre de PLAY_STOP (attention, j'ai pas dit PLAY_MATE mais ça pourrait, comme mat aux échecs), par exemple pour faire une pause, ou passer au suivant, ou revenir au précédent, ou simplement tout arrêter prématurément ?
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5948
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Utilisation de PLAY Empty
MessageSujet: Re: Utilisation de PLAY   Utilisation de PLAY EmptyMar 22 Sep 2009 - 17:10

Pourtant PLAY_MATE c'était sympa.
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2692
Date d'inscription : 13/09/2009

Utilisation de PLAY Empty
MessageSujet: Super   Utilisation de PLAY EmptyMer 23 Sep 2009 - 19:20

Super, les perspectives !
J'attend avec impatience la version 9.15 !
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Contenu sponsorisé





Utilisation de PLAY Empty
MessageSujet: Re: Utilisation de PLAY   Utilisation de PLAY Empty

Revenir en haut Aller en bas
 
Utilisation de PLAY
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Au sujet de PLAY
» Utilisation de SearchStringList.
» Problème avec la fonction 'instr'.
» Utilisation de MAIN_MENU
» Play avec Movie

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: