Un aléa particulier et sonore

MANTALO

XLDnaute Junior
Bonjour à tous,

Un ami me demandait si Excel pouvait, comme dans un jeu de hasard, choisir et assembler une suite de x nombres aléatoires?

Ces nombres correspondrait à une matrice de notes (do, do#, re.........si soit 12 notes différentes et à des durées (ronde, blanche, noire et croche soit 4 durées différentes ) de sorte que, ces x notes prises aléatoirement à la suite, seraient jouées par l'ordinateur. Je ne sais pas combien ça fait de combinaisons possibles.

Par exemple, si j'écris en cellule A1 :
" des fleurs sont dans un pré et un oiseau chante une chanson "

Excel compte 15 syllabes, donc Excel a 15 notes à piocher et à jouer à la suite en durée.

Il suffirait de faire F9 pour lancer une nouvelle suite de notes.

merci de votre avis. Ce n'est peut-être pas possible?
 

Dranreb

XLDnaute Barbatruc
Re : Un aléa particulier et sonore

Bonsoir.
Le son ne sera peut être pas très beau, mais vous allez sans doute avoir besoin de ça :
VB:
Public Declare Function Beep  Lib "kernel32.dll" _
   (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
 

MANTALO

XLDnaute Junior
Re : Un aléa particulier et sonore

Bonsoir Dranreb

Ce n'est pas grave si le son n'est pas très beau car il a une carte son externe sur enceinte.

Par contre, est-ce possible qu'excel compte les syllabes et fasse un aléa dans la matrice des notes et durées? on pourrait ajouter la double croche à la place de la ronde.


merci
 

Dranreb

XLDnaute Barbatruc
Re : Un aléa particulier et sonore

VBA le peut. Faites des essais, déjà, d'utilisation de Beep.

Heu… compter les syllabes ? Compter les voyelles à la rigueur.

Essayez peut être aussi, dans une toute autre direction : Application.Speech.Speak "hello". Mais pour trouver et installer une voix avec un accent français, bon courage !
 
Dernière édition:

MANTALO

XLDnaute Junior
Re : Un aléa particulier et sonore

je me suis mal expliqué, je ne souhaite pas du chant.

Il faut compter les syllabes car c'est ce qui correspondra au texte en A1, mais ensuite excel jouera les notes (pas chanté )
ex: "des fleurs sont dans un pré" = 6 syllabes = 6 notes au hasard.

merci
 

CISCO

XLDnaute Barbatruc
Re : Un aléa particulier et sonore

Bonsoir

C'est facile de compter le nombre de syllabes de "des fleurs sont dans un pré", mais c'est un cas particulier trop simple (Il suffit de compter les espaces). C'est moins facile avec "et un oiseau chante une chanson" sauf à utiliser un dictionnaire peut être, ou par rapport aux associations possibles en français de consonnes et de voyelles. Pas évident.

@ plus
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Un aléa particulier et sonore

Tant mieux: 6 notes au hasard ça ne forme pas forcément un chant !
Pour trouver la fréquence à indiquer en 1er paramètre du Beep par API vous pouvez utiliser cette fonction :
VB:
Function FréqDegr(Degr As Long) As Double
FréqDegr = 440 * 2 ^ (Degr / 12)
End Function
Avec Degr: 0 pour le LA 440Hz

Beep FréqDegré(Rnd * 12), 250 devrait donc produire un son durant 1/4 seconde d'une note au hasard compris dans l'octave commençant au LA.
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : Un aléa particulier et sonore

Bonsour®
voir proposition jointe :
Capture.JPG
 

Pièces jointes

  • mantalo.xlsm
    25.7 KB · Affichages: 59
  • Capture.JPG
    Capture.JPG
    73.9 KB · Affichages: 40

MANTALO

XLDnaute Junior
Re : Un aléa particulier et sonore

Bonjour

un grand merci c'est super.

2 questions stp:

comment écrire les notes jouées à partir de B21 (pour les conserver, si elles plaisent)

j'ai apporté 1 modif (en B1 je saisis 6, et la macro joue 6 notes: For i = 1 To [B1] )

en C1 je saisis 90, comment faire pour que le "tempo" soit plus ou moins rapide? ici 90

Ce serait bien que la macro enchaîne les "essais" (avec un blanc entre chaque essai pour ne pas les "mélanger", par exemple 3 secondes) et quand elles plaisent que le programme stoppe en appuyant sur une touche pour conserver ces notes?

Bon dimanche, j'aime ta macro simple mais efficace.
 

Dranreb

XLDnaute Barbatruc
Re : Un aléa particulier et sonore

Bonjour.

Voici un compositeur d'un talent meilleur, mais d'un micro-poil seulement, et quelques autres fonctions de service
VB:
Option Explicit
Declare Function Beep Lib "kernel32.dll" _
   (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
'

Sub Essai()
Dim N As Long, DegDép&, Deg&, Dxx&, Maj&, Dur&
For N = 1 To 700
   Deg = Array(0, 3 + Maj, 7, 12)(Int(4 * Rnd)) + DegDép
   Dur = 125 * 2 ^ Int(Rnd * 3)
   Beep Int(FréqDegr(Deg) + 0.5), Dur
   If Rnd > 0.75 Then
      Maj = 1 - Int(Rnd * 1.5)
      Dxx = Array(0, 3 + Maj, 7, 12)(Int(4 * Rnd))
      DegDép = Deg - Dxx
      If DegDép < -24 Then DegDép = DegDép + 12 Else _
      If DegDép > 24 Then DegDép = DegDép - 12
      End If
   Next N
End Sub
'

Function NoteDeg(ByVal Degr As Long) As String
Dim Résu As String, Octa As Long
DegréNO(Résu, Octa) = Degr
Résu = Left$(Résu & " ", 2)
If Octa > 0 Then Résu = Résu & "+" & Octa & "o" Else If Octa < 0 Then Résu = Résu & Octa & "o"
NoteDeg = Résu
End Function
Function DegNote(ByVal Note As String, Optional ByVal Octa As Long = 0) As Long
DegNote = DegréNO(Note, Octa)
End Function
Function NoteFréq(ByVal Fréq As Double) As String
If Fréq = 0 Then NoteFréq = "" Else NoteFréq = NoteDeg(DegrFréq(Fréq))
End Function
Function FréqNote(ByVal Note As String, Optional ByVal Octa As Long = 0) As Double
FréqNote = FréqDegr(DegréNO(Note, Octa))
End Function
'

Property Get DegréNO(Note As String, Optional Octa As Long = 0) As Long
DegréNO = InStr("A BC D EF G", UCase(Left$(Note, 1))) + (InStr("#b ", Mid$(Note & " ", 2, 1)) + 1) Mod 3 - 2 + 12 * Octa
End Property
Property Let DegréNO(Note As String, Optional Octa As Long, ByVal Degr As Long)
Octa = (Degr + 1200) \ 12 - 100: Degr = Degr - 12 * Octa
Note = Mid$(" A#BC#D#EF#G#", Degr + 1, 2): If Right$(Note, 1) <> "#" Then Note = Right$(Note, 1)
End Property
'

Function FréqDegr(Degr As Long) As Double
FréqDegr = 440 * 2 ^ (Degr / 12) '= 1,0594630943592952645618252949463^Note
End Function
Function DegrFréq(Fréq As Double) As Long
Const k12÷Ln2 = 212857425 / 12295127 '17,312340490667560888319096172023
DegrFréq = Round(Log(Fréq / 440) * k12÷Ln2)
End Function
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Un aléa particulier et sonore

Ben vous exécutez Essai.
Les autre fonctions servent à des conversions de représentations des notes. Le mieux c'est de les essayer dans une feuille de calcul: on peut les invoquer dans des formules en leur passant d'autres cellules comme arguments.
 

MANTALO

XLDnaute Junior
Re : Un aléa particulier et sonore

c'est vrai que la partition est bien jouée ! Merci

Par contre, ce n'est pas modulable comme celle de Modeste Geedee où je peux saisir le nombre de notes et la fréquence

il faudrait 2 ajouts: 1 -la durée (tempo) et 2- surtout l'écriture des notes qui viennent d'être jouées (par ex : do fa mi sol sol si sur une ligne de la feuille) pour la conserver si elle plaît.

Je m'amuse à choisir des fréquences en fonction d'une suite de 4 accords majeurs ....dans excel ! pas beau ça!

mais ce n'est pas au top, j'ai l'impression qu'il ne tient pas compte de mes notes dans chaque accord !!!

je vous joins mon fichier, je m'y amuse ! (la couleur bleu MFC est fausse)
 

Pièces jointes

  • mantalonotes4.xlsm
    20.4 KB · Affichages: 37

Discussions similaires

Statistiques des forums

Discussions
312 306
Messages
2 087 094
Membres
103 467
dernier inscrit
Pandiska