Forum Liberty Basic France
• Index
Reprise du message précédent
Après tests et cogitations, la conclusion du B.E.M (Bureau 'Enquête et Mystères)
Quand la "for next" est longue (bien remplie) le bouton et le flag sont lus;
Exemple: Dans la boucle: [go] de la machine à dormir debout
Qui est incluse dans: Compose_3a.zip
Où le bouton "Stop" fonctionne très bien
Quand la boucle est courte (peu d'instruction à l'intérieur) plus rien n'est lu; ni boutons, ni clic souris, ni position souris. La "for next" est sourde et aveugle.
Après tests et cogitations, la conclusion du B.E.M (Bureau 'Enquête et Mystères)
Quand la "for next" est longue (bien remplie) le bouton et le flag sont lus;
Exemple: Dans la boucle: [go] de la machine à dormir debout
Qui est incluse dans: Compose_3a.zip
Où le bouton "Stop" fonctionne très bien
Quand la boucle est courte (peu d'instruction à l'intérieur) plus rien n'est lu; ni boutons, ni clic souris, ni position souris. La "for next" est sourde et aveugle.
____________________
Roro
Roro
Bein ça, c'est du programme^^^... Tu as du y passer un bon moment...
Pour ma part j'ai pas trouvé grand chose.
Éventuellement j'ai concocté un petit programme avec des boutons pour tester.
Tel qu'il est là, il prend en compte l'exit for... seulement lorsque la boucle est terminée.
Possible aussi que je n'ai pas compris le problème.
Tu peux faire quelque chose avec ça ?
Code VB :
Pour ma part j'ai pas trouvé grand chose.
Éventuellement j'ai concocté un petit programme avec des boutons pour tester.
Tel qu'il est là, il prend en compte l'exit for... seulement lorsque la boucle est terminée.
Possible aussi que je n'ai pas compris le problème.
Tu peux faire quelque chose avec ça ?
Code VB :
'test exit for et bouton WindowWidth = 200 WindowHeight = 270 'pour tester l'exit : 0=pas d'exit, 1=exit for sto=0 'boucle debut=0 fin=10000 tour$="" 'prépa affichage fenêtre statictext #test,"Tour n°",25,10,50,30 statictext #test,"Boucle",25,50,60,20 statictext #test,"Début :",35,75,60,20 statictext #test,"Fin :",35,95,60,20 statictext #test.tr,tour$,75,10,120,50 textbox #test.deb,95,70,50,20 textbox #test.fin,95,90,50,20 button #test.lancer, "Lancer la boucle", [lancer], UL, 15, 120, 170, 30 button #test.stop, "Faire l'EXIT FOR", [stop], UL, 15, 160, 170, 30 button #test.quitter, "Quitter", [quit], UL, 15, 200, 170, 30 'affichage fenêtre open "Test EXIT FOR et boutons" for window as #test 'taille d'affichage du tour actuel de la boucle print #test.tr,"!font arial 24" 'affichage début et fin de la boucle print #test.deb,str$(debut) print #test.fin,str$(fin) wait 'fin du programme, au cas où... end '******** zone des sous-programmes ******** [lancer] print:print "on va lancer la boucle" 'lecture du début et de la fin de la boucle print #test.deb,"!contents? deb$" print #test.fin,"!contents? fin$" deb=val(deb$) fin=val(fin$) 'on lance la boucle for a=deb to fin print a print #test.tr,str$(a) if sto=1 then exit for next print "fin de boucle" wait [stop] print "sto passe à 1" sto=1 wait [quit] print : print "On quitte..." close #test end
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Bah j'ai fait la même chose, sauf que j'y ai ajouté des "whenmouse..." des "whenbutton..."...des tests de position souris et quelqu''autres subtilités
Y a rien qui marche; rien de rien.
Et pourtant, j'ai des programmes qui utilisent un bouton "stop" (qui mets un flag à "1") avec un "if flag=1 then exit for" dans la boucle.
Et ça marche.
La seule différence que j'ai noté, c'est le contenu de la boucle (boucle bien pleine, ça marche; boucle pas assez pleine, ça marche pô)
Je soupçonne le concepteur du langage d'avoir utilisés des subterfuges pour gagner en vitesse d'exécution.
Il a juste oublié que le diable se cache dans les subterfuges
Y a rien qui marche; rien de rien.
Et pourtant, j'ai des programmes qui utilisent un bouton "stop" (qui mets un flag à "1") avec un "if flag=1 then exit for" dans la boucle.
Et ça marche.
La seule différence que j'ai noté, c'est le contenu de la boucle (boucle bien pleine, ça marche; boucle pas assez pleine, ça marche pô)
Je soupçonne le concepteur du langage d'avoir utilisés des subterfuges pour gagner en vitesse d'exécution.
Il a juste oublié que le diable se cache dans les subterfuges
____________________
Roro
Roro
J'ai pas pu tester avec petit et grand contenu, Si ça fonctionne différemment à programme identique, il y a bien un bug quelque part. Et c'est pas une incompatibilité avec une autre instruction, puisque c'est la version courte qui ne marche pas (tu as enlevé une partie du code de la grande boucle pour obtenir la petite, ou c'est deux boucles différentes ?)
Pour mon prog d'essai, j'ai pigé un peu plus tard que mon "exit for" ne pourrait pas fonctionner : la variable de sortie devient 1 lorsqu'on clique sur le bouton, mais quand l'ordi exécute la boucle, il ne peut pas écouter les boutons. Pour cela il faut attendre la fin de la boucle et tomber sur l'instruction wait. Pour preuve, l'appui sur "quitter" n'est pris en compte qu'à la fin de la boucle.
Par contre, si on relance la boucle, sto est toujours 1, et la boucle s'arrête dès le premier tour, comme quoi l'"exit for" fonctionne ici
Mais comment écrire la boucle pour que le wait soit à l'intérieur ?
Je chercherais une autre solution pour contourner l'obstacle, AMHA
Pour mon prog d'essai, j'ai pigé un peu plus tard que mon "exit for" ne pourrait pas fonctionner : la variable de sortie devient 1 lorsqu'on clique sur le bouton, mais quand l'ordi exécute la boucle, il ne peut pas écouter les boutons. Pour cela il faut attendre la fin de la boucle et tomber sur l'instruction wait. Pour preuve, l'appui sur "quitter" n'est pris en compte qu'à la fin de la boucle.
Par contre, si on relance la boucle, sto est toujours 1, et la boucle s'arrête dès le premier tour, comme quoi l'"exit for" fonctionne ici
Mais comment écrire la boucle pour que le wait soit à l'intérieur ?
Je chercherais une autre solution pour contourner l'obstacle, AMHA
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Ah oui, bonne idée; je vais tester en enlevant des instructions d'une boucle qui fonctionne.
On en aura le coeur net
Edit: Aaaargh..! Les programmes où le stop marche ont une pause
Le bouton doit être lu pendant la pause
On en aura le coeur net
Edit: Aaaargh..! Les programmes où le stop marche ont une pause
Le bouton doit être lu pendant la pause
____________________
Roro
Roro
Youhou..! Le problème est résolu
Il suffit de mettre un gosub [pause] dans la boucle
avec une pause d'une seule milliseconde ça marche
Code VB :
Il suffit de mettre un gosub [pause] dans la boucle
avec une pause d'une seule milliseconde ça marche
Code VB :
NOMAINWIN WindowWidth = 295 WindowHeight = 290 UpperLeftX = (DisplayWidth-WindowWidth)-200 UpperLeftY = 20 ' (DisplayHeight-WindowHeight) TEXTBOX #w.testa, 30 , 30, 70, 25 BUTTON #w.go, "Go !", [go], UL, 120, 30, 40, 20 TEXTBOX #w.entr, 180, 30, 70, 25 BUTTON #w.sto, "Stop !", [stop], UL, 20, 70, 40, 20 TEXTBOX #w.dur, 100, 170, 90, 25 GRAPHICBOX #w.m 5, 5, 280, 250 OPEN "Test B" FOR window_nf AS #w #w, "TRAPCLOSE [closetest]" #w.m , "down" #w.m , "fill blue; color yellow; backcolor blue" #w.m, "place 180 70": #w.m, "\Entrer" #w.m, "place 170 90": #w.m, "\Borne compteur" #w.m, "place 90 210": #w.m, "\Entrer temps de pause" #w.entr, "10000": #w.dur, "200" wait [go] #w.dur, "!contents? dur$": dur=val(dur$) r=0 #w.entr, "!contents? var$" for a=1 to val(var$) if sto=1 then sto=0: exit for #w.testa, str$(r) r=r+1 gosub [pause] next a wait [stop] sto=1 wait [pause] timer dur, [temps] wait [temps] timer 0 return wait [closetest] CLOSE #w END
____________________
Roro
Roro
Alors là, j'ai fait un copié-collé de ton rajout dans mon prog, et scotché je suis...
Donc le temps de la pause, c'est comme si la boucle n'était pas en cours d’exécution (ou n'existait pas ? ), et l'état des boutons est à nouveau lisible ?
Un clic fait entre deux tours sera pris en compte quelle que soit la durée de la pause, puisque ce serait le fait de sortir momentanément de la boucle qui permette de lire l'état des boutons, et donc d'exécuter leur sous-programme ?
Points d'interrogation simplement de circonstance, car j'hypothèsise
Je médite sur les débouchés.
Donc le temps de la pause, c'est comme si la boucle n'était pas en cours d’exécution (ou n'existait pas ? ), et l'état des boutons est à nouveau lisible ?
Un clic fait entre deux tours sera pris en compte quelle que soit la durée de la pause, puisque ce serait le fait de sortir momentanément de la boucle qui permette de lire l'état des boutons, et donc d'exécuter leur sous-programme ?
Points d'interrogation simplement de circonstance, car j'hypothèsise

Je médite sur les débouchés.
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Médite donc aussi sur quelque chose à coder.
Et d'inédit; tant qu'à faire....
Parce que si on compte sur la quarantaine de visiteurs journaliers pour donner des idées, je crois qu'on peut attendre longtemps
Je médite sur les débouchés.
Médite donc aussi sur quelque chose à coder.
Et d'inédit; tant qu'à faire....
Parce que si on compte sur la quarantaine de visiteurs journaliers pour donner des idées, je crois qu'on peut attendre longtemps
____________________
Roro
Roro
Je ne sais pas, y'a du y avoir un bug dans l'exit for du puits à inspiration, car plus rien ne sort du pipeline.Zéro, nada, ketchi, null, nothing (at all) pas même un pet de souris colonisatrice de pipeline désaffecté.
Idée de programmation pour toi ou pour moi ?
Un générateur BF, qui produit des sons fondamentaux, avec leurs harmoniques paramétrables ? Il n'y a pas d'instructions pour jouer du son en JB/LB, mais rien n'empêche de créer un fichier wav qu'on charge ensuite pour écouter le résultat. En fait c'est plutôt pour continuer à apprendre le JB, c'est pas grave si c'est pas possible, du moment que l'organisation du truc est cohérente et que les routines soient fonctionnelles.
Enfin voilà, quoi... et les visiteurs visitent
Idée de programmation pour toi ou pour moi ?
Un générateur BF, qui produit des sons fondamentaux, avec leurs harmoniques paramétrables ? Il n'y a pas d'instructions pour jouer du son en JB/LB, mais rien n'empêche de créer un fichier wav qu'on charge ensuite pour écouter le résultat. En fait c'est plutôt pour continuer à apprendre le JB, c'est pas grave si c'est pas possible, du moment que l'organisation du truc est cohérente et que les routines soient fonctionnelles.
Enfin voilà, quoi... et les visiteurs visitent

____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Si tu veux te faire les griffes, jette un z'oeil sur ce qu'a fait un anglophone.
(Il faut attendre que toute l'onde soit générée pour entendre le son)
J'ai tenté de retrouver l'auteur chez JB english, mais l'outil de recherche est un peu olé olé.
Prévois de l'aspirine, c'est pas de la rigolade
Code VB :
Un générateur BF,
Si tu veux te faire les griffes, jette un z'oeil sur ce qu'a fait un anglophone.
(Il faut attendre que toute l'onde soit générée pour entendre le son)
J'ai tenté de retrouver l'auteur chez JB english, mais l'outil de recherche est un peu olé olé.
Prévois de l'aspirine, c'est pas de la rigolade
Code VB :
nomainwin WindowWidth=500 WindowHeight=400 UpperLeftX=INT((DisplayWidth-WindowWidth)/2) UpperLeftY=INT((DisplayHeight-WindowHeight)/2) freq1=261 'middle C freq2=freq1*1.25992'1.25 'major third freq3=freq1*1.49831'1.50 'fifth freq4=freq1*1.68179'1.6667 'major sixth pi=3.14159265 omega1=2*pi*freq1 omega2=2*pi*freq2 omega3=2*pi*freq3 omega4=2*pi*freq4 amp=.75 'a number between 0 and 1 delta=1/11025 offset=127 open "wave" for graphics_nf_nsb as #g ' _fs_nsb as #g #g "down ; trapclose [QUIT]" for t = 0 to .5 step delta sample=amp/2*sin(omega1*t) 'freq1 x=DisplayWidth*t y=sample*offset print sample, y+offset data$=data$;chr$(int(y+offset)) '#g "goto ";x;" ";y+offset next t for t = 0 to .5 step delta sample=amp/4*sin(omega1*t)+amp/3*sin(omega2*t) '1 and 2 x=DisplayWidth*t y=sample*offset print sample, y+offset data$=data$;chr$(int(y+offset)) '#g "goto ";x;" ";y+offset next t for t = 0 to .5 step delta sample=amp/4*sin(omega1*t)+amp/4*sin(omega2*t)+amp/3*sin(omega3*t) '1, 2 and 3 x=DisplayWidth*t y=sample*offset print sample, y+offset data$=data$;chr$(int(y+offset)) '#g "goto ";x;" ";y+offset next t #g "fill white" #g "color blue ; place 0 ";yOffset+1;" ; goto ";DisplayWidth;" ";yOffset+1 #g "color red ; place 0 ";yOffset+127;" ; goto ";DisplayWidth;" ";yOffset+127 #g "color blue ; place 0 ";yOffset+255;" ; goto ";DisplayWidth;" ";yOffset+255 #g "color black ; place 0 ";127+yOffset flag=0 for t = 0 to 2 step delta if (t>.125 and t<.750) then sample=amp/4*sin(omega1*t)+amp/4*sin(omega2*t)+amp/4*sin(omega3*t)+amp/4*sin(omega4*t+t) 'all else sample=amp/4*sin(omega1*t)+amp/4*sin(omega2*t)+amp/4*sin(omega3*t) '1, 2 and 3 end if x=DisplayWidth*t y=sample*offset print sample, y+offset data$=data$;chr$(int(y+offset)) #g "goto ";x;" ";y+offset next t ChunkID$="RIFF" ChunkSize$=makeAsciiNumber$(36+255,4) Format$="WAVE" SubChunk1ID$="fmt " SubChunk1Size$=makeAsciiNumber$(16,4) AudioFormat$=makeAsciiNumber$(1,2) NumChannels$=makeAsciiNumber$(1,2) SampleRate$=makeAsciiNumber$(11025,4) ByteRate$=makeAsciiNumber$(11025,4) BlockAlign$=makeAsciiNumber$(1,2) BitsPerSample$=makeAsciiNumber$(8,2) SubChunk2ID$="data" SubChunk2Size$=makeAsciiNumber$(len(data$),4) wave$=ChunkID$;ChunkSize$;Format$;SubChunk1ID$;SubChunk1Size$;AudioFormat$;NumChannels$;SampleRate$;ByteRate$;BlockAlign$;BitsPerSample$;SubChunk2ID$;SubChunk2Size$ wave$=wave$;data$ ChunkID$=mid$(wave$,1,4) : print "ChunkID$:";ChunkID$ 'should be "RIFF" ChunkSize$=mid$(wave$,5,4) ChunkSize=bigAsciiNumber(ChunkSize$) : print "ChunkSize$:"; ChunkSize$,"ChunkSize:";ChunkSize,"File length:";len(wave$) Format$=mid$(wave$,9,4) : print "Format$:";Format$ 'should be "WAVE" SubChunk1ID$=mid$(wave$,13,4) : print "SubChunk1ID$:";SubChunk1ID$ 'should be "fmt " SubChunk1Size$=mid$(wave$,17,4) SubChunk1Size=bigAsciiNumber(SubChunk1Size$) : print "SubChunk1Size$:";SubChunk1Size$,"SubChunk1Size:";SubChunk1Size AudioFormat$=mid$(wave$,21,2) AudioFormat=bigAsciiNumber(AudioFormat$) : print "AudioFormat$:";AudioFormat$,"AudioFormat:";AudioFormat NumChannels$=mid$(wave$,23,2) NumChannels=bigAsciiNumber(NumChannels$) : print "NumChannels$:";NumChannels$,"NumChannels:";NumChannels SampleRate$=mid$(wave$,25,4) SampleRate=bigAsciiNumber(SampleRate$) : print "SampleRate$:";SampleRate$,"SampleRate:";SampleRate ByteRate$=mid$(wave$,29,4) ByteRate=bigAsciiNumber(ByteRate$) : print "ByteRate$:";ByteRate$,"ByteRate:";ByteRate BlockAlign$=mid$(wave$,33,2) BlockAlign=bigAsciiNumber(BlockAlign$) : print "BlockAlign$:";BlockAlign$,"BlockAlign:";BlockAlign BitsPerSample$=mid$(wave$,35,2) BitsPerSample=bigAsciiNumber(BitsPerSample$) : print "BitsPerSample$:";BitsPerSample$,"BitsPerSample:";BitsPerSample 'data SubChunk2ID$=mid$(wave$,37,4) : print "SubChunkID$:";SubChunkID$ 'should be "data" SubChunk2Size$=mid$(wave$,41,4) SubChunk2Size=bigAsciiNumber(SubChunk2Size$) : print "SubChunk2Size$:";SubChunk2Size$,"SubChunk2Size:";SubChunk2Size open "newwave2.wav" for output as #out #out wave$ close #out playwave "newwave2.wav" kill "newwave2.wav" wait [QUIT] close #g end function makeAsciiNumber$(number,length) multiplier=256^(length-1) for i = length to 1 step -1 multiplier=256^(i-1) : if multiplier=0 then multiplier=1 asc=int(number/multiplier) number=number-asc*multiplier str$=chr$(asc);str$ 'print asc,chr$(asc),asc*multiplier,multiplier,number,,str$ next i makeAsciiNumber$=str$ end function function bigAsciiNumber(str$) multiplier=1 for i = 1 to 4 token$=mid$(str$,i,1) 'print token$,asc(token$),asc(token$)*multiplier,multiplier num=num+asc(token$)*multiplier multiplier=multiplier*256 next i bigAsciiNumber=num end function
____________________
Roro
Roro
Faut pas se laisser impressionner, c'est simplement le code qui est très ramassé
Par contre plus je l'étudie, plus je suis perplexe sur son calcul des échantillons. T'en pense quoi, toi ?
(dans les commentaires, il y a aussi des hypothèses, je dis pas que j'ai bon)
Code VB :
Je n'ai pas été plus loin pour le moment. Je n'ai pas demandé l'avis de l'auteur, mais c'est du décorticage de code pour apprendre, en aucun cas une critique.
(édité pour rectifier une grossière erreur : un OCTET contient 8 bits et peut prendre 256 valeurs. Dans le prog, la donnée est codée sur 256 valeurs, et non 256 octets)
Edité par Christophe Le 17/11/2015 à 17h15

Par contre plus je l'étudie, plus je suis perplexe sur son calcul des échantillons. T'en pense quoi, toi ?
(dans les commentaires, il y a aussi des hypothèses, je dis pas que j'ai bon)
Code VB :
'CODE INCOMPLET, on peut le lancer quand même. nomainwin 'Dimensions et centrage de la future fenêtre qui accuiellera la forme d'onde WindowWidth=500 WindowHeight=400 UpperLeftX=INT((DisplayWidth-WindowWidth)/2) UpperLeftY=INT((DisplayHeight-WindowHeight)/2) 'fréquences Do, Mi, Sol, La (me suis contenté de regarder dans un tableau) freq1=261 'middle C freq2=freq1*1.25992'1.25 'major third freq3=freq1*1.49831'1.50 'fifth freq4=freq1*1.68179'1.6667 'major sixth 'calcul pulsations, utiles pour la création de la sinusoide sur le graphique 'et les échantillons à mettre dans le fichier wav pi=3.14159265 omega1=2*pi*freq1 omega2=2*pi*freq2 omega3=2*pi*freq3 omega4=2*pi*freq4 'probablement l'amplification, 1 = valeur max amp=.75 'a number between 0 and 1 'intervalle de temps entre deux échantillons delta=1/11025 'décalage (un échantillon est codé sur 256 valeurs contenues dans un octet., on se place au milieu 'pour avoir les parties positives et négatives de la sinusoide) offset=127 'on ouvre la fenêtre graphique (facile, celle-là^^) open "wave" for graphics_nf_nsb as #g ' _fs_nsb as #g 'là, je pige pas : on va au programme de fermeture lorsqu'on veut dessiner la courbe ??? #g "down ; trapclose [QUIT]" 'équivalent d'un "print #g" 'fréquence 1 calculée pour affichage de la sinusoide 'et insertion des échantillons dans la chaîne data$ for t = 0 to .5 step delta 'pour une demi-seconde au pas de 1/11025è de sec 'calcul de l'échantillon sample=amp/2*sin(omega1*t) ' 0.75/2 * par un truc qui varie de -1 à 1, donc la valeur ' de l'échantillon est comprise entre -0.375 et +0.375 x=DisplayWidth*t 'varie de 0 à la moitié de la largeur d'écran (puisque for t=0 à 0.5) 'à quoi sert x ? y=sample*offset 'valeur de l'échantillon multipliée par le décalage ??? '-47.625 < y < +47.625 'écrit la valeur de sample, y+offset, sur la mainwin, y'a le temps d'aller boire un café. '(normalement inactif, puisqu'il y a l'instrution NOMAINWIN en début de prog.) print sample, y+offset 'autrement dit : sample*offset+offset... '79,375 < y+offset < 174.625 'stockage des échantillons data$=data$;chr$(int(y+offset)) 'à chaque tour, data$ s'enrichit d'un caractère 'correspondant à la partie entière de y+offset 'l'échantillon est donc codé par un octet allant de 'chr$(79) à chr$(174) 'initialement, en commentaire : '#g "goto ";x;" ";y+offset next t 'ARRET ICI close #g end
Je n'ai pas été plus loin pour le moment. Je n'ai pas demandé l'avis de l'auteur, mais c'est du décorticage de code pour apprendre, en aucun cas une critique.
(édité pour rectifier une grossière erreur : un OCTET contient 8 bits et peut prendre 256 valeurs. Dans le prog, la donnée est codée sur 256 valeurs, et non 256 octets)
Edité par Christophe Le 17/11/2015 à 17h15
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Hey, pas mal l'analyse.
"#g "down ; trapclose [QUIT]"
Le: "down" est obligatoire pour afficher en mode graphique (abbaisse le crayon)
Le: "trapclose [QUIT]" présent dans tout les programmes gère la croix de fermeture de la fenêtre.
"print sample, y+offset" : J'ai un doute pour l'affichage en mainwin, il devrait pas y avoir un point virgule et non une virgule ?
Ce que j'en pense ? Que c'est pas demain que j'y pomperai quelque chose.

J'ai attaqué sous un autre angle, j'ai ouvert le fichier généré dans un éditeur pour voir s'il y avait moyen de le découper.
J'ai vite lâché prise
Edit, tu a été un peu trop vaillant au sécateur le truc s'ouvre mais ne marche pas.
J'avais commencé de l'élaguer aussi, j'en ai plusieurs versions plus ou moins déplumées qui fonctionnent
"#g "down ; trapclose [QUIT]"
Le: "down" est obligatoire pour afficher en mode graphique (abbaisse le crayon)
Le: "trapclose [QUIT]" présent dans tout les programmes gère la croix de fermeture de la fenêtre.
"print sample, y+offset" : J'ai un doute pour l'affichage en mainwin, il devrait pas y avoir un point virgule et non une virgule ?
Ce que j'en pense ? Que c'est pas demain que j'y pomperai quelque chose.




J'ai attaqué sous un autre angle, j'ai ouvert le fichier généré dans un éditeur pour voir s'il y avait moyen de le découper.
J'ai vite lâché prise
Edit, tu a été un peu trop vaillant au sécateur le truc s'ouvre mais ne marche pas.
J'avais commencé de l'élaguer aussi, j'en ai plusieurs versions plus ou moins déplumées qui fonctionnent
____________________
Roro
Roro
Possible que j'ai remodifié le programme après l'avoir posté, pour qu'il se ferme normalement. Le "close #g:end" n'est pas suffisant ?
Roland:
Le: "down" est obligatoire pour afficher en mode graphique (abaisse le crayon)
Le: "trapclose [QUIT]" présent dans tout les programmes gère la croix de fermeture de la fenêtre.
Oui, mais les deux dans la même commande, je n'ai toujours pas capté la finalité
Pour le "print sample, y+offset" ça se comporte comme dans un print using, J'ai testé en mettant le nomainwin en commentaire : la virgule se comporte comme un tab, alors que le point-virgule empêche simplement d'aller à la ligne pour afficher la donnée d'après. (au fait, avec la mainwin, c'est long, long, long, une demi-seconde de données audio...).
Les fichiers audio sont pour moi une vieille connaissance : j'ai voulu un jour (avec Qbasic ou JustBasic ?) extraire les données de l’en-tête (la trentaine de ligne qui commence dans le programme par
ChunkID$="RIFF"
ChunkSize$=makeAsciiNumber$(36+255,4)
Format$="WAVE"
SubChunk1ID$="fmt "
....
mais je n'ai jamais cherché à lire les données audio proprement dites, ce qui fait que je ne peux pas affirmer que sa méthode est bonne ou pas.
Elle me semble surprenante. A confirmer, mais dans le programme, du moins pour ce que j'ai analysé, il y a un octet par échantillon, donc 256 valeurs. S'il veut 75% du niveau total disponible, ça représente 3/4 de 256, soit 186 valeurs. Si on place le point milieu à la valeur 127, la limite basse de l'échantillon est à 127-186/2=31, et la limite haute est à 127+186/2=223, donc j'encadre son y comme ça : 31 > y > 223, là où il l'encadre 79 > y > 174.
Il obtient bien sa sinusoïde à la bonne fréquence, mais avec un niveau qui n'est pas le 0.75 qu'il a défini pour son paramètre amp
Désolé pour la technique.
Je pense simplement qu'il a programmé ça à la va-vite, pour voir si c'était faisable, et qu'il ne s'est pas préoccupé d'aller plus loin, parce que ça semblait fonctionner.
Je vais quand même explorer plus loin, quand j'aurais deux minutes... si je fais un géné BF, il me faut savoir comment créer un wav 8-)
Roland:
Le: "down" est obligatoire pour afficher en mode graphique (abaisse le crayon)
Le: "trapclose [QUIT]" présent dans tout les programmes gère la croix de fermeture de la fenêtre.
Oui, mais les deux dans la même commande, je n'ai toujours pas capté la finalité
Pour le "print sample, y+offset" ça se comporte comme dans un print using, J'ai testé en mettant le nomainwin en commentaire : la virgule se comporte comme un tab, alors que le point-virgule empêche simplement d'aller à la ligne pour afficher la donnée d'après. (au fait, avec la mainwin, c'est long, long, long, une demi-seconde de données audio...).
Les fichiers audio sont pour moi une vieille connaissance : j'ai voulu un jour (avec Qbasic ou JustBasic ?) extraire les données de l’en-tête (la trentaine de ligne qui commence dans le programme par
ChunkID$="RIFF"
ChunkSize$=makeAsciiNumber$(36+255,4)
Format$="WAVE"
SubChunk1ID$="fmt "
....
mais je n'ai jamais cherché à lire les données audio proprement dites, ce qui fait que je ne peux pas affirmer que sa méthode est bonne ou pas.
Elle me semble surprenante. A confirmer, mais dans le programme, du moins pour ce que j'ai analysé, il y a un octet par échantillon, donc 256 valeurs. S'il veut 75% du niveau total disponible, ça représente 3/4 de 256, soit 186 valeurs. Si on place le point milieu à la valeur 127, la limite basse de l'échantillon est à 127-186/2=31, et la limite haute est à 127+186/2=223, donc j'encadre son y comme ça : 31 > y > 223, là où il l'encadre 79 > y > 174.
Il obtient bien sa sinusoïde à la bonne fréquence, mais avec un niveau qui n'est pas le 0.75 qu'il a défini pour son paramètre amp
Désolé pour la technique.



Je pense simplement qu'il a programmé ça à la va-vite, pour voir si c'était faisable, et qu'il ne s'est pas préoccupé d'aller plus loin, parce que ça semblait fonctionner.
Je vais quand même explorer plus loin, quand j'aurais deux minutes... si je fais un géné BF, il me faut savoir comment créer un wav 8-)
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Il faut le "Close#..."
Citation:
On peut enchainer les instructions en les séparant par des point virgules et en enfermant le tout dans les guillements
ça fait gagner des lignes
Pour exploiter le truc, il faudrait l'épurer jusqu'à obtenir la sinusoïde pure; parce si j'ai compris, il en mélange plusieurs, ça ne facilite pas la compréhension.
Citation:
J'avais récupéré des samples d'une seconde en wav pour faire "compose" ils faisaient 6,5 Mo la pièce!
cassiope les avaient réduit à 250 Ko sans détérioration; en fait ils étaient plein de vide.
Le wav, ça pèse; c'est pour ça qu'on a inventé le midi.
Citation:
N'oublie pas d'y mettre la procédure magique de stop; ou y a du redémarrage de pc à prévoir. Lol!
Le mieux serait d'en faire un petit bout et de le lire en boucle
Mais en fait ce code est une arnaque; il ne crée pas du son, il crée un fichier son. Nuannnnce.
#g:end" n'est pas suffisant
Il faut le "Close#..."
Citation:
les deux dans la même commande
On peut enchainer les instructions en les séparant par des point virgules et en enfermant le tout dans les guillements
ça fait gagner des lignes
Pour exploiter le truc, il faudrait l'épurer jusqu'à obtenir la sinusoïde pure; parce si j'ai compris, il en mélange plusieurs, ça ne facilite pas la compréhension.
Citation:
Une demi seconde d'audio c'est long
J'avais récupéré des samples d'une seconde en wav pour faire "compose" ils faisaient 6,5 Mo la pièce!
cassiope les avaient réduit à 250 Ko sans détérioration; en fait ils étaient plein de vide.
Le wav, ça pèse; c'est pour ça qu'on a inventé le midi.
Citation:
créer un wav 8
N'oublie pas d'y mettre la procédure magique de stop; ou y a du redémarrage de pc à prévoir. Lol!
Le mieux serait d'en faire un petit bout et de le lire en boucle
Mais en fait ce code est une arnaque; il ne crée pas du son, il crée un fichier son. Nuannnnce.
____________________
Roro
Roro
C'est même une machination, y'a qu'à voir les cartes graphiques et le cinéma : que du décor, rien derrière. Voleurs !
MIDI ne transporte pas d'audio, mais juste des instructions pour jouer de l'audio, le rendu sonore peut être différent d'une machine à une autre, en fonction des banques d'instruments dont elle dispose. Là je parle "vite", parce que je n'en sais pas plus...
Je crois bien qu'on a été un peu endormi : bévues et boulettes
Pour ma part, si j'avais fait le programme, j'aurais fait la somme des quatre générateurs pour obtenir la forme d'onde, et c'est seulement avec la forme finale que j'aurais créé le wav échantillon par échantillon. Je ne vois pas où l'auteur veut en venir avec sa manière de combiner les fréquences au fur et à mesure. Je n'ai pas encore assez étudié son listing, Il a sûrement une bonne raison d'avoir procédé comme il l'a fait.
Je termine l'étude et je tiens au courant ici (on a bien dérivé du sujet initial, mais le thème de la dérive touche à sa fin), Si je me lance dans "mon" générateur BF il fera l'objet d'une conversation dédiée.
(et déjà 18h00, purée !)
Edité par Christophe Le 17/11/2015 à 18h01

MIDI ne transporte pas d'audio, mais juste des instructions pour jouer de l'audio, le rendu sonore peut être différent d'une machine à une autre, en fonction des banques d'instruments dont elle dispose. Là je parle "vite", parce que je n'en sais pas plus...
Je crois bien qu'on a été un peu endormi : bévues et boulettes
- Dans le listing j'avais écrit qu'un échantillon sonore était codé sur 256 octets, alors que cet échantillon est seulement UN octet, qui peut prendre 256 valeurs. Sorry, c'est rectifié
- Je viens enfin de comprendre que #g "down ; trapclose [QUIT]", avec le point-virgule comme séparateur, se comportait comme deux commandes distinctes # "down", et #"trapclose [QUIT] et complètement indépendantes. J'aurais mis le temps, merci Roland d'avoir insisté.
- si si, il y a bien le "close#" dans le code fourni, tu as surement fait une manip qui l'a fait sauter. Par contre la fenêtre ne sert à rien : il n'y a aucun affichage graphique durant ce bout de programme. En fait il y en a, mais en commentaire, et je ne l'ai pas testé
Pour ma part, si j'avais fait le programme, j'aurais fait la somme des quatre générateurs pour obtenir la forme d'onde, et c'est seulement avec la forme finale que j'aurais créé le wav échantillon par échantillon. Je ne vois pas où l'auteur veut en venir avec sa manière de combiner les fréquences au fur et à mesure. Je n'ai pas encore assez étudié son listing, Il a sûrement une bonne raison d'avoir procédé comme il l'a fait.
Je termine l'étude et je tiens au courant ici (on a bien dérivé du sujet initial, mais le thème de la dérive touche à sa fin), Si je me lance dans "mon" générateur BF il fera l'objet d'une conversation dédiée.
(et déjà 18h00, purée !)
Edité par Christophe Le 17/11/2015 à 18h01
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
D'après moi, et à entendre le son obtenu, il a dû mettre une incrémentation au déphasage.
C'est sûr que ce code est expérimental
Je continue de rechercher l'auteur sur le forum anglophone, qui est encore plus bordélique que celui-ci ; et qui de plus est en anglais.
T'inquiète pour la dérive, on peut déplacer les messages, mais comme je trouve que la dérive, c'est plutôt sympa, je laisse comme ça.
C'est sûr que ce code est expérimental
Je continue de rechercher l'auteur sur le forum anglophone, qui est encore plus bordélique que celui-ci ; et qui de plus est en anglais.
T'inquiète pour la dérive, on peut déplacer les messages, mais comme je trouve que la dérive, c'est plutôt sympa, je laisse comme ça.
____________________
Roro
Roro
Oui, code expérimental.
Autrement, on avance :
1. playwave ne mache pas avec wine. Possible que ce soit simplement un paramétrage dans Wine sur le pilote audio à utiliser
2. trois secondes et demi pendant lesquelles on entend (en millisecondes) :
0 à 500 : Do
500 à 1000 : Do Mi
1000 à 1625 : Do Mi Sol
1625 à 2250 : Do Mi Sol La
2250 à 3500 : Do Mi Sol
Bonne nuit
Autrement, on avance :
1. playwave ne mache pas avec wine. Possible que ce soit simplement un paramétrage dans Wine sur le pilote audio à utiliser
2. trois secondes et demi pendant lesquelles on entend (en millisecondes) :
0 à 500 : Do
500 à 1000 : Do Mi
1000 à 1625 : Do Mi Sol
1625 à 2250 : Do Mi Sol La
2250 à 3500 : Do Mi Sol
Bonne nuit
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Ah ouais, tu a l'air de drôlement maîtriser l'audio pour avoir différencié les rondelles.
J'envisage un générateur de musique avec les règles de composition, mais c'est un sacré morceau (pour quelqu'un qui balbutie le solfège comme moi)
Je pompe les idées sur deux softs russes que j'ai.
Mais cette fois, je ne tape pas une ligne de code tant que tout n'est pas clair
Enfin...Je vais essayer de me retenir.
J'envisage un générateur de musique avec les règles de composition, mais c'est un sacré morceau (pour quelqu'un qui balbutie le solfège comme moi)
Je pompe les idées sur deux softs russes que j'ai.
Mais cette fois, je ne tape pas une ligne de code tant que tout n'est pas clair
Enfin...Je vais essayer de me retenir.
____________________
Roro
Roro
Tu dormais pas encore, à ç'teurlà, toi ?
J'aurais été très heureux de trouver les notes "à l'oreille", mais il s'agit plus prosaïquement du résultat de l'étude du code^^. Il reste encore à analyser la construction de l'en-tête et sa mise en fichier, suivie des données audio. Je l'ai trouvé plus simple à étudier que le code d'un certain Cassiopee au sujet de combo-sprite-box volantes.
Autrement j'ai des notions sur beaucoup de choses, dont la musique et l'audio, mais ça reste des notions.
Pour un projet de programmation, on dit qu'en effet c'est 80% de réflexion et 20% de codage. Un schéma papier abouti de ce qu'on veut faire, et une bonne culture dans le domaine qu'on veut reproduire, sont un plus. Oui, je sais, ça me va bien d'écrire ça, moi qui ai si longtemps foncé tête baissée sur le clavier^^ Mais c'est peut-être justement pour ça...
J'aurais été très heureux de trouver les notes "à l'oreille", mais il s'agit plus prosaïquement du résultat de l'étude du code^^. Il reste encore à analyser la construction de l'en-tête et sa mise en fichier, suivie des données audio. Je l'ai trouvé plus simple à étudier que le code d'un certain Cassiopee au sujet de combo-sprite-box volantes.
Autrement j'ai des notions sur beaucoup de choses, dont la musique et l'audio, mais ça reste des notions.
Pour un projet de programmation, on dit qu'en effet c'est 80% de réflexion et 20% de codage. Un schéma papier abouti de ce qu'on veut faire, et une bonne culture dans le domaine qu'on veut reproduire, sont un plus. Oui, je sais, ça me va bien d'écrire ça, moi qui ai si longtemps foncé tête baissée sur le clavier^^ Mais c'est peut-être justement pour ça...
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Je t'avais prévenu, ce gars là est un sorcier du JB; qui soit dit en passant nous a abandonnés pour de bon (pas venu depuis le: 25/09/15). Grosse perte. Snif! Espérons qu'il ne lui est rien arrivé de fâcheux. Amen!
La génération audio par le code est intéressante car elle ouvre la voie à la compo mathématique.
Tiens, en parlant de ça, comme tu t'intéresse à l'audio, je mets dans mon casier un petit soft de ouf que tu peux garder pour quand tu sera à la retraite. Y a rien à installer. Pour avoir une idée de l'ampleur du phénomène; tu lance, tu ferme toutes les petites fenêtres, et là, tu vois qu'il y a vraiment des fous.
C'est là --->: Autogam.zip
Prévois du café, y a de la nuit blanche en perspective.
plus simple à étudier que le code d'un certain Cassiopee
Je t'avais prévenu, ce gars là est un sorcier du JB; qui soit dit en passant nous a abandonnés pour de bon (pas venu depuis le: 25/09/15). Grosse perte. Snif! Espérons qu'il ne lui est rien arrivé de fâcheux. Amen!
La génération audio par le code est intéressante car elle ouvre la voie à la compo mathématique.
Tiens, en parlant de ça, comme tu t'intéresse à l'audio, je mets dans mon casier un petit soft de ouf que tu peux garder pour quand tu sera à la retraite. Y a rien à installer. Pour avoir une idée de l'ampleur du phénomène; tu lance, tu ferme toutes les petites fenêtres, et là, tu vois qu'il y a vraiment des fous.
C'est là --->: Autogam.zip
Prévois du café, y a de la nuit blanche en perspective.

____________________
Roro
Roro
Pas de bol, il demande VB60.dll, et le prog est sous la forme exe. (Ou VBrun60, cité de mémoire, je n'ai plus le nom exact en tête). Je l'ai téléchargé et mis dans le system32 de mon wine windows xp, mais pas de changement. Je verrais plus tard.
Par contre j'ai lu la présentation, cela semble en effet plutôt sophistiqué. Je ne pense pas aller jusque là avec mon "générateur BF". Mais bon, si ça marche, y'aura peut-être de quoi se faire plaisir...
Pas de travail d'analyse cet après-midi.
Le bonjour à Cassiopee, s'il nous lit. Je ne le connais pas, mais combien sont-ils dans la vraie vie à se connaître sur un forum ? Il est parti fâché, ou il ne vient simplement plus ?
A+
Par contre j'ai lu la présentation, cela semble en effet plutôt sophistiqué. Je ne pense pas aller jusque là avec mon "générateur BF". Mais bon, si ça marche, y'aura peut-être de quoi se faire plaisir...
Pas de travail d'analyse cet après-midi.
Le bonjour à Cassiopee, s'il nous lit. Je ne le connais pas, mais combien sont-ils dans la vraie vie à se connaître sur un forum ? Il est parti fâché, ou il ne vient simplement plus ?
A+
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie