Le midi avec Purebasic

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

je suis d'accord avec Frenchy !!

d'abord puisque tu profite du savoir du forum ce serai normal de metre le source ici meme !....
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Frenchy Pilou a écrit :heu : peux-tu mettre un petit texte explicatif avant qu'on ne charge un programme en confiance les yeux fermés pour savoir de quoi il retourne :)
Question tres bete si j'etais un vilain mechant car je te dirais par exemple :
"Haaaa, mon lien ?? ha bin, c'est simplement un programme qui explose tout et qui crée aleatoirement des musiques geniales"
alors que c'est un virus... :wink:
Dobro a écrit :je suis d'accord avec Frenchy !!

d'abord puisque tu profite du savoir du forum ce serai normal de metre le source ici meme !....
Bin, toi aussi (comme beaucoup), tu as des exe sans le code : regarde par exemple ta signature :wink:
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Mais non, c'est pas pour les virus ou autres, c'est juste pour avoir une idée, et savoir si cela peut intéresser :
je ne vais pas charger un programme qui fait des mots-croisés si les mots-croisés me filent des boutons :lol:

Je laisse Dobro dire ce qu'il y a dans sa signature :D
C'est sûrement ri - Golo :lol:
Est beau ce qui plaît sans concept :)
Speedy Galerie
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

........
Dernière modification par Backup le lun. 25/juil./2011 12:31, modifié 1 fois.
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Code : Tout sélectionner

Declare MIDIOpen() 
Declare SendMIDIMessage(nStatus.l,nCanal.l,nData1.l,nData2.l) 
Declare PlayNoteMIDI(Canal.b,Note.b,VelociteDown.b,VelociteUp.b) 
Declare ChargeInstrument(Canal.b,Instrument.b) 

Global m_hMidiOut,m_MIDIOpen.b 
Enumeration 35 
   #Kick_Drum_2 
   #Kick_Drum_1 
   #Side_Stick 
   #Snare_Drum_1 
   #Hand_clap 
   #Snare_Drum_2 
   #Low_Tom_2 
   #Closed_Hi_Hat 
   #Low_Tom_1 
   #Pedal_Hi_Hat 
   #Mid_Tom_2 
   #Open_Hi_Hat 
   #Mid_Tom_1 
   #High_Tom_2 
   #Crash_Cymbal_1 
   #High_Tom_1 
   #Ride_Cymbal_1 
   #Chinese_Cymbal 
   #Ride_Bell 
   #Tambourine 
   #Splash_Cymbal 
   #Cow_Bell 
   #Crash_Cymbal_2 
   #Vibra_Slap 
   #Ride_Cymbal_2 
   #High_Bongo 
   #Low_Bongo 
   #Mute_High_Conga 
   #Open_High_Conga 
   #Low_Conga 
   #High_Timbale 
   #Low_Timbale 
   #High_Agogo 
   #Low_Agogo 
   #Cabasa 
   #Maracas 
   #Short_Hi_Whistle 
   #Low_Hi_Whistle 
   #Short_Guiro 
   #Long_Guiro 
   #Claves 
   #High_Wood_Block 
   #Low_Wood_Block 
   #Mute_Cuica 
   #Open_Cuica 
   #Mute_Triangle 
   #Open_Triangle 
EndEnumeration 


OpenConsole()
PrintN("Boite a Rythme Midi (Base sur ce auquel j'ai tjr cru : 2^x)")
PrintN("SPH(2006)")

MIDIOpen()
ChargeInstrument(9,0) 

PrintN("")
ry=43+Random(12)*2
PrintN("Rythme : "+Str(ry))

Dim canal.l(47,4)
; (instrument,0) = pause avant de voir si on peux le jouer
; (instrument,1) = temps a attendre pour le jouer (voir (instrument,2))
; (instrument,2) = incrementation puis comparatif avec (instrument,1)
; 3 = frequence
; 4 = volume
cmb=0
For i=1 To 47
Read lourd
canal(i,4)=100+Random(27)
If i<=4
canal(i,4)-40
EndIf
canal(i,0)=(Random(cmb/1.7+3))*20
If Random(16)>10
If Random(lourd)=3
lourd-Random(lourd/3)
EndIf
canal(i,1)=Pow(2,lourd)
canal(i,3)=127+Random(60)+Random(60)
EndIf
If canal(i,1)>0
cmb+1
EndIf
Next

For i=1 To 180
la=1+Random(46)
canal(la,1)*2
If canal(la,1)>1000000
u=3+Random(7)
While u>0
canal(la,1)/2
u-1
Wend
EndIf
Next

PrintN("Nombre d'instruments : "+Str(cmb))
PrintN("")
PrintN("ZzzZZzzz")
PrintN("")
PrintN("")

cmb2=0

Repeat
For zik = 1 To 47

If canal(zik,1)<>0 ; alors on joue de cette instrument
If canal(zik,0)>0 ; alors ce n'est pas encore le moment pour demarrer l'instrument
canal(zik,0)-1
Else
canal(zik,2)+1
If canal(zik,2)=canal(zik,1)
PlayNoteMIDI(9,34+zik,canal(zik,3),canal(zik,4))
canal(zik,2)=0
If canal(zik,0)=0
cmb2+1
Print(Str(zik)+"..")
canal(zik,0)=-1
If cmb=cmb2
PrintN("Ok")
EndIf
EndIf
EndIf
EndIf
EndIf

Next
Delay(ry)
ForEver

; ********************** Procedures **************************************** 
Procedure SendMIDIMessage(nStatus.l,nCanal.l,nData1.l,nData2.l) 
  dwFlags.l = nStatus | nCanal | (nData1 << 8 ) | (nData2 << 16) 
  temp.l = midiOutShortMsg_ (m_hMidiOut,dwFlags) ; 
   If temp<>0 
     MessageRequester ( "Problème" , "Erreur dans l'envoi du message MIDI" ,0) 
   EndIf 
EndProcedure 

Procedure MIDIOpen() 
   If m_MIDIOpen = 0 
     If midiOutOpen_ (@m_hMidiOut,MIDIMAPPER,0,0,0) <> 0 
       MessageRequester ( "Problème" , "Impossible d'ouvrir le périphérique MIDI" ,0) 
     Else 
      SendMIDIMessage($C0,0,0,0) 
      m_MIDIOpen = 1 
     EndIf 
   EndIf 
EndProcedure 

Procedure PlayNoteMIDI(Canal.b,Note.b,VelociteDown.b,VelociteUp.b) 
   If m_MIDIOpen 
    SendMIDIMessage($80 | Canal,0,Note,VelociteDown) 
    SendMIDIMessage($90 | Canal,0,Note,VelociteUp) 
   EndIf 
EndProcedure 
Procedure ChargeInstrument(Canal.b,Instrument.b) 
   If m_MIDIOpen 
    SendMIDIMessage($C0 | Canal,0,Instrument,0) 
   EndIf 
EndProcedure 


DataSection
Data.l 1,1,1,3,2,3,5,2,5,2,5,7,6,6,7,6,5,5,5,2,6,3,7,7,7,2,2,1,4,4,5,5,2,3,2,2,5,7,3,6,2,2,2,5,6,2,6
EndDataSection
Alors, heureux ?!?? :wink:
Dernière modification par SPH le lun. 18/sept./2006 8:13, modifié 2 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

oui ! :D

ce qui m'aurai plus interressé c'etait de connaitre ta demarche intellectuel
pourquoi cette algorythme ?
a t'il une signification particuliere ?
le principe simplifié de cette algorithme ? (l'explication) :D

voila voila ! a part ça c'est pas mal du tout ton petit prg :D
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Dobro a écrit :pourquoi cette algorythme ?
a t'il une signification particuliere ?
le principe simplifié de cette algorithme ? (l'explication) :D
Alors, tout est basé sur 2^x (2,4,8,16,32,64...)
J'etais persuadé que ca marchait pour la musique. Quand tu entend une chanson, tu remarqueras que tous les 4 repetitions de rythmes, les instruments peuvent changer. Pas a 3, ni a 5 : a 4. J'ai toujours remarqué ca. Ca crée une armonie musicale.
Voila pourquoi j'ai ecris :

Code : Tout sélectionner

canal(i,1)=Pow(2,lourd)
Cette instrument, au mid '1' de (i,1), on ne le joueras qu'a 2^n. Le 'n' (valeur "lourd"), c'est pas lourdeur de chaques sons. Je les ai classé et mis en data en fonction de leur longueur a s'executer. Un bref "pouf" sur une baterie aura une lourdeur legere (1) et une cybale raisonnante tres longue aura une lourdeur de 5. Ainsi, les instruments legers interviennent plus souvent que les lourds. Sinon, on serait abrutis !!

Hmmm, je sais que j'ai peut etre mal decris la maniere de coder ca mais ca m'a parut intuitif tellement j'avais remarqué ce "phenomene" il y a longtemps.
vala vala :wink:
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

tu remarqueras que tous les 4 repetitions de rythmes, les instruments peuvent changer
ah mon avis ce que tu dis est plus ou moins vrai pour du 4/4 pas forcément pour du 3/4 par exemple

(pas tres constructifs tes commentaires au fait)
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

bombseb a écrit :
tu remarqueras que tous les 4 repetitions de rythmes, les instruments peuvent changer
ah mon avis ce que tu dis est plus ou moins vrai pour du 4/4 pas forcément pour du 3/4 par exemple

(pas tres constructifs tes commentaires au fait)
du 3/4 oui mais pas du x/3 ou x/5. C ca que je voulais dire.

J'optimiserais par 1000 ma routine et intruduirais la notion de changements de rythme/instruments/notes.
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

x/3 ou x/5
??

je ne sais pas où tu a vu des morceaux écrits en x/3 ou x/5....ca devais être une faute de frappe forcément
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

bombseb a écrit :
x/3 ou x/5
??

je ne sais pas où tu a vu des morceaux écrits en x/3 ou x/5....ca devais être une faute de frappe forcément

c'est vrais que meme "Take five" qui n'est pas conventionel dans la mesure
est en 5/4 :lol:
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

mais non, je disais justement que x/3 ou x/5 etait inconcevable dans une zik. Je disais donc que j'avais repéré un ideal, le x/4 et qu'il fallait s'y maintenir.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

..........
Dernière modification par Backup le lun. 25/juil./2011 12:32, modifié 1 fois.
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

héhé sympas ta boite à rythme :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Merci :D
Répondre