Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| Fonction Beep de kernel32.dll | |
| | Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Fonction Beep de kernel32.dll Ven 3 Jan 2014 - 2: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
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Fonction Beep de kernel32.dll Ven 3 Jan 2014 - 7:25 | |
| En effet, c'est simple à utiliser et efficace | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Fonction Beep de kernel32.dll Ven 3 Jan 2014 - 7:59 | |
| Bonjour Papydall 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+ | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Fonction Beep de kernel32.dll Ven 3 Jan 2014 - 8: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+ | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Fonction Beep de kernel32.dll Ven 3 Jan 2014 - 8: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. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Fonction Beep de kernel32.dll Ven 3 Jan 2014 - 9: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) | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Fonction Beep de kernel32.dll Ven 3 Jan 2014 - 15: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é"
| |
| | | Invité Invité
| Sujet: Re: Fonction Beep de kernel32.dll Ven 3 Jan 2014 - 18: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. |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Fonction Beep de kernel32.dll Ven 3 Jan 2014 - 20: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 ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Fonction Beep de kernel32.dll Ven 3 Jan 2014 - 21: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 ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Fonction Beep de kernel32.dll Ven 3 Jan 2014 - 22: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 ? | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Fonction Beep de kernel32.dll Ven 3 Jan 2014 - 22: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. EditMais 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. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Fonction Beep de kernel32.dll Ven 3 Jan 2014 - 23: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 ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Fonction Beep de kernel32.dll Ven 3 Jan 2014 - 23: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. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Fonction Beep de kernel32.dll Ven 3 Jan 2014 - 23: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
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Fonction Beep de kernel32.dll Sam 4 Jan 2014 - 14: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. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Fonction Beep de kernel32.dll Sam 4 Jan 2014 - 17:07 | |
| ou plutôt vide … de couleur ! | |
| | | Contenu sponsorisé
| Sujet: Re: Fonction Beep de kernel32.dll | |
| |
| | | | Fonction Beep de kernel32.dll | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |