Musique - générateur de mélodies chromatiques aléatoires

Description

GENERATOR est un petit programme qui crée des mélodies chromatiques aléatoires - une sorte de compositeur électronique !?!

Source / Exemple :


Option Explicit
Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long

Private Sub Form_Load()
End Sub

'ce qui se passe lorsque vous cliquez sur le bouton ------------------------------
Private Sub jouer_Click()

'initialisation du champ texte -------------------------------------------------------
Text1.Text = ""

'déclaration des différentes variables ----------------------------------------------
Dim a As Single
Dim i As Single
Dim j As Single
Dim n As Single
Dim entier As Single
Dim note(0 To 36) As Single
Dim jeu(0 To 24) As Single
Dim jeu_mel(0 To 24) As String
Dim tempo(0 To 2) As Single
Dim t As Single
Dim tint As Single
Dim rythm(0 To 24) As Single
Dim txt As String
Dim mel(0 To 36) As String

'125=double-croche 250=croche 500=noire ----------------------------------------
tempo(0) = 125
tempo(1) = 250
tempo(2) = 500

'notes de la gamme chromatique en partant du la 220 hz -----------------------
note(0) = 220
note(1) = 233
note(2) = 247
note(3) = 262
note(4) = 277
note(5) = 294
note(6) = 311
note(7) = 330
note(8) = 349
note(9) = 370
note(10) = 392
note(11) = 415
note(12) = 440
note(13) = 466
note(14) = 494
note(15) = 523
note(16) = 554
note(17) = 587
note(18) = 622
note(19) = 659
note(20) = 698
note(21) = 740
note(22) = 784
note(23) = 830
note(24) = 880
note(25) = 932
note(26) = 988
note(27) = 1047
note(28) = 1109
note(29) = 1175
note(30) = 1245
note(31) = 1319
note(32) = 1397
note(33) = 1480
note(34) = 1568
note(35) = 1661
note(36) = 1760

'notes de musiques -----------------------------------------------------------------
mel(0) = "la1"
mel(1) = "la#1"
mel(2) = "si1"
mel(3) = "do1"
mel(4) = "do#1"
mel(5) = "ré1"
mel(6) = "ré#1"
mel(7) = "mi1"
mel(8) = "fa1"
mel(9) = "fa#1"
mel(10) = "sol1"
mel(11) = "sol#1"
mel(12) = "la2"
mel(13) = "la#2"
mel(14) = "si2"
mel(15) = "do2"
mel(16) = "do#2"
mel(17) = "ré2"
mel(18) = "ré#2"
mel(19) = "mi2"
mel(20) = "fa2"
mel(21) = "fa#2"
mel(22) = "sol2"
mel(23) = "sol#2"
mel(24) = "la3"
mel(25) = "la#3"
mel(26) = "si3"
mel(27) = "do3"
mel(28) = "do#3"
mel(29) = "ré3"
mel(30) = "ré#3"
mel(31) = "mi3"
mel(32) = "fa3"
mel(33) = "fa#3"
mel(34) = "sol3"
mel(35) = "sol#3"
mel(36) = "la4"

'fabrication du rythme ---------------------------------------------------------------
For i = 0 To 24
t = Int(Rnd * 10) / 3
tint = Int(((t / 3) - Int(t / 3)) * 3.00001)
rythm(i) = tempo(tint)
Next i

'fabrication de la mélodie -----------------------------------------------------------
For i = 0 To 24
n = Int(Rnd * 100)
entier = Int(((n / 36) - Int(n / 36)) * 36.00001)
jeu(i) = note(entier)
jeu_mel(i) = mel(entier)
Next i

'affichage de la mélodie ------------------------------------------------------------
For i = 0 To 24
txt = jeu_mel(i)
Text1.Text = Text1.Text + " " + txt
Next i

'exécution de la mélodie ------------------------------------------------------------
For i = 0 To 24
Beep jeu(i), rythm(i)
Next i

End Sub

Conclusion :


- MERCI BEAUCOUP de m'aider à améliorer GENERATOR !!!

1) Je me suis rendu compte que la fonction Rnd du VB n'est pas parfaitement aléatoire ... que faire pour qu'elle le soit vraiment ?

2) c'est "chiant" les notes s'affichent qu'une fois la mélodie exécutée !?! Comment faire dans le CODE pour que le champ text1.text s'affiche avant que la mélodie ne s'exécute ?

3) Pour jouer un son, à la place de la fonction Beep X,Y ( monophonique ) qui dépend de la kernel32.dll - j'aimerais commander un séquenceur MIDI ( par exemple le MPU-401 ) pour faire de la polyphonie - comment faire ? quelle est la syntaxe en Visual Basic ? quelle fonction utiliser ?

4) J'aimerais savoir s'il existe un site sur lequel je peux trouver TOUT le vocabulaire, TOUTES les instructions du Visual Basic avec leur SYNTAXE leur SIGNIFICATION et éventuellement un exemple d'application ?

5) J'aimerais savoir comment fabriquer une DLL

Je sais ça fait beaucoup de questions ... pardonnez-moi, j'adore apprendre ... j'espère que ce n'est pas un gros défaut !?!

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.