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 |
|
|
| Du coup, j'ai un autre défi | |
| | Auteur | Message |
---|
jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Du coup, j'ai un autre défi Ven 23 Juin 2023 - 15:14 | |
| Décidément, vous me direz...! Voilà, j'ai un autre truc pas facile, que je cherche à faire : Quand on fonctionne en midi_play on peut modifier le volume avec midi_volume, mais quand on fonctionne en play avec un sound et des mp3, peut-on modifier le volume à partir du tableau panoramic avec un track_bar ? Faut-il passer par une formule DOS ou par un dll ? Est-ce quelqu'un a une réponse à ce problème (ardu ?) ??? | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Du coup, j'ai un autre défi Dim 25 Juin 2023 - 17:28 | |
| Bonjour à tous ! @JJN4 - Citation :
- peut-on modifier le volume
à partir du tableau panoramic avec un track_bar ? Je n’ai pas réussi depuis Panoramic. Pour faire court, il n’est pas possible d’envoyer la valeur 0xFFFFFFFF comme paramètre dans un DLL_CALL, ni un NULL. Autrement on aurait pu employer la DLL Windows winmm…A défaut, je te propose cette solution avec des boutons +Volume, Mute et -Volume. - Code:
-
' touches +Volume, Mute, -Volume label moinsVolume, Mute, plusVolume
dim res%
button 1 top 1,50 left 1,50 caption 1,"-Volume" on_click 1,moinsVolume
button 2 top 2,50 left 2,150 caption 2,"Mute" on_click 2,mute
button 3 top 3,50 left 3,250 caption 3,"+Volume" on_click 3,plusVolume
dll_on "user32.dll"
end ' ------------------------------------------------------------------------------ moinsVolume: res% = dll_call4("keybd_event",hex("AE"),0,0,0) return ' ------------------------------------------------------------------------------ mute: res% = dll_call4("keybd_event",hex("AD"),0,0,0) return ' ------------------------------------------------------------------------------ plusVolume: res% = dll_call4("keybd_event",hex("AF"),0,0,0) return
Bonne programmation !
Dernière édition par Marc le Lun 26 Juin 2023 - 20:46, édité 1 fois | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Du coup, j'ai un autre défi Lun 26 Juin 2023 - 11:05 | |
| Bonjour à tous @Marc Il est possible d'envoyer la valeur 0xFFFFFFFF à un dll_call, mais elle vaut -1 car panoramic l'interprète comme un 32 bits signé. Mais du point de vu hexadécimal, c'est bien "0xFFFFFFFF" et "11111111111111111111111111111111" en binaire qui est reçu par la dll. Pour envoyer des entiers de plus de 32 bits dans un dll_call, tu peux faire comme ça: - Code:
-
peek_reverse
' null% = 0 pour les dll windows dim null% null%=0
' créer un entier 32 bits (ou plus) dim int32$ int32$=string$(32,chr$(255)) :' 0xFFFFFFFF
' adresse de l'entier print peek32(adr(int32$))
dim tmp% : tmp% = peek32(adr(int32$)) :' A NE PAS FAIRE! Risque de plantage car la ' valeur de peek32(adr(int32$)) évolue au cours du programme. C'est une ' caractéristique de panoramic
' exemple d'appel: ' dll_callx("blabla",peek32(adr(int32$)),null%)
Je n'ai jamais eu de pb avec cette méthode. Par défaut, les NULL sont acceptés comme 0 dans les dll windows, ça ne pose pas de pb non plus. | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: Du coup, j'ai un autre défi Lun 26 Juin 2023 - 14:05 | |
| Merci pour vos réponses ! La formule de Marc a l'air de marcher et je n'ai pas compris les limites de 0xFFFF... et de Null. D'ailleurs, la formule a l'air de marcher pour tous les niveaux, y compris 100% et 0% ...??? Alors je ne sais pas quoi faire de l'ajout de Silverman. Sinon, j'ai une question subsidiaire : Comment savoir (en panoramic) quel est le volume (de 0 à 100) du son ??? Peut-être la même dll permet-elle de trouver la réponse ??? | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Du coup, j'ai un autre défi Lun 26 Juin 2023 - 20:01 | |
| Bonjour à tous ! 0xFFFFFFFF et NULL : Un grand merci Silverman pour ces bonnes nouvelles ! C’est super ! Donc, j’en reviens à la DLL winmm. Pour lire la valeur du volume affecté au programme Panoramic : - Code:
-
' lecture du niveau de volume droite et gauche de l'application Panoramic dim res%, volume%, voieDroite%, voieGauche%, NULL%
peek_reverse
dll_on "winmm"
' lecture niveau de volume droite et gauche res% = dll_call2("waveOutGetVolume",NULL%,adr(volume%))
' la variable volume% (32 bits soit 4 octets) représente les niveaux droite et gauche du volume ' les 2 octets de poids fort correspondent à la voie droite [0x0000,0xFFFF] ' les 2 octets de poids faible correspondent à la voie gauche ou signal mono [0x0000,0xFFFF] ' voie droite : voieDroite% = peek16(adr(volume%)+2) :' [0,65535]
' voie gauche : voieGauche% = peek16(adr(volume%)) :' [0,65535]
print "Niveau voie droite : " + str$(VoieDroite%) print "Niveau voie gauche ou mono : " + str$(voieGauche%)
end
Pour affecter une valeur de volume au programme Panoramic : - Code:
-
' régler un niveau de VOLUME pour l'application Panoramic
dim res%, volume$, voieDroite$, voieGauche$, NULL%
dll_on "winmm.dll"
' niveaux droite et gauche à 50% voieDroite$ = hex$(32767) :' [0,65535] voieGauche$ = hex$(32767) :' [0,65535]
while len(voieDroite$) < 4 voieDroite$ = "0" + voieDroite$ end_while
while len(voieGauche$) < 4 voieGauche$ = "0" + voieGauche$ end_while
volume$ = voieDroite$ + voieGauche$
res% = dll_call2("waveOutSetVolume",NULL%,hex(volume$))
end Exemple de réglage du volume à l’aide d’un track_bar (nom du fichier mp3 ligne 20 à ajuster): - Code:
-
' réglage VOLUME
dim res%, volume$, voieDroite$, voieGauche$, NULL%
label reglageVolume
peek_reverse
' potentiomètre de réglage du volume track_bar 1 top 1,10 width 1,300 min 1,0 max 1,100 position 1,100 :' mettre le curseur au max par défaut on_change 1,reglageVolume
' lire un mp3 pour tester l'action du réglage sound 10 file_load 10,"open.mp3" play 10
dll_on "winmm.dll"
end ' ------------------------------------------------------------------------------ reglageVolume: voieDroite$ = hex$(int(position(1) * 655)) voieGauche$ = hex$(int(position(1) * 655))
while len(voieDroite$) < 4 voieDroite$ = "0" + voieDroite$ end_while
while len(voieGauche$) < 4 voieGauche$ = "0" + voieGauche$ end_while
volume$ = voieDroite$ + voieGauche$ res% = dll_call2("waveOutSetVolume",NULL%,hex(volume$)) return Notes : - Contrairement à mon premier post avec les boutons + et – volume, ici on n’agit pas sur le réglage général (Master) mais uniquement sur le volume de l’application Panoramic : Capture d'écran du mixer audio de Windows 10- Au lancement du programme Panoramic, la voie son de Panoramic est au maximum (0xFFFFFFFF). Ce maximum est limité par la position du réglage MASTER.
Dernière édition par Marc le Sam 22 Juil 2023 - 18:56, édité 1 fois | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: Du coup, j'ai un autre défi Mar 27 Juin 2023 - 17:32 | |
| Finalement, je préfère la première formule avec des boutons. Celle-là mache bien. Pour ce qui est du dernier post, j'ai intégré les deux premiers essais dans le troisième, avec un track_bar, mais le résultat n'est pas génial. Au niveau du track_bar, l'évolution du volume n'est pas linéaire mais en zig-zag et la mesure du volume donne également un résultat en zig-zag (qui peut monter ou descendre quand le track_bar va vers la droite, et inversement) et le zig-zag de la mesure ne correspond pas au zig-zag du niveau d'écoute du volume. Bon, je suis conscient que c'est un niveau de programmation dur-dur !!! Et après tout, comme le première formule marche impeccable, elle me convient ! (quant à la mesure du niveau, après tout, c'était un luxe pas vraiment indispensable). Et merci pour tous ces efforts !!! | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Du coup, j'ai un autre défi Sam 22 Juil 2023 - 17:45 | |
| Bonjour à tous! Je réagit tardivement, mais le premier code du dernier post de Marc comporte une erreur. La voie de droite est l'octet de poids fort, donc l'adressage devrait ressembler à peek16(adr(volume%)+2) puisque les bits de poids forts sont à gauche. Or ce n'est pas le cas dans ce premier exemple; voieGauche% et voieDroite% sont inversées. Voici un exemple plus parlant je pense: - Code:
-
'
dim volume$, voieDroite$, voieGauche$ dim volume%
peek_reverse
' niveaux droite et gauche voieDroite$ = hex$(16384) :' [0,65535] voieGauche$ = hex$(32767) :' [0,65535]
while len(voieDroite$) < 4 voieDroite$ = "0" + voieDroite$ end_while
while len(voieGauche$) < 4 voieGauche$ = "0" + voieGauche$ end_while
volume$ = voieDroite$ + voieGauche$ print "volume$ = ",volume$ print
volume%=hex(volume$) print "voieDroite$ = ",hex$(peek16(adr(volume%)+2)) print "voieGauche$ = ",hex$(peek16(adr(volume%)))
end C'est peut être de là que vient l'effet zigzag de ton code | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Du coup, j'ai un autre défi Sam 22 Juil 2023 - 18:56 | |
| Bonjour à tous !
@Silverman
Ah oui, bien vu ! Effectivement j’ai inversé les voies droite et gauche ! Merci à toi, je rectifie de suite le code concerné.
| |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: Du coup, j'ai un autre défi Dim 23 Juil 2023 - 15:33 | |
| Ah oui, effectivement, là ça marche mieux ! Merci, les gars !!! | |
| | | Contenu sponsorisé
| Sujet: Re: Du coup, j'ai un autre défi | |
| |
| | | | Du coup, j'ai un autre défi | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |