FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Demande urgente en maths.
par JL35 Aujourd'hui à 21:21

» Compilateur FBPano
par jean_debord Aujourd'hui à 11:24

» Problème de math
par braveen Aujourd'hui à 10:53

» A propos des attributs de fichier
par papydall Hier à 14:33

» Problème de math
par Marc37 Sam 21 Oct 2017 - 23:04

» I Love You
par papydall Sam 21 Oct 2017 - 19:22

» Un petit "coucou" à tous les Panoramiciens !
par mindstorm Sam 21 Oct 2017 - 17:06

» MARK_ON déclenche un événement ON_CLICK à la place de ...
par Jean Claude Mer 18 Oct 2017 - 18:08

» mise a jour calculatrice
par joeeee2017 Mer 18 Oct 2017 - 15:57

» [solved] 3D_LINE How to ?
par Jicehel Mer 18 Oct 2017 - 11:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Mar 17 Oct 2017 - 18:49

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» Calculatrice
par Jean Claude Sam 14 Oct 2017 - 12:30

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Fonction Beep de kernel32.dll

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
papydall

avatar

Nombre de messages : 5551
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Fonction Beep de kernel32.dll   Ven 3 Jan 2014 - 4:26

Salut tout le monde.

La commande BEEP de Panoramic émet un son bref.
Seulement, chez moi (sous XP)  je n’obtiens  aucun  son avec cette commande.

La kernel32.dll possède une fonction Beep qui requiert deux paramètres : fréquence (en Hertz) et durée (en millisecondes).
En jouant sur ces deux paramètres, on peut obtenir des sons intéressants.
A vos marques, prêts, partez !  
N’oubliez pas de régler vos haut-parleurs !



Code:
dim frequence,duree,ret
hide 0 : dll_on "kernel32.dll"
duree = 50
' Gérérer un son sur le haut-parleur du PC
' Paramètres : frequence en hertz; duree en millisecondes
for frequence = 100 to 10000 step 100
    ret = dll_call2("Beep",frequence,duree)
    ret = dll_call2("Beep",frequence/100,duree*2)
    ret = dll_call2("Beep",frequence/20,duree*1.5)
next frequence
dll_off
message "Terminé"
terminate
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Fonction Beep de kernel32.dll   Ven 3 Jan 2014 - 9:25

En effet, c'est simple à utiliser et efficace Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1086
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Fonction Beep de kernel32.dll   Ven 3 Jan 2014 - 9:59

Bonjour Papydall  Smile 
Cette fonction est intéressante, je l'avais déjà remarqué, mais je ne l'avais pas encore exploité.
Donc, on peut en tirer une utilisation toute simple, un diapason ou accordeur pour un musicien. Juste donner le "LA" à 440 hz ce qui permet d'accorder la plus grande partie des instruments de musique, bien que certains instruments peuvent s'accorder à 442 hz ou autre valeur... Là, seul le musicien professionnel peut faire la différence à l'oreille.
Code:
' ACCORDEUR
print "un click ou une touche pour arrêter le programme"
dim res%
dll_on "kernel32.dll"
repeat
   res%=dll_call2("Beep",440,1000)
until scancode<>0
dll_off
terminate
A+  Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1086
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Fonction Beep de kernel32.dll   Ven 3 Jan 2014 - 10:29

Dans ce programme, nous avons presque toutes les fréquences audibles des infra son aux ultra sons, mais le problème c'est que panoramic n'accepte que des valeurs entières dans les dll, et c'est bien dommage, mais qu'importe, vous ne ferez certainement pas la différence à l'oreille.
Les notes de musique sont en notation américaine: A pour LA, B pour SI, C pour DO, D pour RÉ, E pour MI, F pour FA et G pour SOL. À cela s'ajoute des "b" pour bémol et "#" pour dièse, et les numéros indiquent l'octave dans lequel la note est jouée.
Code:
data "C0",32.70,"Db0",34.65,"D0",36.71,"Eb0",38.89,"E0",41.20,"F0",43.65,"F#0",46.25,"G0",49.00,"G#0",51.91,"A0",55.00,"Bb0",58.27,"B0",61.74
data "C1",65.41,"Db1",69.30,"D1",73.42,"Eb1",77.78,"E1",82.41,"F1",87.31,"F#1",92.50,"G1",98.00,"G#1",103.83,"A1",110.00,"Bb1",116.54,"B1",123.47
data "C2",130.81,"Db2",138.59,"D2",146.83,"Eb2",155.56,"E2",164.81,"F2",174.61,"F#2",185.00,"G2",196.00,"G#2",207.65,"A2",220.00,"Bb2",233.08,"B2",246.94
data "C3",261.63,"Db3",277.18,"D3",293.66,"Eb3",311.13,"E3",329.63,"F3",349.23,"F#3",369.99,"G3",392.00,"G#3",415.30,"A3",440.00,"Bb3",466.16,"B3",493.88
data "C4",523.25,"Db4",554.37,"D4",587.33,"Eb4",622.25,"E4",659.26,"F4",698.46,"F#4",739.99,"G4",783.99,"G#4",830.61,"A4",880.00,"Bb4",932.33,"B4",987.77
data "C5",1046.50,"Db5",1108.73,"D5",1174.66,"Eb5",1244.51,"E5",1318.51,"F5",1396.91,"F#5",1479.98,"G5",1567.98,"G#5",1661.22,"A5",1760.00,"Bb5",1864.66,"B5",1975.53
data "C6",2093.00,"Db6",2217.46,"D6",2349.32,"Eb6",2489.02,"E6",2637.02,"F6",2793.83,"F#6",2959.96,"G6",3135.96,"G#6",3322.44,"A6",3520.00,"Bb6",3729.31,"B6",3951.07
data "C7",4186.01,"Db7",4434.92,"D7",4698.64,"Eb7",4978.03,"E7",5274.04,"F7",5587.65,"F#7",5919.91,"G7",6271.93,"G#7",6644.88,"A7",7040.00,"Bb7",7458.62,"B7",7902.13

label joue,fin
dim a,b,n$,freq(96),res%,note%

dll_on "kernel32.dll"

on_close 0,fin

restore
for a=0 to 84 step 12
   for b=1 to 12
      read n$
      read freq(a+b)
      button a+b
      caption a+b,n$
      width a+b,30
      top a+b,2*a
      left a+b,(30*b)+50
      on_click (a+b),joue
   next b
next a

end

joue:
   note%=freq(number_click)
   res%=dll_call2("Beep",note%,1000)
return

fin:
dll_off
terminate
A+  Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jean_debord

avatar

Nombre de messages : 757
Age : 63
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Fonction Beep de kernel32.dll   Ven 3 Jan 2014 - 10:57

bignono a écrit:
panoramic n'accepte que des valeurs entières dans les dll

On peut passer l'adresse d'une variable entière ou chaîne de caractères, mais il faut que la fonction de la DLL ait été programmée pour recevoir une telle adresse. Avec les DLL que l'on écrit soi-même cela ne pose pas de problème. Avec les DLL préprogrammées, comme celles de Windows, c'est une autre affaire. Il faudrait voir les déclarations des fonctions. Je n'ai pas vérifié.

Donc, comme l'a déjà fait remarquer Klaus, il faudra presque toujours faire une DLL intermédiaire pour assurer la compatibilité entre les types de variables et les modes d'appel de Panoramic et ceux de la DLL (ou bibliothèque statique) que l'on veut exploiter.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Fonction Beep de kernel32.dll   Ven 3 Jan 2014 - 11:50

En l'occurence, la DLL intermédiaire pourrait directement gérer les notes données par bignono et on pourrait avoir 2 appels, soit avec la fréquence et la durée, soit avec la note et la durée.
Voir si on utilise le principe que Klaus avait utilisé si je me souvient bien, régler le volume de la note (pas sûr, mais il me semble que Klaus l'avait fait)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5551
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Fonction Beep de kernel32.dll   Ven 3 Jan 2014 - 17:52

Salut tout le monde.

Je continue à m’amuser avec les DLLs.
Cette fois-ci, j’expérimente la fonction Ellipse de gdi32.dll qui (comme son nom l’indique) dessine une ellipse (éventuellement un cercle).

Code:
rem Fonction Ellipse de gdi32.dll pour dessiner une ellipse (et accessoirement un cercle)
dim hDC,x1,y1,x2,y2, ret
hDC = handle_canvas(0) : ' Handle_canvas de la FORM sur laquelle on dessine
' On définit un rectangle dans lequel sera placé l'ellipse
' Pour dessiner un cercle, il faut donc faire un carré
x1 = 10 : y1 = 100  : ' Coordonnées du point haut/gauche du rectangle
x2 = 300 : y2 = 200 : ' Coordonnées du point bas/droit du rectangle
dll_on "gdi32.dll"
ret = dll_call5("Ellipse",hDC,x1,y1,x2,y2)
dll_off
message "Terminé"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Invité
Invité



MessageSujet: Re: Fonction Beep de kernel32.dll   Ven 3 Jan 2014 - 20:47

Bonsoir
J'ai peu de temps, mais j'ai été curieux de regarder ton petit programme Papydall
C'est curieux que cela fonctionne chez toi.
Moi j'obtiens le message suivant:
'2164337286' is not a valid integer value
Mais en mettant ret% à la place, cela fonctionne.
Revenir en haut Aller en bas
JL35



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

MessageSujet: Re: Fonction Beep de kernel32.dll   Ven 3 Jan 2014 - 22:23

C'est curieux, j'avais essayé tout à l'heure et ça marchait, suite au post de cosmos je réessaye et j'ai ce message invalid integer value.
Et même en mettant ret% au lieu de ret.
La fonction ne s'exécute que si je mets TOUTES les variables en entières (%).

Bien vu bignono pour ton clavier !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5551
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Fonction Beep de kernel32.dll   Ven 3 Jan 2014 - 23:45

Ce n’est pas si curieux que ça !
En effet, la fonction Ellipse  de gdi32.dll demande que tous les paramètres transmis soient du type entier.
Or, moi je ne suis pas ami avec le signe % (allez savoir pourquoi !).
La valeur mentionnée par cosmos70 est celle de hDC qui est le handle_canvas(0) (qui peut être différente selon le cas)
ret est le code de retour de la fonction qui est , soit 0 (la fonction n’a pas abouti) soit une valeur non-zéro (1 par exemple).

Morale de l’histoire : je devrai faire la paix avec le % et déclarer toutes les variables entières en leur restituant leur si cher pourcent !  Laughing Laughing 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



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

MessageSujet: Re: Fonction Beep de kernel32.dll   Sam 4 Jan 2014 - 0:00

Salut papydall, bien d'accord sur la nécessité de valeurs entières, mais ce que je trouvais curieux c'est que ça ait marché précédemment avec des valeurs non déclarées entières (sans le %), comme dans ton exemple.
Ca veut dire que parfois elles sont considérées entières d'office ?

Je remarque également que l'ellipse est tracée 'pleine', avec un fond. Y aurait-il un paramètre pour ne tracer que le contour ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5551
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Fonction Beep de kernel32.dll   Sam 4 Jan 2014 - 0:33

JL35 a écrit:
Je remarque également que l'ellipse est tracée 'pleine', avec un fond. Y aurait-il un paramètre pour ne tracer que le contour ?

Chez moi (encore sous XP !) l’ellipse n’est pas ‘pleine’.
La voici




NB : Je ne connais pas d'autre paramètre qui fait que l'ellipse soit pleine ou vide.
Edit
Mais il existe une fonction FloodFill de gdi32.dll qui remplit une zone délimitée par une couleur donnée.
FloodFill nécessite les paramètres suivants :
hDC : le Handle vers la zone à remplir
x et y : coordonnées d’un point à l’intérieur de la zone à remplir
crColor : couleur de remplissage à utiliser
Remarque : les 4 paramètres doivent être du type entier.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



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

MessageSujet: Re: Fonction Beep de kernel32.dll   Sam 4 Jan 2014 - 1:06

Désolé papydall, mais pour moi l'ellipse est bien pleine
Si je reprends ton exemple et que je trace deux ellipses, la deuxième recouvre la première (sous W7, mais ça ne doit pas changer grand chose):
Code:
rem Fonction Ellipse de gdi32.dll pour dessiner une ellipse (et accessoirement un cercle)
dim hDC%,x1%,y1%,x2%,y2%, ret%
hDC% = handle_canvas(0) : ' Handle_canvas de la FORM sur laquelle on dessine
' On définit un rectangle dans lequel sera placé l'ellipse
' Pour dessiner un cercle, il faut donc faire un carré
x1% = 10 : y1% = 100  : ' Coordonnées du point haut/gauche du rectangle
x2% = 300 : y2% = 200 : ' Coordonnées du point bas/droit du rectangle
dll_on "gdi32.dll"
ret% = dll_call5("Ellipse",hDC%,x1%,y1%,x2%,y2%)
x1%=50: x2%=350
ret% = dll_call5("Ellipse",hDC%,x1%,y1%,x2%,y2%)
dll_off
message "Terminé"

C'est bien d'avoir une fonction pour remplir, ce qu'il faudrait ici c'est une fonction pour vider !  Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Fonction Beep de kernel32.dll   Sam 4 Jan 2014 - 1:40

ok, la fonction "rectangle" fonctionne aussi. Par contre, si tu sais changer la couleur du tracé, ça pourrait être sympa pour ne pas forcément dessiner en noir.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5551
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Fonction Beep de kernel32.dll   Sam 4 Jan 2014 - 1:47

Code:
dim hDC%,x1%,y1%,x2%,y2%,ret%
hDC% = handle_canvas(0)
dll_on "gdi32.dll"
for x2% = 60 to 460 step 2
    x1% = x2%-60 : y1% = x2%-60 : y2% = 460-x2%
    ret% = dll_call5("Ellipse",hDC%,x1%,y1%,x2%,y2%)
next x2%
dll_off
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



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

MessageSujet: Re: Fonction Beep de kernel32.dll   Sam 4 Jan 2014 - 16:20

C'est joli, et on peut faire plein de variations dans le même style, mais ça montre bien que la figure est pleine... de blanc.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5551
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Fonction Beep de kernel32.dll   Sam 4 Jan 2014 - 19:07

ou plutôt vide … de couleur !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé




MessageSujet: Re: Fonction Beep de kernel32.dll   

Revenir en haut Aller en bas
 
Fonction Beep de kernel32.dll
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» probleme avec alerte sonore
» La commande BEEP n'émet aucun son

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: