Forum Liberty Basic France

Général » Générateur BF Ou qui tente de l'être
Le 14/12/2015 à 10h42

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 336
(*** titre d'origine : entrer au clavier une valeur numérique. ***)

Ce n'est pas que je sois foncièrement contre cet "OK" de validation, mais il me semble plus simple, quand on entre un nombre au clavier, de finir par un "enter" au lieu de lâcher le clavier et de courir après la souris.

Hello tout le monde !

Ceci est de l'apprentissage de JustBasic, les fréquences utilisées dans le programme ne sont qu'un prétexte et je n'ai pas cherché à savoir si dans la vraie vie on peut les additionner comme ça. Sans doutes oui, mais c'est pas le but...

Comme c'est de la recherche, il y a aussi des bouts de code qui ne sont pas de mon fait (merci à Roland et à l'illustre inconnu).

Cette version est à base de roues codeuses.

A chaque changement de chiffre d'une roue, le nombre correspondant est recalculé.

Le programme devient long parce que j'ai fait au plus simple. Faire plus compact ajoutera un couche de réflexion, mais il y a sûrement moyen.

Il y a 4 nombres, l'attribution de leurs chiffres est codée en dur dans le programme, ce qui revient à une floppée de sous-programmes parfois quasiment identiques, aux numéros de boutons près.

Telles qu'elles sont actuellement programmées, les roues codeuses utilisent 2 buttons et 1 statictext par chiffre.

Le clavier n'est pas pris en compte.

Les chiffres sont indépendants les uns des autres, et passer de 9 à 0 n'incrémentera pas la roue directement à gauche. il y a quand même une exception pour le contrôle de volume : quand il dépassera 100, il sera automatiquement plafonné à 100.

Il me semble qu'on ne peut pas mettre plus de 100 contrôles par programme, donc 33 roues maxi ?

Voilà la chose, bonne lecture^^ :
Code VB :
 
dim courbeF1(500)
dim courbeF2(500)
dim courbeF3(500)
 
 
'data
pi=3.1415926536
t=0
 
'longueur division
longdiv=50  'pixels entre chaque division. considérer la division comme un trait sans épaisseur
            'même si la division fera un pixel de large

 
'secondes par division
long1=0.005
long2=0.002
long3=0.001
long4=0.0005
long5=0.0002
long6=0.0001
 
'secondes par division, pour affichage
long1aff$=str$(long1*1000)
long2aff$=str$(long2*1000)
long3aff$=str$(long3*1000)
long4aff$=str$(long4*1000)
long5aff$=str$(long5*1000)
long6aff$=str$(long6*1000)
 
gosub [rouesCodeuses] 'pour préparer l'affichage d'un bouton "up", d'un "down" et d'un chiffre
'(les valeurs des fréquences et volumes sont pré-réglées dans [rouesCodeuses]
F1=nombre1:T1=1/F1:omega1=2*pi*F1
F2=nombre3:T2=1/F2:omega2=2*pi*F2
 
    nomainwin
    WindowWidth = 800: UpperLeftX = 200
    WindowHeight = 600: UpperLeftY = 200
    graphicbox  #1.gb 280,15,500,500
 
 
    groupbox #1.gbx3, "Base de temps", 8, 395, 225, 100
    radiobutton #1.rdb1, long1aff$+" ms par div", [SParDiv1_On], [SParDiv1_off], 26, 415, 96, 20
    radiobutton #1.rdb2, long2aff$+" ms par div", [SParDiv2_On], [SParDiv2_Off], 26, 440, 96, 20
    radiobutton #1.rdb3, long3aff$+" ms par div", [SParDiv3_On], [SParDiv3_Off], 26, 465, 96, 20
    radiobutton #1.rdb4, long4aff$+" ms par div", [SParDiv4_On], [SParDiv4_off], 126, 415, 96, 20
    radiobutton #1.rdb5, long5aff$+" ms par div", [SParDiv5_On], [SParDiv5_Off], 126, 440, 96, 20
    radiobutton #1.rdb6, long6aff$+" ms par div", [SParDiv6_On], [SParDiv6_Off], 126, 465, 96, 20
 
 
    open "..." for window_nf as #1
    #1 "trapclose [quit]"
 
    print #1.Nbr1,fonteNom$
    print #1.Ch1,fonte$
    print #1.Ch2,fonte$
    print #1.Ch3,fonte$
    print #1.Ch4,fonte$ 
    print #1.Ch5,fonte$
 
    print #1.Nbr2,fonteNom$ 
    print #1.Ch6,fonte$
    print #1.Ch7,fonte$ 
    print #1.Ch8,fonte$ 
 
    print #1.Nbr3,fonteNom$
    print #1.Ch9,fonte$
    print #1.Ch10,fonte$
    print #1.Ch11,fonte$
    print #1.Ch12,fonte$ 
    print #1.Ch13,fonte$
 
    print #1.Nbr4,fonteNom$ 
    print #1.Ch14,fonte$
    print #1.Ch15,fonte$ 
    print #1.Ch16,fonte$ 
 
    print #1.Ch1,chiffre1$ 
    print #1.Ch2,chiffre2$ 
    print #1.Ch3,chiffre3$
    print #1.Ch4,chiffre4$ 
    print #1.Ch5,chiffre5$
 
    print #1.Ch6,chiffre6$
    print #1.Ch7,chiffre7$ 
    print #1.Ch8,chiffre8$ 
 
    print #1.Ch9,chiffre9$ 
    print #1.Ch10,chiffre10$ 
    print #1.Ch11,chiffre11$
    print #1.Ch12,chiffre12$ 
    print #1.Ch13,chiffre13$
 
    print #1.Ch14,chiffre14$
    print #1.Ch15,chiffre15$ 
    print #1.Ch16,chiffre16$
 
    print #1.rdb3,"setfocus"
    gosub [sinusoides] 'calcul sinusoides, dessin écran et affichage sinusoides

    #1.gb "flush"
 
    wait
 
 
Function Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)
    value = chiffre1*10000+chiffre2*1000+chiffre3*100+chiffre4*10+chiffre5
    Nombre5ch=value
    End Function
 
 
[quit]
    close #1
    end
 
[SParDiv1_On] deltaT=long1/longdiv:gosub [sinusoides]:wait
[SParDiv1_off] wait
 
[SParDiv2_On]  deltaT=long2/longdiv:gosub [sinusoides]:wait
[SParDiv2_Off] wait
 
[SParDiv3_On]  deltaT=long3/longdiv:gosub [sinusoides]:wait
[SParDiv3_Off] wait
 
[SParDiv4_On]  deltaT=long4/longdiv:gosub [sinusoides]:wait
[SParDiv4_off] wait
 
[SParDiv5_On]  deltaT=long5/longdiv:gosub [sinusoides]:wait
[SParDiv5_Off] wait
 
[SParDiv6_On]  deltaT=long6/longdiv:gosub [sinusoides]:wait
[SParDiv6_Off] wait
 
 
[sinusoides]
    'calcul des sinusoides
    t=0
    for a=0 to 499
        courbeF1(a)=(vol1*sin(omega1*t))/2
        courbeF2(a)=(vol2*sin(omega2*t))/2
        'courbeF3(a)=40*sin(omega3*t)
        courbeF3(a)=courbeF1(a)+courbeF2(a)
        t=t+deltaT
    next
 
    'dessin de l'écran
    cls
    #1.gb "down ; fill 0 106 53":#1.gb "color 157 157 0"
    for x= 0 to 500 step longdiv
        #1.gb "line ";x;" 0 ";x;" 500"
    next
    for y= 0 to 500 step longdiv
        #1.gb "line 0 ";y;" 500 ";y
    next
 
    'affichage des courbes sur l'écran
    #1.gb "color green"
    ph=180:midY1=50:midY2=150:midY3=350
    oldY1=midY1:oldY2=midY2:oldY3=midY3
    for n= 0 to 499
        x=n
        y=midY1+courbeF1(n)
            #1.gb "line ";oldX1;" ";oldY1;" ";x;" ";y
            oldX1=x:oldY1=y
 
        y=midY2+courbeF2(n)
            #1.gb "line ";oldX2;" ";oldY2;" ";x;" ";y
            oldX2=x:oldY2=y
 
        y=midY3+courbeF3(n)
            #1.gb "line ";oldX3;" ";oldY3;" ";x;" ";y
            oldX3=x:oldY3=y
 
    next
    return
 
 
 
 
[chiffre1Up]
    if chiffre1=9 then chiffre1=0 else chiffre1=chiffre1+1
    nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)
    chiffre1$=str$(chiffre1)
    print #1.Ch1,chiffre1$
    omega1=2*pi*nombre1:gosub [sinusoides]
    wait
 
[chiffre1Down]
    if chiffre1=0 then chiffre1=9 else chiffre1=chiffre1-1
    nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)
    chiffre1$=str$(chiffre1)
    print #1.Ch1,chiffre1$ 
    omega1=2*pi*nombre1:gosub [sinusoides]
    wait
 
[chiffre2Up]
    if chiffre2=9 then chiffre2=0 else chiffre2=chiffre2+1
    nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)
    chiffre2$=str$(chiffre2)
    print #1.Ch2,chiffre2$ 
    omega1=2*pi*nombre1:gosub [sinusoides]
    wait
 
[chiffre2Down]
    if chiffre2=0 then chiffre2=9 else chiffre2=chiffre2-1
    nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)
    chiffre2$=str$(chiffre2)
    print #1.Ch2,chiffre2$
    omega1=2*pi*nombre1:gosub [sinusoides]
    wait
 
[chiffre3Up]
    if chiffre3=9 then chiffre3=0 else chiffre3=chiffre3+1
    nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)
    chiffre3$=str$(chiffre3)
    print #1.Ch3,chiffre3$ 
    omega1=2*pi*nombre1:gosub [sinusoides]
    wait
 
[chiffre3Down]
    if chiffre3=0 then chiffre3=9 else chiffre3=chiffre3-1
    nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)
    chiffre3$=str$(chiffre3)
    print #1.Ch3,chiffre3$ 
    omega1=2*pi*nombre1:gosub [sinusoides]
    wait
 
[chiffre4Up]
    if chiffre4=9 then chiffre4=0 else chiffre4=chiffre4+1
    nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)
    chiffre4$=str$(chiffre4)
    print #1.Ch4,chiffre4$
    omega1=2*pi*nombre1:gosub [sinusoides]
    wait
 
[chiffre4Down]
    if chiffre4=0 then chiffre4=9 else chiffre4=chiffre4-1
    nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)
    chiffre4$=str$(chiffre4)
    print #1.Ch4,chiffre4$ 
    omega1=2*pi*nombre1:gosub [sinusoides]
    wait
 
[chiffre5Up]
    if chiffre5=9 then chiffre5=0 else chiffre5=chiffre5+1
    nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)
    chiffre5$=str$(chiffre5)
    print #1.Ch5,chiffre5$ 
    omega1=2*pi*nombre1:gosub [sinusoides]
    wait
 
[chiffre5Down]
    if chiffre5=0 then chiffre5=9 else chiffre5=chiffre5-1
    nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)
    chiffre5$=str$(chiffre5)
    print #1.Ch5,chiffre5$
    omega1=2*pi*nombre1:gosub [sinusoides]
    wait
 
[chiffre6Up]
    if chiffre6=0 then chiffre6=1 else chiffre6=0
    print #1.Ch6,str$(chiffre6)
    nombre2=Nombre5ch(0, 0, chiffre6, chiffre7, chiffre8)
    if nombre2>100 then gosub [ecrete]
    vol1=nombre2:gosub [sinusoides]
 
    wait
 
[chiffre6Down]
    if chiffre6=1 then chiffre6=0 else chiffre6=1
    print #1.Ch6,str$(chiffre6)
    nombre2=Nombre5ch(0, 0, chiffre6, chiffre7, chiffre8)
    if nombre2>100 then gosub [ecrete]
    vol1=nombre2:gosub [sinusoides]
    wait
 
[chiffre7Up]
    if chiffre7=9 then chiffre7=0 else chiffre7=chiffre7+1
    nombre2=Nombre5ch(0, 0, chiffre6, chiffre7, chiffre8)
    if nombre2>100 then gosub [ecrete]
    chiffre7$=str$(chiffre7):print #1.Ch7,chiffre7$ 
    vol1=nombre2:gosub [sinusoides]
    wait
 
[chiffre7Down]
    if chiffre7=0 then chiffre7=9 else chiffre7=chiffre7-1
    if chiffre6=1 then chiffre6=0:chiffre6$=str$(chiffre6):print #1.Ch6,chiffre6$
    nombre2=Nombre5ch(0, 0, chiffre6, chiffre7, chiffre8)
    if nombre2>100 then gosub [ecrete]
    chiffre7$=str$(chiffre7)
 
    print #1.Ch7,chiffre7$ 
    vol1=nombre2:gosub [sinusoides]
    wait
 
 
[chiffre8Up]
    if chiffre8=9 then chiffre8=0 else chiffre8=chiffre8+1
    nombre2=Nombre5ch(0, 0, chiffre6, chiffre7, chiffre8)
    if nombre2>100 then gosub [ecrete]
    chiffre8$=str$(chiffre8)
    print #1.Ch8,chiffre8$
    vol1=nombre2:gosub [sinusoides]
    wait
 
[chiffre8Down]
    if chiffre8=0 then chiffre8=9 else chiffre8=chiffre8-1
    if chiffre6=1 then chiffre6=0:chiffre6$=str$(chiffre6):print #1.Ch6,chiffre6$
    nombre2=Nombre5ch(0, 0, chiffre6, chiffre7, chiffre8)
    if nombre2>100 then gosub [ecrete]
    chiffre8$=str$(chiffre8)
    print #1.Ch8,chiffre8$ 
    vol1=nombre2:gosub [sinusoides]
    wait
 
[chiffre9Up]
    if chiffre9=9 then chiffre9=0 else chiffre9=chiffre9+1
    nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13)
    chiffre9$=str$(chiffre9)
    print #1.Ch9,chiffre9$
    omega2=2*pi*nombre3:gosub [sinusoides]
    wait
 
[chiffre9Down]
    if chiffre9=0 then chiffre9=9 else chiffre9=chiffre9-1
    nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13)
    chiffre9$=str$(chiffre9)
    print #1.Ch9,chiffre9$ 
    omega2=2*pi*nombre3:gosub [sinusoides]
    wait
 
[chiffre10Up]
    if chiffre10=9 then chiffre10=0 else chiffre10=chiffre10+1
    nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13)
    chiffre10$=str$(chiffre10)
    print #1.Ch10,chiffre10$ 
    omega2=2*pi*nombre3:gosub [sinusoides]
    wait
 
[chiffre10Down]
    if chiffre10=0 then chiffre10=9 else chiffre10=chiffre10-1
    nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13)
    chiffre10$=str$(chiffre10)
    print #1.Ch10,chiffre10$
    omega2=2*pi*nombre3:gosub [sinusoides]
    wait
 
[chiffre11Up]
    if chiffre11=9 then chiffre11=0 else chiffre11=chiffre11+1
    nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13)
    chiffre11$=str$(chiffre11)
    print #1.Ch11,chiffre11$ 
    omega2=2*pi*nombre3:gosub [sinusoides]
    wait
 
[chiffre11Down]
    if chiffre11=0 then chiffre11=9 else chiffre11=chiffre11-1
    nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13)
    chiffre11$=str$(chiffre11)
    print #1.Ch11,chiffre11$ 
    omega2=2*pi*nombre3:gosub [sinusoides]
    wait
 
[chiffre12Up]
    if chiffre12=9 then chiffre12=0 else chiffre12=chiffre12+1
    nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13)
    chiffre12$=str$(chiffre12)
    print #1.Ch12,chiffre12$
    omega2=2*pi*nombre3:gosub [sinusoides]
    wait
 
[chiffre12Down]
    if chiffre12=0 then chiffre12=9 else chiffre12=chiffre12-1
    nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13)
    chiffre12$=str$(chiffre12)
    print #1.Ch12,chiffre12$ 
    omega2=2*pi*nombre3:gosub [sinusoides]
    wait
 
[chiffre13Up]
    if chiffre13=9 then chiffre13=0 else chiffre13=chiffre13+1
    nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13)
    chiffre13$=str$(chiffre13)
    print #1.Ch13,chiffre13$ 
    omega2=2*pi*nombre3:gosub [sinusoides]
    wait
 
[chiffre13Down]
    if chiffre13=0 then chiffre13=9 else chiffre13=chiffre13-1
    nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13)
    chiffre13$=str$(chiffre13)
    print #1.Ch13,chiffre13$
    omega2=2*pi*nombre3:gosub [sinusoides]
    wait
 
[chiffre14Up]
    if chiffre14=0 then chiffre14=1 else chiffre14=0
    print #1.Ch14,str$(chiffre14)
    nombre4=Nombre5ch(0, 0, chiffre14, chiffre15, chiffre16)
    if nombre4>100 then gosub [ecrete]
    vol2=nombre4:gosub [sinusoides]
 
    wait
 
[chiffre14Down]
    if chiffre14=1 then chiffre14=0 else chiffre14=1
    print #1.Ch14,str$(chiffre14)
    nombre4=Nombre5ch(0, 0, chiffre14, chiffre15, chiffre16)
    if nombre4>100 then gosub [ecrete]
    vol2=nombre4:gosub [sinusoides]
    wait
 
[chiffre15Up]
    if chiffre15=9 then chiffre15=0 else chiffre15=chiffre15+1
    print #1.Ch15,str$(chiffre15)
    nombre4=Nombre5ch(0, 0, chiffre14, chiffre15, chiffre16)
    if nombre4>100 then gosub [ecrete]
    vol2=nombre4:gosub [sinusoides]
    wait
 
[chiffre15Down]
    if chiffre15=0 then chiffre15=9 else chiffre15=chiffre15-1
    if chiffre14=1 then chiffre14=0:chiffre14$=str$(chiffre14):print #1.Ch14,chiffre14$
    nombre4=Nombre5ch(0, 0, chiffre14, chiffre15, chiffre16)
    if nombre4>100 then gosub [ecrete]
    chiffre15$=str$(chiffre15)
    print #1.Ch15,chiffre15$ 
    vol2=nombre4:gosub [sinusoides]
    wait
 
 
[chiffre16Up]
    if chiffre16=9 then chiffre16=0 else chiffre16=chiffre16+1
    nombre4=Nombre5ch(0, 0, chiffre14, chiffre15, chiffre16)
    if nombre4>100 then gosub [ecrete]
    vol2=nombre4:gosub [sinusoides]
    chiffre16$=str$(chiffre16)
    print #1.Ch16,chiffre16$
    wait
 
[chiffre16Down]
    if chiffre16=0 then chiffre16=9 else chiffre16=chiffre16-1
    if chiffre14=1 then chiffre14=0:chiffre14$=str$(chiffre14):print #1.Ch14,chiffre14$
    nombre4=Nombre5ch(0, 0, chiffre14, chiffre15, chiffre16)
    if nombre4>100 then gosub [ecrete]
    vol2=nombre4:gosub [sinusoides]
    chiffre16$=str$(chiffre16)
    print #1.Ch16,chiffre16$ 
    wait
 
[ecrete]
    if nombre2>100 then
        nombre2=100
        chiffre6=1:print #1.Ch6,str$(chiffre6)
        chiffre7=0:print #1.Ch7,str$(chiffre7)
        chiffre8=0:print #1.Ch8,str$(chiffre8)
    end if
 
    if nombre4>100 then
        nombre4=100
        chiffre14=1:print #1.Ch14,str$(chiffre14)
        chiffre15=0:print #1.Ch15,str$(chiffre15)
        chiffre16=0:print #1.Ch16,str$(chiffre16)
    end if
    return
 
 
[rouesCodeuses]
 
    'dimensions des roues
    hauteurNom=20
    largeur=20      'largeur des roues
    intervalleH=23   'intervalle entre roues
    separmilliers=10 'espace séparant les miliers des centaines
    hauteurB=20     'hauteur des boutons "up" et "dwn"
    intervalleV=2   'intervalle entre boutons et chiffre
    hauteurChif=25  'hauteur de la zone recevant le chiffre
    PasH=largeur+intervalle
    fonte$="!font arial 15 25"
    fonteNom$="!font arial 12"
 
    'disposition d'affichage nombre 1 à 5 chiffres
    nom1$="Fréquence 1:"
    PosXnb1=20
    PosYnb1=10
    nombre1=1200
    nombre1$=right$(space$(5) + str$(nombre1),5)
    largeurNom1=5*largeur
 
    'disposition d'affichage nombre 2 à 3 chiffres
    nom2$="Volume :"
    PosXnb2=180
    PosYnb2=10
    nombre2=70:vol1=nombre2
    nombre2$=right$(space$(3)  + str$(nombre2),3)
    largeurNom2=3*largeur
 
    'disposition d'affichage nombre 3 à 5 chiffres
    nom3$="Fréquence 2:"
    PosXnb3=20
    PosYnb3=110
    nombre3=1500
    nombre3$=right$(space$(5) + str$(nombre3),5)
    largeurNom3=5*largeur
 
    'disposition d'affichage nombre 4 à 3 chiffres
    nom4$="Volume :"
    PosXnb4=180
    PosYnb4=110
    nombre4=70:vol2=nombre4
    nombre4$=right$(space$(3)  + str$(nombre4),3)
    largeurNom4=3*largeur
 
 
    '**** affichage nombre 1 ****

    'nom du nombre
    XTitre1 = PosXnb1
    YTitre1 = PosYnb1
    statictext #1.Nbr1, nom1$, XTitre1, YTitre1, largeurNom1, hauteurNom
    PosYnb1 = PosYnb1 + hauteurNom + intervalleV
 
    'affichage du chiffre des dizaines de milliers du nombre 1
    chiffre1$ = mid$(nombre1$,1,1)
    chiffre1 = val(chiffre1$)
 
    X1 = PosXnb1
    Y1up = PosYnb1
    Y1ch = Y1up + hauteurB + intervalleV
    Y1dn = Y1ch + hauteurChif + intervalleV
 
    button #1.Ch1Up, "+", [chiffre1Up], UL, X1, Y1up, largeur, hauteurB
    statictext #1.Ch1, chiffre1$, X1, Y1ch, largeur, hauteurChif
    button #1.Ch1Dwn, "-", [chiffre1Down], UL, X1, Y1dn, largeur, hauteurB
 
 
    'affichage du chiffre des miliers du nombre 1
    chiffre2$=mid$(nombre1$,2,1)
    chiffre2=val(chiffre2$)
 
    X2 = X1 + intervalleH
    Y2up = PosYnb1
    Y2ch = Y2up + hauteurB + intervalleV
    Y2dn = Y2ch + hauteurChif + intervalleV
 
    button #1.Ch2Up, "+", [chiffre2Up], UL, X2, Y2up, largeur, hauteurB
    statictext #1.Ch2, chiffre2$, X2, Y2ch, largeur, hauteurChif
    button #1.Ch2Dwn, "-", [chiffre2Down], UL, X2, Y2dn, largeur, hauteurB
 
 
    'affichage du chiffre des centaines du nombre 1
    chiffre3$=mid$(nombre1$,3,1)
    chiffre3=val(chiffre3$)
 
    X3 = X2 + separmilliers + intervalleH
    Y3up = PosYnb1
    Y3ch = Y3up + hauteurB + intervalleV
    Y3dn = Y3ch + hauteurChif + intervalleV
 
    button #1.Ch3Up, "+", [chiffre3Up], UL, X3, Y3up, largeur, hauteurB
    statictext #1.Ch3, chiffre3$, X3, Y3ch, largeur, hauteurChif
    button #1.Ch3Dwn, "-", [chiffre3Down], UL, X3, Y3dn, largeur, hauteurB
 
 
    'affichage du chiffre des dizaines du nombre 1
    chiffre4$=mid$(nombre1$,4,1)
    chiffre4=val(chiffre4$)
 
    X4 = X3 + intervalleH
    Y4up = PosYnb1
    Y4ch = Y4up + hauteurB + intervalleV
    Y4dn = Y4ch + hauteurChif + intervalleV
 
    button #1.Ch4Up, "+", [chiffre4Up], UL, X4, Y4up, largeur, hauteurB
    statictext #1.Ch4, chiffre4$, X4, Y4ch, largeur, hauteurChif
    button #1.Ch4Dwn, "-", [chiffre4Down], UL, X4, Y4dn, largeur, hauteurB
 
 
    'affichage du chiffre des unités du nombre 1
    chiffre5$=mid$(nombre1$,5,1)
    chiffre5=val(chiffre5$)
 
    X5 = X4 + intervalleH
    Y5up = PosYnb1
    Y5ch = Y5up + hauteurB + intervalleV
    Y5dn = Y5ch + hauteurChif + intervalleV
 
    button #1.Ch5Up, "+", [chiffre5Up], UL, X5, Y5up, largeur, hauteurB
    statictext #1.Ch5, chiffre5$, X5, Y5ch, largeur, hauteurChif
    button #1.Ch5Dwn, "-", [chiffre5Down], UL, X5, Y5dn, largeur, hauteurB
 
 
    '**** affichage nombre 2 ****

    'nom du nombre
    XTitre2 = PosXnb2
    YTitre2 = PosYnb2
    statictext #1.Nbr2, nom2$, XTitre2, YTitre2, largeurNom2, hauteurNom
    PosYnb2 = PosYnb2 + hauteurNom + intervalleV
 
    'affichage du chiffre des centaines du nombre 2
    chiffre6$ = mid$(nombre2$,1,1)
    chiffre6 = val(chiffre6$)
 
    X6 = PosXnb2
    Y6up = PosYnb2
    Y6ch = Y6up + hauteurB + intervalleV
    Y6dn = Y6ch + hauteurChif + intervalleV
 
    button #1.Ch6Up, "+", [chiffre6Up], UL, X6, Y6up, largeur, hauteurB
    statictext #1.Ch6, chiffre6$, X6, Y6ch, largeur, hauteurChif
    button #1.Ch6Dwn, "-", [chiffre6Down], UL, X6, Y6dn, largeur, hauteurB
 
 
    'affichage du chiffre des dizaines du nombre 2
    chiffre7$=mid$(nombre2$,2,1)
    chiffre7=val(chiffre7$)
 
    X7 = X6 + intervalleH
    Y7up = PosYnb1
    Y7ch = Y7up + hauteurB + intervalleV
    Y7dn = Y7ch + hauteurChif + intervalleV
 
    button #1.Ch7Up, "+", [chiffre7Up], UL, X7, Y7up, largeur, hauteurB
    statictext #1.Ch7, chiffre7$, X7, Y7ch, largeur, hauteurChif
    button #1.Ch7Dwn, "-", [chiffre7Down], UL, X7, Y7dn, largeur, hauteurB
 
 
    'affichage du chiffre des unités du nombre 1
    chiffre8$=mid$(nombre2$,3,1)
    chiffre8=val(chiffre8$)
 
    X8 = X7 + intervalleH
    Y8up = PosYnb1
    Y8ch = Y8up + hauteurB + intervalleV
    Y8dn = Y8ch + hauteurChif + intervalleV
 
    button #1.Ch8Up, "+", [chiffre8Up], UL, X8, Y8up, largeur, hauteurB
    statictext #1.Ch8, chiffre8$, X8, Y8ch, largeur, hauteurChif
    button #1.Ch8Dwn, "-", [chiffre8Down], UL, X8, Y8dn, largeur, hauteurB
 
 
   '**** affichage nombre 3 ****

    'nom du nombre
    XTitre3 = PosXnb3
    YTitre3 = PosYnb3
    statictext #1.Nbr3, nom3$, XTitre3, YTitre3, largeurNom3, hauteurNom
    PosYnb3 = PosYnb3 + hauteurNom + intervalleV
 
    'affichage du chiffre des dizaines de milliers du nombre 3
    chiffre9$ = mid$(nombre3$,1,1)
    chiffre9 = val(chiffre9$)
 
    X9 = PosXnb3
    Y9up = PosYnb3
    Y9ch = Y9up + hauteurB + intervalleV
    Y9dn = Y9ch + hauteurChif + intervalleV
 
    button #1.Ch9Up, "+", [chiffre9Up], UL, X9, Y9up, largeur, hauteurB
    statictext #1.Ch9, chiffre9$, X9, Y9ch, largeur, hauteurChif
    button #1.Ch9Dwn, "-", [chiffre9Down], UL, X9, Y9dn, largeur, hauteurB
 
 
    'affichage du chiffre des miliers du nombre 3
    chiffre10$=mid$(nombre3$,2,1)
    chiffre10=val(chiffre10$)
 
    X10 = X9 + intervalleH
    Y10up = PosYnb3
    Y10ch = Y10up + hauteurB + intervalleV
    Y10dn = Y10ch + hauteurChif + intervalleV
 
    button #1.Ch10Up, "+", [chiffre10Up], UL, X10, Y10up, largeur, hauteurB
    statictext #1.Ch10, chiffre10$, X10, Y10ch, largeur, hauteurChif
    button #1.Ch10Dwn, "-", [chiffre10Down], UL, X10, Y10dn, largeur, hauteurB
 
 
    'affichage du chiffre des centaines du nombre 3
    chiffre11$=mid$(nombre3$,3,1)
    chiffre11=val(chiffre11$)
 
    X11 = X10 + separmilliers + intervalleH
    Y11up = PosYnb3
    Y11ch = Y11up + hauteurB + intervalleV
    Y11dn = Y11ch + hauteurChif + intervalleV
 
    button #1.Ch11Up, "+", [chiffre11Up], UL, X11, Y11up, largeur, hauteurB
    statictext #1.Ch11, chiffre11$, X11, Y11ch, largeur, hauteurChif
    button #1.Ch11Dwn, "-", [chiffre11Down], UL, X11, Y11dn, largeur, hauteurB
 
 
    'affichage du chiffre des dizaines du nombre 3
    chiffre12$=mid$(nombre3$,4,1)
    chiffre12=val(chiffre12$)
 
    X12 = X11 + intervalleH
    Y12up = PosYnb3
    Y12ch = Y12up + hauteurB + intervalleV
    Y12dn = Y12ch + hauteurChif + intervalleV
 
    button #1.Ch12Up, "+", [chiffre12Up], UL, X12, Y12up, largeur, hauteurB
    statictext #1.Ch12, chiffre12$, X12, Y12ch, largeur, hauteurChif
    button #1.Ch12Dwn, "-", [chiffre12Down], UL, X12, Y12dn, largeur, hauteurB
 
 
    'affichage du chiffre des unités du nombre 3
    chiffre13$=mid$(nombre3$,5,1)
    chiffre13=val(chiffre13$)
 
    X13 = X12 + intervalleH
    Y13up = PosYnb3
    Y13ch = Y13up + hauteurB + intervalleV
    Y13dn = Y13ch + hauteurChif + intervalleV
 
    button #1.Ch13Up, "+", [chiffre13Up], UL, X13, Y13up, largeur, hauteurB
    statictext #1.Ch13, chiffre13$, X13, Y13ch, largeur, hauteurChif
    button #1.Ch13Dwn, "-", [chiffre13Down], UL, X13, Y13dn, largeur, hauteurB
 
 
    '**** affichage nombre 4 ****

    'nom du nombre
    XTitre4 = PosXnb4
    YTitre4 = PosYnb4
    statictext #1.Nbr4, nom4$, XTitre4, YTitre4, largeurNom4, hauteurNom
    PosYnb4 = PosYnb4 + hauteurNom + intervalleV
 
    'affichage du chiffre des centaines du nombre 4
    chiffre14$ = mid$(nombre4$,1,1)
    chiffre14 = val(chiffre14$)
 
    X14 = PosXnb4
    Y14up = PosYnb4
    Y14ch = Y14up + hauteurB + intervalleV
    Y14dn = Y14ch + hauteurChif + intervalleV
 
    button #1.Ch14Up, "+", [chiffre14Up], UL, X14, Y14up, largeur, hauteurB
    statictext #1.Ch14, chiffre14$, X14, Y14ch, largeur, hauteurChif
    button #1.Ch14Dwn, "-", [chiffre14Down], UL, X14, Y14dn, largeur, hauteurB
 
 
    'affichage du chiffre des dizaines du nombre 4
    chiffre15$=mid$(nombre4$,2,1)
    chiffre15=val(chiffre15$)
 
    X15 = X14 + intervalleH
    Y15up = PosYnb4
    Y15ch = Y15up + hauteurB + intervalleV
    Y15dn = Y15ch + hauteurChif + intervalleV
 
    button #1.Ch15Up, "+", [chiffre15Up], UL, X15, Y15up, largeur, hauteurB
    statictext #1.Ch15, chiffre15$, X15, Y15ch, largeur, hauteurChif
    button #1.Ch15Dwn, "-", [chiffre15Down], UL, X15, Y15dn, largeur, hauteurB
 
 
    'affichage du chiffre des unités du nombre 4
    chiffre16$=mid$(nombre4$,3,1)
    chiffre16=val(chiffre16$)
 
    X16 = X15 + intervalleH
    Y16up = PosYnb4
    Y16ch = Y16up + hauteurB + intervalleV
    Y16dn = Y16ch + hauteurChif + intervalleV
 
    button #1.Ch16Up, "+", [chiffre16Up], UL, X16, Y16up, largeur, hauteurB
    statictext #1.Ch16, chiffre16$, X16, Y16ch, largeur, hauteurChif
    button #1.Ch16Dwn, "-", [chiffre16Down], UL, X16, Y16dn, largeur, hauteurB
 
    return
 
 
 


(édité pour rectification d'un bug dans le sous-programme [chiffre15Down])



Edité par Christophe Le 20/12/2015 à 16h49
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 14/12/2015 à 12h34

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1844
Citation:
contre cet "OK" de validation

Bah, comme il y a trente six façons d'entrer des nombres à la souris; il n'y a pas grand intérêt à passer par le clavier

Le principe des roues est nickel, sauf que les unités ne sont pas vraiment utiles; mais bon, pourquoi pas.
Faire interagir les roues entre elles pour le passage de 9 à 0 ne présente pas de difficultés, mais est aussi sans intérêt.

Dans la vraie vie, non seulement on peut additionner les fréquences, mais on peut moduler l'une par l'autre en amplitude, en fréquence ou en phase
D'ailleurs, tu pourrais introduire une roue de plus pour le déphasage d'une fréquence (des deux, ne servirait à rien puisque le déphasage est relatif de l'une à l'autre)
Une modulation d'amplitude ne serait pas mal (une HF modulée en BF)
Manquerait plus qu'envoyer ça sur une antenne en modulant avec un micro pour faire une radio locale

Je ne connaissais pas ce truc là:
" nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)" Drôlement pratique
Il ne me semble pas l'avoir vu dans la doc

Du beau boulot, bien propre; j'aimerais pouvoir en faire autant
____________________
Roro

   
Le 14/12/2015 à 20h42

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 336
Citation:

Bah, comme il y a trente six façons d'entrer des nombres à la souris; il n'y a pas grand intérêt à passer par le clavier

C'est pas faux, c'est sans doutes une vieille habitude venue du temps où je programmais sur mon MSX sans souris, donc je cherche encore à faire un truc pour lequel JB n'est pas conçu, je commence à avoir l'habitude...

La tentative suivante, parce que toute cette flopée de boutons et le kilomètre de code pour leur gestion ne me plaisent qu'à moitié, consistera, dans un fenêtre graphique, à définir une zone par chiffre. Quand la souris est dans la zone, la zone devient "active" : un clic gauche dans la zone fait tourner la roue d'un chiffre vers le bas, un clic droit fait tourner la roue d'un chiffre vers le haut. Le nouveau chiffre est alors dessiné avec des fonctions de dessin (ce ne sera plus un caractère à ski). ça ne devrait pas être hors de portée, comme système... Si le coeur t'en dit (au vu des x+n dispositifs que tu as pondu dans l'autre fil, hein ?) Ceci dit j'abuse pas : je travaille de mon côté aussi.

Cependant le résultat n'est pas pour tout de suite, vu mon emploi du temps.

Autres avantages de la roue codeuse : il n'y a pas d'erreur de saisie à gérer, et le nombre est formaté d'avance.

Citation:

on peut additionner les fréquences, mais on peut moduler l'une par l'autre en amplitude, en fréquence ou en phase

Pour les additions, les modulations et manipulations de fréquences, je connais les principes généraux mais je ne suis pas à l'aise avec les équations : j'ai toujours trouvé, avec un certain désespoir, que ce qui passe dans un câble est plus compliqué que la sinusoïde qu'on dessine en 2D. Ceci dit, je vais me pencher sur icelles, ce serait sympa de moduler le canal A par le canal B du générateur, je te l'accorde, de même pour le déphasage.

Pour notre radio locale, je ne crois pas qu'on puisse gérer autre chose qu'un truc périodique en tant que signal modulant avec JB, ce qui exclut toute entrée ligne ou micro. Mais on peut envisager des trucs sympas en modes numériques, comme la SSTV des radio-amateurs, psk31, et autres modes passant dans 3 kHz de bande passante, JB/LB pouvant générant les fichiers wav adéquats sortant par la carte audio branchée sur un émetteur. Je n'ai pas l'émetteur, ni la licence qui doit aller avec.

Citation:
" nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)" Drôlement pratique
Il ne me semble pas l'avoir vu dans la doc

Roland, tu es décidément fâché avec les fonctions ;)

Juste en dessous de l'open "..." for window et de sa série de print#1, on a :
Code VB :
 
Function Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)
    value = chiffre1*10000+chiffre2*1000+chiffre3*100+chiffre4*10+chiffre5
    Nombre5ch=value
    End Function
 


Citation:

Du beau boulot, bien propre; j'aimerais pouvoir en faire autant

Eh bien, met des espaces dans les grandes expressions mathématiques et n'hésite pas à insérer des lignes vides. Pour ma part je cherche assez systématiquement à rendre le code le plus lisible possible, c'est pas toujours évident.



Edité par Christophe Le 14/12/2015 à 20h46
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 14/12/2015 à 21h07

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1844
Faire tourner les roues sur le principe du déplacement souris avec des zones, c'est tout à fait faisable
Et je vais le faire; foin des boutons !
Mais alors, il n'y a plus besoin de faire tourner chiffre par chiffre, puisqu'on qu'avec une réponse souris géométrique , on peut avoir la finesse pour les petites valeur et avoir aussi une large plage sans devoir faire un Km à la souris

Bon sang...! Mais c'est bien sûr ! Une putan de fonction ! C'est vraiment hyper puissant ce truc.Je dois avoir peur de me blesser avec. Lol!
Citation:
Eh bien, met des espaces

Citation:
n'hésite pas à insérer des lignes vides

M'en parle pas, moi j'essaie de compresser au maximum.
Je me suis d'ailleurs fait engueuler par cassiope pour coder comme un cochon
Ne te plains pas j'indente, et je laisse une marge
Pour moi, si la ligne suivante est vide, c'est que le code est fini. Lol!
Mais promis, je vais faire un effort
____________________
Roro

   
Le 15/12/2015 à 20h45

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1844
Bon, j'avais fait avec des zones , mais c'est pas bon, ça prends beaucoup trop de place
Ton principe de roue codeuse est bon
Mais y a moyen de faire plus simple et même hyper simple
Le blème, c'est que l'affichage graphique se cale à gauche, et donc pour garder l'affichage aligné sous les boutons il faut recaler en fonction du nombre de chiffres
L'avantage, c'est que c'est le nombre qui est traité directement; y a pas besoin de le reconstruire (avec ta fonction de la mort); et du coup, le passage 9 --> 10 se fait tout seul
Je mets une ébauche
Code VB :
 
 NOMAINWIN
    WindowWidth = 280
    WindowHeight = 460
    UpperLeftX = (DisplayWidth-WindowWidth)-200
    UpperLeftY = 20 ' (DisplayHeight-WindowHeight)
    BUTTON #1.pdm, "+", [pdm], UL, 10, 20, 20, 20
    BUTTON #1.pm, "+", [pm], UL, 30, 20, 20, 20
    BUTTON #1.pc, "+", [pc], UL, 50, 20, 20, 20
    BUTTON #1.pd, "+", [pd], UL, 70, 20, 20, 20
    BUTTON #1.pu, "+", [pu], UL, 90, 20, 20, 20
    BUTTON #1.mdm, "-", [mdm], UL, 10, 75, 20, 20
    BUTTON #1.mm, "-", [mm], UL, 30, 75, 20, 20
    BUTTON #1.mc, "-", [mc], UL, 50, 75, 20, 20
    BUTTON #1.md, "-", [md], UL, 70, 75, 20, 20
    BUTTON #1.mu, "-", [mu], UL, 90, 75, 20, 20
    GRAPHICBOX #1.fr 0, 0, 280, 460
    OPEN "Help" FOR window_nf AS #1
    #1, "TRAPCLOSE [closeHelp]"
    '----------------------------- INIT GRAPH--------------------------
    #1.fr , "down;fill 236 233 216"
     freq=10000:vol=50
     #1.fr, "color black;backcolor 236 233 216"
     #1.fr, "place 5 15": #1.fr, "\Fréquence Hz"
     #1.fr, "font courier_new 24 bold"
     #1.fr, "color blue;backcolor 236 233 216"
    ' #1.fr, "place ";"10";" ";"65": #1.fr, "\"; str$(int(freq))
     gosub [affreq]
  wait
  [pdm]'-------plus
  freq=freq+10000:gosub [affreq]:wait
  [pm]
  freq=freq+1000:gosub [affreq]:wait
  [pc]
  freq=freq+100:gosub [affreq]:wait
  [pd]
  freq=freq+10:gosub [affreq]:wait
  [pu]
    freq=freq+1:gosub [affreq]:wait
  [mdm]'---------moins
    freq=freq-10000:gosub [affreq]:wait
  [mm]
    freq=freq-1000:gosub [affreq]:wait
  [mc]
    freq=freq-100:gosub [affreq]:wait
  [md]
    freq=freq-10:gosub [affreq]:wait
  [mu]
    freq=freq-1:gosub [affreq]:wait
  [affreq]
      if freq > 80000 then freq=80000
      if freq < 1 then freq=1
      freq$=str$(freq): lonfreq=len(freq$)
      select case lonfreq
        case 1
        xxf=95
        case 2
        xxf=71
        case 3
        xxf=50
        case 4
        xxf=30
        case 5
        xxf=10
      end select
      #1.fr,"place ";"10";" ";"45":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 115 90" 'efface
      #1.fr, "color blue;backcolor 236 233 216"
      #1.fr, "place ";xxf;" ";"65": #1.fr, "\"; str$(int(freq))
  return
  [closeHelp]
    CLOSE  #1
    END
 
____________________
Roro

   
Le 15/12/2015 à 22h27

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 336
C'est en effet beaucoup plus court pour le même résultat, et on économise des statictext. Je crois que c'est "LE" bon code.

Pour l'alignement des chiffres, faut se résoudre à mettre des zéros au début de la chaîne, les espaces n'ayant pas la même dimension que les caractères (au moins sur ma bizarroïde version Wine)

j'ai donc remplacé :
#1.fr, "place ";"10";" ";"65": #1.fr, "\"; str$(int(freq))
par
#1.fr, "place ";"10";" ";"65": #1.fr, "\"; right$("00000"+str$(int(freq)),5)

On a donc des 0 devant le nombre s'il fait moins de 5 chiffres. J'ai complété ta version avec les boutons "-" (c'était trop tentant ;) )

j'ai modifié la chaine de formatage pour adapter les caractères aux dimensions des boutons :
#1.fr, "font courier_new 24 bold" est devenue #1.fr, "font courier_new 22 35 bold"

J'ai également déplacé l'instruction "if freq > 80000 then freq=80000" dans le sous-programme [affreq], autrement elle n'était efficace que pour la première roue.

Quand je pense que je me suis pris la tête (presque) tout le week-end pour mon usine à boutons... Chapeau bas, Mister.

Your code a little bit modifié (j'ai gardé ta mise en page) :
Code VB :
 
     NOMAINWIN
    WindowWidth = 280
    WindowHeight = 460
    UpperLeftX = (DisplayWidth-WindowWidth)-200
    UpperLeftY = 20 ' (DisplayHeight-WindowHeight)
    BUTTON #1.pdm, "+", [pdm], UL, 10, 20, 20, 20
    BUTTON #1.pm, "+", [pm], UL, 30, 20, 20, 20
    BUTTON #1.pc, "+", [pc], UL, 50, 20, 20, 20
    BUTTON #1.pd, "+", [pd], UL, 70, 20, 20, 20
    BUTTON #1.pu, "+", [pu], UL, 90, 20, 20, 20
    BUTTON #1.mdm, "-", [mdm], UL, 10, 70, 20, 20
    BUTTON #1.mm, "-", [mm], UL, 30, 70, 20, 20
    BUTTON #1.mc, "-", [mc], UL, 50, 70, 20, 20
    BUTTON #1.md, "-", [md], UL, 70, 70, 20, 20
    BUTTON #1.mu, "-", [mu], UL, 90, 70, 20, 20
 
    GRAPHICBOX #1.fr 0, 0, 280, 460
    OPEN "Help" FOR window_nf AS #1
    #1, "TRAPCLOSE [closeHelp]"
    '----------------------------- INIT GRAPH--------------------------
    #1.fr , "down;fill 236 233 216"
     freq=2000:vol=50
     #1.fr, "color black;backcolor 236 233 216"
     #1.fr, "place 5 15": #1.fr, "\Fréquence Hz"
     #1.fr, "font courier_new 22 35 bold"
     #1.fr, "color blue;backcolor 236 233 216"
 
 
 
     gosub [affreq]
  wait
  [pdm]
  freq=freq+10000
  gosub [affreq]
  wait
  [pm]
  freq=freq+1000
  gosub [affreq]
  wait
  [pc]
  freq=freq+100
  gosub [affreq]
  wait
  [pd]
  freq=freq+10
  gosub [affreq]
  wait
  [pu]
  freq=freq+1
  gosub [affreq]
  wait
  [mdm]
  freq=freq-10000
  gosub [affreq]
  wait
  [mm]
  freq=freq-1000
  gosub [affreq]
  wait
  [mc]
  freq=freq-100
  gosub [affreq]
  wait
  [md]
  freq=freq-10
  gosub [affreq]
  wait
  [mu]
  freq=freq-1
  gosub [affreq]
  wait
  [affreq]
    if freq > 80000 then freq=80000
    if freq < 0 then freq = 0
      freq$=str$(freq): lonfreq=len(freq$)
      select case lonfreq
        case 1
        xxf=100
        case 2
        xxf=80
        case 3
        xxf=60
        case 4
        xxf=40
        case 5
        xxf=20
      end select
      #1.fr,"place ";xxf;" ";"45":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 110 90" 'efface
      #1.fr, "color blue;backcolor 236 233 216"
      #1.fr, "place ";"10";" ";"65": #1.fr, "\"; right$("00000"+str$(int(freq)),5)
 
  return
  [closeHelp]
    CLOSE  #1
    END
 
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 16/12/2015 à 00h03

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1844
Citation:
J'ai également déplacé l'instruction "if freq > 80000 then fr

Alors, c'est que tu a pris le code incognito
Car je l'ai modifié depuis plusieurs fois et si tu mate ma dernière mouture tu verra qu moi aussi j'ai mis les bornes là où tu dis.
J'ai tenté de réduire avec une sub handle (à la cassiope), mais c'est vraiment trop la merde ces subs, quand on est dedans, on peut plus en sortir, il faut faire tout le prog en subs.
C'est comme les fonctions de la mort, mais en pire.
Je garde ça pour quand je serai grand.
Mais je vais quand même réessayer crogneugneu! sinon le code va faire un kilomètre de long.

Aparté: Heureusement qu'on est que deux à poster, parce qu'on a mit une de ces panique
Si nephtys qui aime bien que tout soit bien rangé, voit ça, il va péter un câble.
Je vais essayer de ranger sans mettre plus de souk; c'est pas gagné.
____________________
Roro

   
Le 16/12/2015 à 10h56

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1844
SUITE DE: 16/12/15 à 00h03
Bon, dis donc, j'ai un cas de conscience; j'ai voulu ranger...Et ben y a pas moyen.
Si je coupe des messages, y a plus aucune cohérence dans le fil; si je les déplace, c'est pareil.

Je parle des 3 pages de: "Débutant/Récupérer le texte d'une TEXTBOX ?"

La solution que je vois, c'est de supprimer tout ce qui ne se rapporte pas au titre.
Qu'en pense-tu ?
Si tu veux rapatrier des trucs de là-bas à ici, fait une liste des "date et heure"
Et pour le titre d'ici, je propose "Sinusoïdes".

A part ça, j'ai intégré les deux roues "Fréquence" à ton code je fais les volumes
Je vais tenter de raccorder, je garanti rien.
On doit pouvoir se resservir de [sinusoide], bien que ce sera totalement illogique puisque c'est la base de temps, mais comme au niveau visu le résultat est le même, on aurait tort de se gêner.

Note que la modulation d'amplitude, elle y est déjà. si on mets une HF en 1 et une BF en 2 on a en 3 une superbe onde modulée.Ton additionneur marche vraiment au poil.
____________________
Roro

   
Le 16/12/2015 à 12h19

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1844
Suite de: 16/12/15 à 00h03
Et de: 16/12/15 à 10h56
Voila ce que ça donne , je n'ai pas pu m'empêcher de mettre un bouton "Valide" (plus simple)
Je n'ai pas mis tes modifs de formatage because chez moi il ne les faut pas
Soit dit en passant, ton aversion pour Windows est un combat d'arrière garde
Essaie donc de démonter le tableau de bord de ta bagnole, tu ne va pourtant pas y mettre un tableau "libre" avec toutes les vis apparentes (pareil pour ton disque dur et ton grille pain)
Code VB :
 
     nomainwin
    WindowWidth = 800: UpperLeftX = 200
    WindowHeight = 600: UpperLeftY = 200
    BUTTON #1.pdm1, "+", [pdm1], UL, 10, 25, 20, 20 '---freq 1
    BUTTON #1.pm1, "+", [pm1], UL, 30, 25, 20, 20
    BUTTON #1.pc1, "+", [pc1], UL, 50, 25, 20, 20
    BUTTON #1.pd1, "+", [pd1], UL, 70, 25, 20, 20
    BUTTON #1.pu1, "+", [pu1], UL, 90, 25, 20, 20
    BUTTON #1.mdm1, "-", [mdm1], UL, 10, 75, 20, 20
    BUTTON #1.mm1, "-", [mm1], UL, 30, 75, 20, 20
    BUTTON #1.mc1, "-", [mc1], UL, 50, 75, 20, 20
    BUTTON #1.md1, "-", [md1], UL, 70, 75, 20, 20
    BUTTON #1.mu1, "-", [mu1], UL, 90, 75, 20, 20
    BUTTON #1.pdm2, "+", [pdm2], UL, 130, 25, 20, 20 '---freq 2
    BUTTON #1.pm2, "+", [pm2], UL, 150, 25, 20, 20
    BUTTON #1.pc2, "+", [pc2], UL, 170, 25, 20, 20
    BUTTON #1.pd2, "+", [pd2], UL, 190, 25, 20, 20
    BUTTON #1.pu2, "+", [pu2], UL, 210, 25, 20, 20
    BUTTON #1.mdm2, "-", [mdm2], UL, 130, 75, 20, 20
    BUTTON #1.mm2, "-", [mm2], UL, 150, 75, 20, 20
    BUTTON #1.mc2, "-", [mc2], UL, 170, 75, 20, 20
    BUTTON #1.md2, "-", [md2], UL, 190, 75, 20, 20
    BUTTON #1.mu2, "-", [mu2], UL, 210, 75, 20, 20
    BUTTON #1.pcv1, "+", [pcv1], UL, 50, 120, 20, 20 '---Volume 1
    BUTTON #1.pdv1, "+", [pdv1], UL, 70, 120, 20, 20
    BUTTON #1.puv1, "+", [puv1], UL, 90, 120, 20, 20
    BUTTON #1.mcv1, "-", [mcv1], UL, 50, 170, 20, 20
    BUTTON #1.mdv1, "-", [mdv1], UL, 70, 170, 20, 20
    BUTTON #1.muv1, "-", [muv1], UL, 90, 170, 20, 20
    BUTTON #1.pcv2, "+", [pcv2], UL, 170, 120, 20, 20
    BUTTON #1.pdv2, "+", [pdv2], UL, 190, 120, 20, 20 '---Volume 2
    BUTTON #1.puv2, "+", [puv2], UL, 210, 120, 20, 20
    BUTTON #1.mcv2, "-", [mcv2], UL, 170, 170, 20, 20
    BUTTON #1.mdv2, "-", [mdv2], UL, 190, 170, 20, 20
    BUTTON #1.muv2, "-", [muv2], UL, 210, 170, 20, 20
    BUTTON #1.vali, "Valid", [valid], UL, 100, 210, 70, 25
    graphicbox  #1.gb 280,15,500,500
    groupbox #1.gbx3, "Base de temps", 8, 395, 225, 100
    GRAPHICBOX #1.fr 5, 5, 250, 385
    radiobutton #1.rdb1, long1aff$+" ms par div", [SParDiv1_On], [SParDiv1_off], 26, 415, 96, 20
    radiobutton #1.rdb2, long2aff$+" ms par div", [SParDiv2_On], [SParDiv2_Off], 26, 440, 96, 20
    radiobutton #1.rdb3, long3aff$+" ms par div", [SParDiv3_On], [SParDiv3_Off], 26, 465, 96, 20
    radiobutton #1.rdb4, long4aff$+" ms par div", [SParDiv4_On], [SParDiv4_off], 126, 415, 96, 20
    radiobutton #1.rdb5, long5aff$+" ms par div", [SParDiv5_On], [SParDiv5_Off], 126, 440, 96, 20
    radiobutton #1.rdb6, long6aff$+" ms par div", [SParDiv6_On], [SParDiv6_Off], 126, 465, 96, 20
    open "..." for window_nf as #1
    #1 "trapclose [quit]"
    '----------------------------- INIT GRAPH--------------------------
    #1.fr , "down;fill 236 233 216"
     freq1=1000:vol=50: freq2=60:vol1=40:vol2=20
     #1.fr, "color black;backcolor 236 233 216"
     #1.fr, "place 5 15": #1.fr, "\Fréq 1 Hz": #1.fr, "place 125 15": #1.fr, "\Fréq 2 Hz"
     #1.fr, "place 5 110": #1.fr, "\Volume 1 mW": #1.fr, "place 125 110": #1.fr, "\Volume 2 mW"
     #1.fr, "font courier_new 24 bold"
     #1.fr, "color blue;backcolor 236 233 216"
     gosub [affreq1]: gosub [affreq2]
     gosub [affvol1]: gosub [affvol2]
    '----------------------------- INIT PARAM--------------------------
  dim courbeF1(500):dim courbeF2(500): dim courbeF3(500)
    pi=3.1415926536
  'F1=440:T1=1/F1:omega1=2*pi*F1
 ' F2=660:T2=1/F2:omega2=2*pi*F2
  'F3=44100:T3=1/F3:omega3=2*pi*F3
  [valid]
  omega1=2*pi*int(freq1)
  omega2=2*pi*int(freq2)
  t=0
  longdiv=50  'larg div (pxls). trait div = 1 pxl ~~0
  long1=0.005 'secondes par division
  long2=0.002
  long3=0.001
  long4=0.0005
  long5=0.0002
  long6=0.0001
  long1aff$=str$(long1*1000) 'secondes par division, pour affichage
  long2aff$=str$(long2*1000)
  long3aff$=str$(long3*1000)
  long4aff$=str$(long4*1000)
  long5aff$=str$(long5*1000)
  long6aff$=str$(long6*1000)
    '***************************Fin init param**************************
    gosub [sinusoides]
    gosub [ecran]
    gosub [dessin]
    #1.gb "flush"
    goto [SParDiv1_On]
    wait '----------------------- PRIMO WAIT-------------------
  [SParDiv1_On] deltaT=long1/longdiv:goto [rafraich]
  [SParDiv1_off] wait
  [SParDiv2_On]  deltaT=long2/longdiv:goto [rafraich]
  [SParDiv2_Off] wait
  [SParDiv3_On]  deltaT=long3/longdiv:goto [rafraich]
  [SParDiv3_Off] wait
  [SParDiv4_On]  deltaT=long4/longdiv:goto [rafraich]
  [SParDiv4_off] wait
  [SParDiv5_On]  deltaT=long5/longdiv:goto [rafraich]
  [SParDiv5_Off] wait
  [SParDiv6_On]  deltaT=long6/longdiv:goto [rafraich]
  [SParDiv6_Off] wait '---------------------------------
  [rafraich]
    gosub [sinusoides]
    cls
    gosub [ecran]
    gosub [dessin]
    #1.gb "flush"
  wait '--------------------------------------------
  [sinusoides]
    t=0
    for a=0 to 499
        courbeF1(a)=vol1*sin(omega1*t)
        courbeF2(a)=vol2*sin(omega2*t)
        'courbeF3(a)=40*sin(omega3*t)
        courbeF3(a)=courbeF1(a)+courbeF2(a)
        t=t+deltaT
    next
    return
  [ecran]
    #1.gb "down ; fill 0 106 53":#1.gb "color 157 157 0"
    for x= 0 to 500 step longdiv
        #1.gb "line ";x;" 0 ";x;" 500"
    next
    for y= 0 to 500 step longdiv
        #1.gb "line 0 ";y;" 500 ";y
    next
  return
  [dessin]
    #1.gb "color green"
    ph=180:midY1=50:midY2=150:midY3=350
    oldY1=midY1:oldY2=midY2:oldY3=midY3
    for n= 0 to 499
        x=n
        y=midY1+courbeF1(n)
        #1.gb "line ";oldX1;" ";oldY1;" ";x;" ";y
        oldX1=x:oldY1=y
        y=midY2+courbeF2(n)
        #1.gb "line ";oldX2;" ";oldY2;" ";x;" ";y
        oldX2=x:oldY2=y
        y=midY3+courbeF3(n)
        #1.gb "line ";oldX3;" ";oldY3;" ";x;" ";y
        oldX3=x:oldY3=y
    next
  return
  wait '------------------------ Variation Freq 1 ----------------------
  [pdm1]'-------plus
    freq1=freq1+10000:gosub [affreq1]:wait
  [pm1]
    freq1=freq1+1000:gosub [affreq1]:wait
  [pc1]
    freq1=freq1+100:gosub [affreq1]:wait
  [pd1]
    freq1=freq1+10:gosub [affreq1]:wait
  [pu1]
    freq1=freq1+1:gosub [affreq1]:wait
  [mdm1]'---------moins
    freq1=freq1-10000:gosub [affreq1]:wait
  [mm1]
    freq1=freq1-1000:gosub [affreq1]:wait
  [mc1]
    freq1=freq1-100:gosub [affreq1]:wait
  [md1]
    freq1=freq1-10:gosub [affreq1]:wait
  [mu1]
    freq1=freq1-1:gosub [affreq1]:wait
  [affreq1]
      if freq1 > 80000 then freq1=80000
      if freq1 < 1 then freq1=1
      freq1$=str$(freq1): lonfreq1=len(freq1$)
      select case lonfreq1
        case 1
        xxf=95
        case 2
        xxf=71
        case 3
        xxf=50
        case 4
        xxf=30
        case 5
        xxf=10
      end select
      #1.fr,"place ";"10";" ";"45":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 115 90" 'efface
      #1.fr, "color blue;backcolor 236 233 216"
      #1.fr, "place ";xxf;" ";"65": #1.fr, "\"; str$(int(freq1))
  return
  wait '------------------------ Variation Freq 2 ----------------------
  [pdm2]'-------plus
  freq2=freq2+10000:gosub [affreq2]:wait
  [pm2]
  freq2=freq2+1000:gosub [affreq2]:wait
  [pc2]
  freq2=freq2+100:gosub [affreq2]:wait
  [pd2]
  freq2=freq2+10:gosub [affreq2]:wait
  [pu2]
    freq2=freq1+1:gosub [affreq2]:wait
  [mdm2]'---------moins
    freq2=freq2-10000:gosub [affreq2]:wait
  [mm2]
    freq2=freq2-1000:gosub [affreq2]:wait
  [mc2]
    freq2=freq2-100:gosub [affreq2]:wait
  [md2]
    freq2=freq2-10:gosub [affreq2]:wait
  [mu2]
    freq2=freq2-1:gosub [affreq2]:wait
  [affreq2]
      if freq2 > 80000 then freq2=80000
      if freq2 < 1 then freq2=1
      freq2$=str$(freq2): lonfreq2=len(freq2$)
      select case lonfreq2
        case 1
        xxf2=205
        case 2
        xxf2=185
        case 3
        xxf2=165
        case 4
        xxf2=145
        case 5
        xxf2=125
      end select
      #1.fr,"place ";"110";" ";"45":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 225 90" 'efface
      #1.fr, "color blue;backcolor 236 233 216"
      #1.fr, "place ";xxf2;" ";"65": #1.fr, "\"; str$(int(freq2))
 
  return
  [pcv1] '-------------------Variation Volume 1 ----------------------
    vol1=vol1+100:gosub [affvol1]:wait
  [pdv1]
    vol1=vol1+10:gosub [affvol1]:wait
  [puv1]
    vol1=vol1+1:gosub [affvol1]:wait
  [mcv1]
    vol1=vol1-100:gosub [affvol1]:wait
  [mdv1]
    vol1=vol1-10:gosub [affvol1]:wait
  [muv1]
    vol1=vol1-1:gosub [affvol1]:wait
  [affvol1]
      if vol1 > 100 then vol1=100
      if vol1 < 1 then vol1=1
      vol1$=str$(vol1): lonvol1=len(vol1$)
      select case lonvol1
        case 1
        xxv1=85
        case 2
        xxv1=66
        case 3
        xxv1=45
      end select
      #1.fr,"place ";"10";" ";"136":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 111 160" 'efface
      #1.fr, "color red;backcolor 236 233 216"
      #1.fr, "place ";xxv1;" ";"158": #1.fr, "\"; str$(int(vol1))
  return
  [pcv2] '-------------------Variation Volume 2 ---------------------
    vol2=vol2+100:gosub [affvol2]:wait
  [pdv2]
    vol2=vol2+10:gosub [affvol2]:wait
  [puv2]
    vol2=vol2+1:gosub [affvol2]:wait
  [mcv2]
    vol2=vol2-100:gosub [affvol2]:wait
  [mdv2]
    vol2=vol2-10:gosub [affvol2]:wait
  [muv2]
    vol2=vol2-1:gosub [affvol2]:wait
  [affvol2]
      if vol2 > 100 then vol2=100
      if vol2 < 1 then vol2=1
      vol2$=str$(vol2): lonvol2=len(vol2$)
      select case lonvol2
        case 1
        xxv2=205
        case 2
        xxv2=186
        case 3
        xxv2=165
      end select
      #1.fr,"place ";"150";" ";"136":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 230 160" 'efface
      #1.fr, "color red;backcolor 236 233 216"
      #1.fr, "place ";xxv2;" ";"158": #1.fr, "\"; str$(int(vol2))
  return
  [quit]
    close #1
  end
 
____________________
Roro

   
Le 16/12/2015 à 15h32

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 336
Programme : joli. On (tu) a trouvé la solution, c'est adopté. Mon prog redessine à chaque changement de chiffre, alros que ton bouton valid fait que le dessin n'est refait qu'à ce moment-là, ce qui peut être intéressant sur une petite config.

Pour le rapatriement dans le nouveau fil, je n'ai pas le temps d'y réfléchir pour le moment, je verrais ce soir, car c'est plus délicat à analyser que nos générateurs, et on est parti un peu dans tous les sens.

(Et pour ma voiture, si, ce sera un tableau de bord "libre", et on ne se rendra pas sans combattre ;) Sérieusement ce n'est pas un dogme, mais je me sens simplement "mieux" sans windows, simple état d'esprit. J'ai un windows de secours sur un petit ieee, qui m'a permis de constater qu'en effet le rendu graphique n'est pas tout à fait le même dans les deux univers.

Citation:
Alors, c'est que tu a pris le code incognito

Ou que tu l'avais modifié entre temps. En général je ne me connecte que lorsque j'ai quelque chose à écrire,

Le fait que tu te connectes en administrateur fait peut-être que n'apparaissent pas les habituelles mentions "édité par xxx le tant" dans tes messages modifiés, et on a effectivement du mal à s'y retrouver entre deux visites. Ne supprime plus, on fait de la recherche et c'est normal de tomber sur des résultats boiteux ou intermédiaires.

Aurais-je oublié quelque chose ? j'ai dû faire le tour...

A+
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 16/12/2015 à 16h46

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1844
Bah, c'est qu'en fait, je crains une visite de nephtys qui pourrait bien faire un fromage si il voit le souk qu'on a mit.

On pourrait rafraîchir le scope à chaque modif de valeur, mais ça risque de faire pleurer les yeux.
____________________
Roro

   
Le 16/12/2015 à 21h07

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 336
(t'inquière, soulève le tapis, on va tout mettre en dessous, il verra rien^^)

On peut éventuellement changer le titre de l'autre discussion pour le mettre en accord avec le contenu. Après tout, les progs que nous y avons placés avaient la même finalité : entrer des données dans un programme, c'étaient seulement des exemples de ce qu'on pouvait faire. A mon avis on se prend la tête pour finalement pas grand chose. Par contre, je suis trop crevé ce soir et guère disponible dans les jours qui viennent, il est sans doutes urgent d'attendre "la" bonne idée qui permettra de tout remettre d'aplomb avec élégance.

Et on essaiera d'être plus rigoureux dans nos posts. Possible que si nous étions plus nombreux, on le serait naturellement. J'aimais bien cette liberté d'aller à notre gré...

Pour en revenir au sujet, refaire un graphe à chaque changement de chiffre ne clignote pas plus que ça, mais faut voir avec l'écran utilisé et la puissance de calcul de l'UC, il y a peut-être des cas qui posent problème...
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 16/12/2015 à 21h39

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1844
Tu es plus occupé qu'un ministre. Prends donc soin de ton ministère JB peut attendre.
____________________
Roro

   
Le 20/12/2015 à 23h55

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 336
Bon, me revoilà.

Impossible de me concentrer sur un quelconque synoptique, j'ai finalement décidé de reprendre le projet par l'aspect cosmétique.

J'ai repris ton système de saisie, mais j'ai aligné fréquence et volumes 1 sur la trace du haut, et 2 sur la trace du milieu, la trace du bas étant la somme.

Dans l'opération, ton bouton "valid" a sauté. Par inadvertance je le précise (je préfère sans), parce que je me suis trouvé perdu entre les nuances de nos manières respectives de coder. On peut le remettre.

J'ai simplifié le triplet de sous-programmes "sinusoides", "écran", "dessin" en un seul sous-programme "sinusoides"

Le cadre qui englobe les réglages de fréquence a été raccourci. Dans l'espace créé j'envisage d'y mettre des boutons pour la génération du wav. Aucune idée de leur fonction pour le moment, mais c'est prévu.

Dans la portion de code
Code VB :
 
    for a=0 to 499
        courbeF1(a)=vol1*sin(omega1*t)/2
        courbeF2(a)=vol2*sin(omega2*t)/2
        'courbeF3(a)=40*sin(omega3*t)
        courbeF3(a)=courbeF1(a)+courbeF2(a)
        t=t+deltaT
    next
 


j'ai remis la division par 2 de l'amplitude. En fait je désirais définir l'amplitude de la sinusoide à 100, soit une valeur allant de -50 à +50, ce qui correspondait à un carreau du scope en positif, et un carreau en négatif, ce qu'on constate à plein volume. Cette valeur 100 est à prendre comme un pourcentage de l'amplitude maxi qu'on s'est fixé. Valeur tout à fait provisoire et arbitraire. La formule est juste sans la division par deux.

J'ai enlevé les milliwatts dans la légende des réglages de volume, parce qu'un fichier wav ne transmet pas cette info, ni rien - à ma connaissance - qui permette de la déduire.

C'est la trace du bas qui sera incluse dans le wav, comme elle est la somme de deux courbes dont les pics sont -50 et +50, l'amplitude de cette somme peut aller jusqu'à 200. L'amplitude définie par un wav est 256, donc on pourrait proposer le réglage de volume de chaque courbe à 127 au lieu de 100.

Et pour le reste, on verra plus tard :top

Code VB :
 
nomainwin
   dim courbeF1(500), courbeF2(500), courbeF3(500)
 
    '----------------------------- INIT PARAM--------------------------
  dim courbeF1(500), courbeF2(500), courbeF3(500)
  pi=3.1415926536
  t=0
  longdiv=50  'larg div (pxls). trait div = 1 pxl ~~0
  long1=0.005 'secondes par division
  long2=0.002
  long3=0.001
  long4=0.0005
  long5=0.0002
  long6=0.0001
  long1aff$=str$(long1*1000) 'secondes par division, pour affichage
  long2aff$=str$(long2*1000)
  long3aff$=str$(long3*1000)
  long4aff$=str$(long4*1000)
  long5aff$=str$(long5*1000)
  long6aff$=str$(long6*1000)
    '***************************Fin init param**************************

 
    WindowWidth = 800: UpperLeftX = 200
    WindowHeight = 600: UpperLeftY = 200
 
    BUTTON #1.pdm1, "+", [pdm1], UL, 40, 35, 20, 20 '---freq 1
    BUTTON #1.pm1, "+", [pm1], UL, 60, 35, 20, 20
    BUTTON #1.pc1, "+", [pc1], UL, 80, 35, 20, 20
    BUTTON #1.pd1, "+", [pd1], UL, 100, 35, 20, 20
    BUTTON #1.pu1, "+", [pu1], UL, 120, 35, 20, 20
    BUTTON #1.mdm1, "-", [mdm1], UL, 40, 85, 20, 20
    BUTTON #1.mm1, "-", [mm1], UL, 60, 85, 20, 20
    BUTTON #1.mc1, "-", [mc1], UL, 80, 85, 20, 20
    BUTTON #1.md1, "-", [md1], UL, 100, 85, 20, 20
    BUTTON #1.mu1, "-", [mu1], UL, 120, 85, 20, 20
 
    BUTTON #1.pcv1, "+", [pcv1], UL, 180, 35, 20, 20 '---Volume 1
    BUTTON #1.pdv1, "+", [pdv1], UL, 200, 35, 20, 20
    BUTTON #1.puv1, "+", [puv1], UL, 220, 35, 20, 20
    BUTTON #1.mcv1, "-", [mcv1], UL, 180, 85, 20, 20
    BUTTON #1.mdv1, "-", [mdv1], UL, 200, 85, 20, 20
    BUTTON #1.muv1, "-", [muv1], UL, 220, 85, 20, 20
 
    BUTTON #1.pdm2, "+", [pdm2], UL, 40, 135, 20, 20 '---freq 2
    BUTTON #1.pm2, "+", [pm2], UL, 60, 135, 20, 20
    BUTTON #1.pc2, "+", [pc2], UL, 80, 135, 20, 20
    BUTTON #1.pd2, "+", [pd2], UL, 100, 135, 20, 20
    BUTTON #1.pu2, "+", [pu2], UL, 120, 135, 20, 20
    BUTTON #1.mdm2, "-", [mdm2], UL, 40, 185, 20, 20
    BUTTON #1.mm2, "-", [mm2], UL, 60, 185, 20, 20
    BUTTON #1.mc2, "-", [mc2], UL, 80, 185, 20, 20
    BUTTON #1.md2, "-", [md2], UL, 100, 185, 20, 20
    BUTTON #1.mu2, "-", [mu2], UL, 120, 185, 20, 20
 
    BUTTON #1.pcv2, "+", [pcv2], UL, 180, 135, 20, 20'---Volume 2
    BUTTON #1.pdv2, "+", [pdv2], UL, 200, 135, 20, 20
    BUTTON #1.puv2, "+", [puv2], UL, 220, 135, 20, 20
    BUTTON #1.mcv2, "-", [mcv2], UL, 180, 185, 20, 20
    BUTTON #1.mdv2, "-", [mdv2], UL, 200, 185, 20, 20
    BUTTON #1.muv2, "-", [muv2], UL, 220, 185, 20, 20
 
    'BUTTON #1.vali, "Valid", [sinusoides], UL, 100, 225, 70, 25

    graphicbox  #1.gb 280,15,500,500
    GRAPHICBOX #1.fr 15, 15, 250, 255
 
    groupbox #1.gbx3, "Base de temps", 8, 395, 225, 100
    radiobutton #1.rdb1, long1aff$+" ms par div", [SParDiv1_On], [SParDiv1_off], 26, 415, 96, 20
    radiobutton #1.rdb2, long2aff$+" ms par div", [SParDiv2_On], [SParDiv2_Off], 26, 440, 96, 20
    radiobutton #1.rdb3, long3aff$+" ms par div", [SParDiv3_On], [SParDiv3_Off], 26, 465, 96, 20
    radiobutton #1.rdb4, long4aff$+" ms par div", [SParDiv4_On], [SParDiv4_off], 126, 415, 96, 20
    radiobutton #1.rdb5, long5aff$+" ms par div", [SParDiv5_On], [SParDiv5_Off], 126, 440, 96, 20
    radiobutton #1.rdb6, long6aff$+" ms par div", [SParDiv6_On], [SParDiv6_Off], 126, 465, 96, 20
 
    open "..." for window_nf as #1
    #1 "trapclose [quit]"
    '----------------------------- INIT GRAPH--------------------------
    #1.fr , "down;fill 236 233 216"
     freq1=1000:freq2=60:vol1=40:vol2=20
     #1.fr, "color black;backcolor 236 233 216"
     #1.fr, "place 25 15": #1.fr, "\Fréquence 1, Hz": #1.fr, "place 170 15": #1.fr, "\Vol1, %"
     #1.fr, "place 25 115": #1.fr, "\Fréquence 2, Hz": #1.fr, "place 170 115": #1.fr, "\Vol2, %"
 
     #1.fr, "font courier_new 24 bold"
     #1.fr, "color blue;backcolor 236 233 216"
     gosub [affreq1]: gosub [affreq2]
     gosub [affvol1]: gosub [affvol2]
 
 
    'gosub [sinusoides]

 
    print #1.rdb2,"setfocus"
wait
    '----------------------- PRIMO WAIT-------------------
  [SParDiv1_On] deltaT=long1/longdiv:gosub [sinusoides]:wait
  [SParDiv1_off] wait
  [SParDiv2_On]  deltaT=long2/longdiv:gosub [sinusoides]:wait
  [SParDiv2_Off] wait
  [SParDiv3_On]  deltaT=long3/longdiv:gosub [sinusoides]:wait
  [SParDiv3_Off] wait
  [SParDiv4_On]  deltaT=long4/longdiv:gosub [sinusoides]:wait
  [SParDiv4_off] wait
  [SParDiv5_On]  deltaT=long5/longdiv:gosub [sinusoides]:wait
  [SParDiv5_Off] wait
  [SParDiv6_On]  deltaT=long6/longdiv:gosub [sinusoides]:wait
  [SParDiv6_Off] wait '---------------------------------

  '--------------------------------------------

  [sinusoides]
 
    omega1=2*pi*int(freq1)
    omega2=2*pi*int(freq2)
    t=0
 
    for a=0 to 499
        courbeF1(a)=vol1*sin(omega1*t)/2
        courbeF2(a)=vol2*sin(omega2*t)/2
        'courbeF3(a)=40*sin(omega3*t)
        courbeF3(a)=courbeF1(a)+courbeF2(a)
        t=t+deltaT
    next
    cls
 
  'ecran
    #1.gb "down ; fill 0 106 53":#1.gb "color 157 157 0"
    for x= 0 to 500 step longdiv
        #1.gb "line ";x;" 0 ";x;" 500"
    next
    for y= 0 to 500 step longdiv
        #1.gb "line 0 ";y;" 500 ";y
    next
 
  'dessin
    #1.gb "color green"
    ph=180:midY1=50:midY2=150:midY3=350
    oldY1=midY1:oldY2=midY2:oldY3=midY3
    for n=0 to 499
        x=n
        y=midY1+courbeF1(n)
        #1.gb "line ";oldX1;" ";oldY1;" ";x;" ";y
        oldX1=x:oldY1=y
        y=midY2+courbeF2(n)
        #1.gb "line ";oldX2;" ";oldY2;" ";x;" ";y
        oldX2=x:oldY2=y
        y=midY3+courbeF3(n)
        #1.gb "line ";oldX3;" ";oldY3;" ";x;" ";y
        oldX3=x:oldY3=y
    next
    #1.gb "flush"
  return
 
  '------------------------ Variation Freq 1 ----------------------
  '-------plus
  [pdm1] freq1=freq1+10000:gosub [affreq1]:wait
  [pm1] freq1=freq1+1000:gosub [affreq1]:wait
  [pc1] freq1=freq1+100:gosub [affreq1]:wait
  [pd1] freq1=freq1+10:gosub [affreq1]:wait
  [pu1] freq1=freq1+1:gosub [affreq1]:wait
 
  '---------moins
  [mdm1] freq1=freq1-10000:gosub [affreq1]:wait
  [mm1] freq1=freq1-1000:gosub [affreq1]:wait
  [mc1] freq1=freq1-100:gosub [affreq1]:wait
  [md1] freq1=freq1-10:gosub [affreq1]:wait
  [mu1] freq1=freq1-1:gosub [affreq1]:wait
 
  [affreq1]
      if freq1 > 80000 then freq1=80000
      if freq1 < 1 then freq1=1
      freq1$=str$(freq1): lonfreq1=len(freq1$)
      select case lonfreq1
        case 1
        xxf=110
        case 2
        xxf=90
        case 3
        xxf=70
        case 4
        xxf=50
        case 5
        xxf=30
      end select
      #1.fr,"place ";"30";" ";"30":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 130 70" 'efface
      #1.fr, "color blue;backcolor 236 233 216"
      #1.fr, "place ";xxf;" ";"65": #1.fr, "\"; str$(int(freq1))
      gosub [sinusoides]
  return
 
  '------------------------ Variation Freq 2 ----------------------
  'plus
  [pdm2] freq2=freq2+10000:gosub [affreq2]:wait
  [pm2] freq2=freq2+1000:gosub [affreq2]:wait
  [pc2] freq2=freq2+100:gosub [affreq2]:wait
  [pd2] freq2=freq2+10:gosub [affreq2]:wait
  [pu2] freq2=freq2+1:gosub [affreq2]:wait
 
  'moins
  [mdm2] freq2=freq2-10000:gosub [affreq2]:wait
  [mm2] freq2=freq2-1000:gosub [affreq2]:wait
  [mc2] freq2=freq2-100:gosub [affreq2]:wait
  [md2] freq2=freq2-10:gosub [affreq2]:wait
  [mu2] freq2=freq2-1:gosub [affreq2]:wait
 
  'affichage
  [affreq2]
      if freq2 > 80000 then freq2=80000
      if freq2 < 1 then freq2=1
      freq2$=str$(freq2): lonfreq2=len(freq2$)
      select case lonfreq2
        case 1
        xxf2=110
        case 2
        xxf2=90
        case 3
        xxf2=70
        case 4
        xxf2=50
        case 5
        xxf2=30
      end select
      #1.fr,"place ";"30";" ";"130":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 130 170" 'efface
      #1.fr, "color red;backcolor 236 233 216"
      #1.fr, "place ";xxf2;" ";"165": #1.fr, "\"; str$(int(freq2))
      gosub [sinusoides]
 
  return
 
  '-------------------Variation Volume 1 ----------------------
  'plus
  [pcv1] vol1=vol1+100:gosub [affvol1]:wait
  [pdv1] vol1=vol1+10:gosub [affvol1]:wait
  [puv1] vol1=vol1+1:gosub [affvol1]:wait
 
  'moins
  [mcv1] vol1=vol1-100:gosub [affvol1]:wait
  [mdv1] vol1=vol1-10:gosub [affvol1]:wait
  [muv1] vol1=vol1-1:gosub [affvol1]:wait
 
  'affichage
  [affvol1]
      if vol1 > 100 then vol1=100
      if vol1 < 0 then vol1=0
      vol1$=str$(vol1): lonvol1=len(vol1$)
      select case lonvol1
        case 1
        xxv1=210
        case 2
        xxv1=190
        case 3
        xxv1=170
      end select
      #1.fr,"place ";"170";" ";"30":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 230 70" 'efface
      #1.fr, "color blue;backcolor 236 233 216"
      #1.fr, "place ";xxv1;" ";"65": #1.fr, "\"; str$(int(vol1))
      gosub [sinusoides]
  return
 
  '-------------------Variation Volume 2 ---------------------
  'moins
  [pcv2] vol2=vol2+100:gosub [affvol2]:wait
  [pdv2] vol2=vol2+10:gosub [affvol2]:wait
  [puv2] vol2=vol2+1:gosub [affvol2]:wait
 
  'plus
  [mcv2] vol2=vol2-100:gosub [affvol2]:wait
  [mdv2] vol2=vol2-10:gosub [affvol2]:wait
  [muv2] vol2=vol2-1:gosub [affvol2]:wait
 
  'affichage
  [affvol2]
      if vol2 > 100 then vol2=100
      if vol2 < 0 then vol2=0
      vol2$=str$(vol2): lonvol2=len(vol2$)
      select case lonvol2
        case 1
        xxv2=210
        case 2
        xxv2=190
        case 3
        xxv2=170
      end select
      #1.fr,"place ";"170";" ";"130":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 230 170" 'efface
      #1.fr, "color red;backcolor 236 233 216"
      #1.fr, "place ";xxv2;" ";"165": #1.fr, "\"; str$(int(vol2))
      gosub [sinusoides]
  return
 
  [quit]
    close #1
  end
 




Edité par Christophe Le 20/12/2015 à 23h56
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 21/12/2015 à 17h13

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1844
Cosmétique en effet. Je préférais les fréquences en bleu et les volumes en rouge, mais des goûts et des couleurs on ne peut discuter.
ça serait bien de générer la wav de la somme
Une onde peut être réglée en harmonique de l'autre (on peut mettre dans une fenêtre à part un tableau des harmoniques en fonction de la fondamentale pour consultation; ou un combo pour extraction et affectation)

Et c'est là qu'on s'aperçoit que si on veut trois harmoniques, il va falloir simplifier drastiquement la saisie des fréquences. Et on retombe sur la saisie au textbox et ton satané "Enter".
Ou alors faire un seul module de réglage et un (ou des) bouton(s) d'affectations du réglage aux différentes fréquences
Le plus simple et le plus balourd étant de faire avec des flags

Note: Si tu a su en additionner deux, y a pas de raisons que tu n'en additionne pas quatre

Re note: Je m'étais planté en parlant de modulation d'amplitude par simple addition; on peut voir une vraie variation d'amplitude si on règle à 1200 et 1060 (et autour)
____________________
Roro

   
Le 21/12/2015 à 21h45

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1844
Suite de: 21/12/15 à 17h13
Dans l'éventualité d'ajouter des fréquences, j'ai fait ça.
Pour éviter de refaire autant de procédures que de fréquences, je passe par des tableaux (N° de freq, pos d'aff)
Le bouton fait tourner l'affectation du réglage; bien que je préfèrerais un bouton par fréquence.
ça a l'air de marcher (la freq 3 n'est là que pour l'affichage).
J'ai laissé les boites d'effacement visibles pour les positionner
J'espère ne pas avoir mis trop de souk
Code VB :
 
   nomainwin
   dim courbeF1(500), courbeF2(500), courbeF3(500)
 
    '----------------------------- INIT PARAM--------------------------
  dim courbeF1(500), courbeF2(500), courbeF3(500)
  pi=3.1415926536
  t=0
  longdiv=50  'larg div (pxls). trait div = 1 pxl ~~0
  long1=0.005 'secondes par division
  long2=0.002
  long3=0.001
  long4=0.0005
  long5=0.0002
  long6=0.0001
  long1aff$=str$(long1*1000) 'secondes par division, pour affichage
  long2aff$=str$(long2*1000)
  long3aff$=str$(long3*1000)
  long4aff$=str$(long4*1000)
  long5aff$=str$(long5*1000)
  long6aff$=str$(long6*1000)
  dim freq(4):freq(1)=1200:freq(2)=1060:freq(3)=600':freq(4)=50 '§§§§§§§§§§§§§§
  dim posfr(4): posfr(1)=150:posfr(2)=220:posfr(3)=290':posfr(4)=220
  dim eff1(4): eff1(1)=125:eff1(2)=195:eff1(3)=265':eff1(4)=220
  dim eff2(4): eff2(1)=115:eff2(2)=115:eff2(3)=115':eff2(4)=220
  dim eff3(4): eff3(1)=155:eff3(2)=225:eff3(3)=295':eff3(4)=220
  nfreq=1
    '***************************Fin init param**************************
    WindowWidth = 800: UpperLeftX = 200
    WindowHeight = 600: UpperLeftY = 200
    BUTTON #1.pdm1, "+", [pdm1], UL, 20, 35, 20, 20 '---freq 1
    BUTTON #1.pm1, "+", [pm1], UL, 40, 35, 20, 20
    BUTTON #1.pc1, "+", [pc1], UL, 60, 35, 20, 20
    BUTTON #1.pd1, "+", [pd1], UL, 80, 35, 20, 20
    BUTTON #1.pu1, "+", [pu1], UL, 100, 35, 20, 20
    BUTTON #1.mdm1, "-", [mdm1], UL, 20, 85, 20, 20
    BUTTON #1.mm1, "-", [mm1], UL, 40, 85, 20, 20
    BUTTON #1.mc1, "-", [mc1], UL, 60, 85, 20, 20
    BUTTON #1.md1, "-", [md1], UL, 80, 85, 20, 20
    BUTTON #1.mu1, "-", [mu1], UL, 100, 85, 20, 20
    BUTTON #1.flfr, "", [flagfr], UL, 140, 60, 30, 30  '--Affectation
    BUTTON #1.pcv1, "+", [pcv1], UL, 180, 35, 20, 20 '---Volume 1
    BUTTON #1.pdv1, "+", [pdv1], UL, 200, 35, 20, 20
    BUTTON #1.puv1, "+", [puv1], UL, 220, 35, 20, 20
    BUTTON #1.mcv1, "-", [mcv1], UL, 180, 85, 20, 20
    BUTTON #1.mdv1, "-", [mdv1], UL, 200, 85, 20, 20
    BUTTON #1.muv1, "-", [muv1], UL, 220, 85, 20, 20
    BUTTON #1.pcv2, "+", [pcv2], UL, 180, 135, 20, 20'---Volume 2
    BUTTON #1.pdv2, "+", [pdv2], UL, 200, 135, 20, 20
    BUTTON #1.puv2, "+", [puv2], UL, 220, 135, 20, 20
    BUTTON #1.mcv2, "-", [mcv2], UL, 180, 185, 20, 20
    BUTTON #1.mdv2, "-", [mdv2], UL, 200, 185, 20, 20
    BUTTON #1.muv2, "-", [muv2], UL, 220, 185, 20, 20
    graphicbox  #1.gb 280,15,500,500
    GRAPHICBOX #1.fr 15, 15, 250, 355
 
    groupbox #1.gbx3, "Base de temps", 8, 395, 225, 100
    radiobutton #1.rdb1, long1aff$+" ms par div", [SParDiv1_On], [SParDiv1_off], 26, 415, 96, 20
    radiobutton #1.rdb2, long2aff$+" ms par div", [SParDiv2_On], [SParDiv2_Off], 26, 440, 96, 20
    radiobutton #1.rdb3, long3aff$+" ms par div", [SParDiv3_On], [SParDiv3_Off], 26, 465, 96, 20
    radiobutton #1.rdb4, long4aff$+" ms par div", [SParDiv4_On], [SParDiv4_off], 126, 415, 96, 20
    radiobutton #1.rdb5, long5aff$+" ms par div", [SParDiv5_On], [SParDiv5_Off], 126, 440, 96, 20
    radiobutton #1.rdb6, long6aff$+" ms par div", [SParDiv6_On], [SParDiv6_Off], 126, 465, 96, 20
 
    open "..." for window_nf as #1
    #1 "trapclose [quit]"
    '----------------------------- INIT GRAPH--------------------------
    #1.fr , "down;fill 236 233 216"
     'freq1=1000:freq2=60:
     vol1=40:vol2=20
     #1.fr, "color black;backcolor 236 233 216"
     #1.fr, "place 5 115": #1.fr, "\Fréquence 1, Hz": #1.fr, "place 170 15": #1.fr, "\Vol1, %"
     #1.fr, "place 5 180": #1.fr, "\Fréquence 2, Hz": #1.fr, "place 170 115": #1.fr, "\Vol2, %"
     #1.fr, "place 5 245": #1.fr, "\Fréquence 3, Hz"
     #1.fr, "place 2 60": #1.fr, "\dm .m .c  .d  .u":#1.fr, "place 120 40": #1.fr, "\N°freq"
     #1.fr, "font courier_new 24 bold"
     #1.fr, "color blue;backcolor 236 233 216"
     #1.flfr,str$(nfreq)
     gosub [affreq1]: nfreq=2:gosub [affreq2]: nfreq=3:gosub [affreq3]: nfreq=1
     gosub [affvol1]: gosub [affvol2]
 
    gosub [sinusoides]
 
    print #1.rdb2,"setfocus"
  wait '----------------------- PRIMO WAIT-------------------

  [SParDiv1_On] deltaT=long1/longdiv:gosub [sinusoides]:wait
  [SParDiv1_off] wait
  [SParDiv2_On]  deltaT=long2/longdiv:gosub [sinusoides]:wait
  [SParDiv2_Off] wait
  [SParDiv3_On]  deltaT=long3/longdiv:gosub [sinusoides]:wait
  [SParDiv3_Off] wait
  [SParDiv4_On]  deltaT=long4/longdiv:gosub [sinusoides]:wait
  [SParDiv4_off] wait
  [SParDiv5_On]  deltaT=long5/longdiv:gosub [sinusoides]:wait
  [SParDiv5_Off] wait
  [SParDiv6_On]  deltaT=long6/longdiv:gosub [sinusoides]:wait
  [SParDiv6_Off] wait '---------------------------------

  '--------------------------------------------

  [sinusoides]
 
    omega1=2*pi*int(freq(1))
    omega2=2*pi*int(freq(2))
    t=0
 
    for a=0 to 499
        courbeF1(a)=vol1*sin(omega1*t)/2
        courbeF2(a)=vol2*sin(omega2*t)/2
        'courbeF3(a)=40*sin(omega3*t)
        courbeF3(a)=courbeF1(a)+courbeF2(a)
        t=t+deltaT
    next
    cls
 
  'ecran
    #1.gb "down ; fill 0 106 53":#1.gb "color 157 157 0"
    for x= 0 to 500 step longdiv
        #1.gb "line ";x;" 0 ";x;" 500"
    next
    for y= 0 to 500 step longdiv
        #1.gb "line 0 ";y;" 500 ";y
    next
 
  'dessin
    #1.gb "color green"
    ph=180:midY1=50:midY2=150:midY3=350
    oldY1=midY1:oldY2=midY2:oldY3=midY3
    for n=0 to 499
        x=n
        y=midY1+courbeF1(n)
        #1.gb "line ";oldX1;" ";oldY1;" ";x;" ";y
        oldX1=x:oldY1=y
        y=midY2+courbeF2(n)
        #1.gb "line ";oldX2;" ";oldY2;" ";x;" ";y
        oldX2=x:oldY2=y
        y=midY3+courbeF3(n)
        #1.gb "line ";oldX3;" ";oldY3;" ";x;" ";y
        oldX3=x:oldY3=y
    next
    #1.gb "flush"
  return
 
  '------------------------ Variation Frequences ----------------------
  [flagfr]  '-----Affectation
      nfreq=nfreq+1
      if nfreq=4 then nfreq=1
      #1.flfr, str$(nfreq)
  wait
  [pdm1]     '-------plus
      freq(nfreq)=freq(nfreq)+10000:gosub [affreq1]:wait
  [pm1]
      freq(nfreq)=freq(nfreq)+1000:gosub [affreq1]:wait
  [pc1]
      freq(nfreq)=freq(nfreq)+100:gosub [affreq1]:wait
  [pd1]
      freq(nfreq)=freq(nfreq)+10:gosub [affreq1]:wait
  [pu1]
      freq(nfreq)=freq(nfreq)+1:gosub [affreq1]:wait
  [mdm1]       '---------moins
      freq(nfreq)=freq(nfreq)-10000:gosub [affreq1]:wait
  [mm1]
      freq(nfreq)=freq(nfreq)-1000:gosub [affreq1]:wait
  [mc1]
      freq(nfreq)=freq(nfreq)-100:gosub [affreq1]:wait
  [md1]
      freq(nfreq)=freq(nfreq)-10:gosub [affreq1]:wait
  [mu1]
      freq(nfreq)=freq(nfreq)-1:gosub [affreq1]:wait
  [affreq1]
  [affreq2]
  [affreq3]
      if freq(nfreq) > 80000 then freq(nfreq)=80000
      if freq(nfreq) < 1 then freq(nfreq)=1
      freq1$=str$(freq(nfreq)): lonfreq1=len(freq1$)
      select case lonfreq1
        case 1
        xxf=90
        case 2
        xxf=70
        case 3
        xxf=50
        case 4
        xxf=30
        case 5
        xxf=10
      end select
      #1.fr,"place ";"5";" ";eff1(nfreq):#1.fr,"color red;backcolor 236 233 216":#1.fr,"boxfilled ";eff2(nfreq);" ";eff3(nfreq) 'efface
      #1.fr, "color blue;backcolor 236 233 216"
      #1.fr, "place ";xxf;" ";posfr(nfreq): #1.fr, "\"; str$(int(freq(nfreq)))
      #1.fr, "flush"
      gosub [sinusoides]
  return
  '-------------------Variation Volume 1 ----------------------
  'plus
  [pcv1] vol1=vol1+100:gosub [affvol1]:wait
  [pdv1] vol1=vol1+10:gosub [affvol1]:wait
  [puv1] vol1=vol1+1:gosub [affvol1]:wait
 
  'moins
  [mcv1] vol1=vol1-100:gosub [affvol1]:wait
  [mdv1] vol1=vol1-10:gosub [affvol1]:wait
  [muv1] vol1=vol1-1:gosub [affvol1]:wait
 
  'affichage
  [affvol1]
      if vol1 > 100 then vol1=100
      if vol1 < 0 then vol1=0
      vol1$=str$(vol1): lonvol1=len(vol1$)
      select case lonvol1
        case 1
        xxv1=210
        case 2
        xxv1=190
        case 3
        xxv1=170
      end select
      #1.fr,"place ";"170";" ";"30":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 230 70" 'efface
      #1.fr, "color blue;backcolor 236 233 216"
      #1.fr, "place ";xxv1;" ";"65": #1.fr, "\"; str$(int(vol1))
      #1.fr, "flush"
      gosub [sinusoides]
  return
 
  '-------------------Variation Volume 2 ---------------------
  'moins
  [pcv2] vol2=vol2+100:gosub [affvol2]:wait
  [pdv2] vol2=vol2+10:gosub [affvol2]:wait
  [puv2] vol2=vol2+1:gosub [affvol2]:wait
 
  'plus
  [mcv2] vol2=vol2-100:gosub [affvol2]:wait
  [mdv2] vol2=vol2-10:gosub [affvol2]:wait
  [muv2] vol2=vol2-1:gosub [affvol2]:wait
 
  'affichage
  [affvol2]
      if vol2 > 100 then vol2=100
      if vol2 < 0 then vol2=0
      vol2$=str$(vol2): lonvol2=len(vol2$)
      select case lonvol2
        case 1
        xxv2=210
        case 2
        xxv2=190
        case 3
        xxv2=170
      end select
      #1.fr,"place ";"170";" ";"130":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 230 170" 'efface
      #1.fr, "color red;backcolor 236 233 216"
      #1.fr, "place ";xxv2;" ";"165": #1.fr, "\"; str$(int(vol2))
      #1.fr, "flush"
      gosub [sinusoides]
  return
 
  [quit]
    close #1
  end
 
____________________
Roro

   
Le 21/12/2015 à 21h51

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 336
Sorry Roland, je rédigeais ma réponse à ton post précédent. Je regarde ta nouvelle mouture et je reviens après.

En attendant je répond à ton post d'avant :

J'ai préféré en effet une couleur par fréquence, volume, et trace. Je n'ai pas osé changer la couleur des traces, parce que je trouve que leur vert est tout à fait adapté. Peut-être en mettant une barre de couleur en regard de la trace correspondante. Ce n'est pas obligatoire...

Il reste encore le problème de la droite au milieu de la sinusoïde, comme s'il y avait en plus de la courbe un trait entre le point 0 et le point 499 du graphe. Je n'ai pas trouvé :( ça doit pourtant être simple, mais c'est dur de se replonger dans le bintz.

Prochain travail : la génération du wav de la courbe du bas

La gestion des harmoniques ne devrait pas nécessiter de roues codeuses, puisque les harmoniques sont multiples de la fréquence principale. Je verrais bien un bouton par fréquence principale, ouvrant une fenêtre listant une série de potards dans lesquels il suffit de cliquer à la souris pour ajuster le niveau de chaque harmonique.

Qu'entends-tu par flag ?

Un point qu'il faudra aborder : il n'y a pas d'antialiasing sur les courbes, du coup, elles apparaissent parfois surprenantes (par ex : 11000Hz vol 70 et 2060Hz vol 70 à 5 ms par division. Il y a de la recherche à faire à ce niveau-là : que donnerait l'image sur un vrai oscillo, et comment la reproduire ? A ce jour je ne vois pas trop comment faire. Si quelqu'un dispose d'un oscillo analogique et d'un générateur sinus 2 voies, et qu'il puisse nous faire parvenir une photo...

si on règle à 1200 et 1060 à 2ms/div: : mon latin est soumis à rude épreuve. je sais que par mélange les radios utilisent des fréquences intermédiaires. En mélangeant 1200 et 1060 Hz, on obtient 1200-1060=140 Hz et 1200+1060=2260 Hz. Or je mesure 70 Hz au lieu de 140 Hz... et qu'est devenu le 2260 ? Faut vraiment que je me mette sérieusement à l'étude des ondes, 'm'étonne pas que j'ai jamais rien compris...

edit : premier commentaire à chaud : c'est clair, tu maîtrise les boutons ^^. Je regarde plus en détail, mais pas pour ce soir. Bonne nuit



Edité par Christophe Le 21/12/2015 à 21h55
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 21/12/2015 à 22h51

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1844
Réponse à ta réponse du post d'avant:
J'ai laissé tombés les flags (drapeaux) pour les tableaux (plus élégant et plus pratique)

Pour la trace au 0 V et les courbes bizarres, il ne faut pas oublier que: [sinusoïdes] a un double usage; ce qui est totalement illégal. la base de temps devrait être un balayage sur les "x"; les sinusoïdes elles, ne devraient êtres que des variations de niveau. La visu telle quelle est fabriquée est une monstrueuse entourloupe.

" En mélangeant 1200 et 1060 Hz" les amplitudes (niveaux) s'additionnent; pas les fréquences
200 Hz niv:40 + 200 Hz niv: 40 = 200 Hz niv: 80
On obtient des fréquences différentes par le déphasage (à confirmer)

Bien que les harmoniques soient des multiples, il serait bon de garder les réglages dispos pour faire de l'anharmonique
Et en fait, la visu pourrait se limiter à l'onde finale -une fois que le bazar sera bien maîtrisé
____________________
Roro

   
Le 22/12/2015 à 14h50

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 336
Oki, j'ai vu le problème.

Je ne vois rien d'illégal dans l'usage de "sinusoides", on y va à chaque fois qu'il faut recalculer et afficher les traces, et la base de temps _est_ un balayage sur les x, point d'entourloupe là dedans, ou alors je m'appelle David Copperfield^^

Quelque chose d'illégal dans notre manière de procéder consiste à relier deux échantillons successifs par un segment de droite, ce qui est rigoureusement faux : rien ne dit qu'entre ces deux points successifs le signal numérisé évolue linéairement.

Avec le scope à 5 ms/div, sachant qu'il y a 50 pixels par division, un pixel correspond sur x à un temps valant 0.005/50 = 0.1 ms. Une période sinusoidale passe 3 fois par zéro : au début, au milieu et à la fin. Si ces trois points sont distants de 0.1 ms, la période vaut 0.2 ms, et on affichera une courbe plate valant zéro, alors que la sinusoide existe bel et bien... essaie avec 5 kHz à 5 ms/div, et vise un peu la tête de la sinus...

Donc on se plante dans la philosophie, car j'étais parti pour convertir en audio ce qui était affiché à l'écran, en fait il faut d'abord numériser à la fréquence double de la fréquence max (le théorème de Nyquist), et ensuite rien n'empêche d'en déduire les points de l'affichage, qui ne seront que de l'affichage. N'afficher que le résultat me plait aussi.

(pour les harmoniques non harmoniques, on va les laisser de côté pour le moment, on complexificationnera plus tard. Qui m'avait conseillé de rester simple, hein ? ;) )

Je réfléchis à cette numérisation (et on avait dit aussi qu'on ajouterait un réglage de déphasage entre les deux traces, ça devrait être pas trop compliqué à mettre en oeuvre)

Bon après-midi, je repasse sans doutes ce soir.

A+
____________________
Just Basic :
  • utilisation courante avec Linux/Mageia5 + Wine (support partiel et quelques petites choses non implémentées dans l'aide mais pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 22/12/2015 à 16h22

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1844
Je dis que c'est une entourloupe par rapport au fonctionnement d'un oscillo
Si par exemple tu mets 1 s par div, je doute que tu vois le balayage sans signal.
Citation:
convertir en audio ce qui était affiché à l'écran,

Lol ! Ah oui, c'était mal barré. il ne faut travailler que sur le code de notre ami l'inconnu.

Sur qu'un signal numérisé, c'est que des rondelles; si fines soient-elles; mais bon, une droite c'est aussi que des points; vaste débat
La visu n'est qu'une visu et n'a rien à voir avec l'usine à gaz de l"inconnu"
On va peut-être laisser aussi de côté la visu par échantillonnage, hein.

Le tout est de comprendre comment l"inconnu" a additionnées (en fait mixées) ses fréquences, il """"suffira"""" de piloter les paramètres par le réglage des fréquence actuel (en parallèle ou séparément, la visu ne sera qu'une "relation" de ce qu'a pondu l'usine à gaz)
Le déphasage à la visu pour le fun (une seule puisque c'est relatif)

Le gros morceau, c'est l'usine à gaz, et là, comme visu, y a que la mainwin ; d'ici qu'il faille faire un programme pour décortiquer la flopée de données qu'elle sort, y a pas loin
____________________
Roro

   
Général » Générateur BF Ou qui tente de l'être  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie