Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

jeanpierre

Nous a quitté
Repose en paix
Re : [VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

Re,

Pourtant, c'est de la musique (enfin, si l'on veut (du bruit peut-être)) très simpliste. Il n'y a rien que du 1, 2.... Elvis, je ne connais pas. Pour le reste, avec ou sans dièze ou bémol, on peut le faire sous excel (VBA), comme on a pu le faire sous d'autres langages avant?

La question est : Où est le blème ?
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

Re


Si cela avait été un problème, jeanpierre, j'aurai posé la question dans le forum Excel.

Comme cela n'est juste qu'un divertissement pour moi, né au hasard d'un surf sur le net (qui a motivé mon premier message dans ce salon)

J'ai continué sur ma lancée.

Je ne sais pas lire une partition musicale.

J'ai le code VBA* pour jouer dans Excel des "notes MIDI"

J'ai une partition classique au format pdf

Je voudrais convertir les 30/45 secondes de cette partition
en notation MIDI pour ensuite inclure cela dans le code VBA.

N'étant pas en mesure de le faire , seul, je sollicite l'aide de ceux qui ont la compétence pour le faire et qui lisent/suivent ce fil.

Merci donc à ceux qui pourront m'aider.

Bonne soirée à tous.

* cf. PlayMidi
(code inspiré comme le dit l'auteur d'un site français)
 

jeanpierre

Nous a quitté
Repose en paix
Re : [VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

Re,

Pour la partie musicale : Les gammes se divisent en gammes diatoniques et en gammes chromatiques.

1) La gamme majeure, qui se compose de cinq tons de de deux demi-tons.
2) La gamme mineure qui se compose de trois tons, d'un ton et demi et de trois demi-tons

C'est simple, non ?

Sans inspiration ni lien extérieur
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

Re


Merci pour ces informations, jeanpierre.

Voici un extrait de la partition


Ma belle-fille (16 ans) qui est là pour les vacances

me dit que les notes affichées sur cet extrait sont:
(RE ou DO) SOL FA SOL LA MI LA SOL FA MI FA SOL (RE ou DO) SOL FA SOL

(C'est ce qu'elle a appris au collège me dit-elle)

A-t-elle eu un bon prof de musique ?

Je vais essayer ces notes dans le code VBA

En attendant que les musiciens du forum (dont jeanpierre semble faire partie) puissent m'en dire plus.

Bon week-end à tous.
 

Pièces jointes

  • test1.jpg
    3.1 KB · Affichages: 347
  • test1.jpg
    3.1 KB · Affichages: 339

jeanpierre

Nous a quitté
Repose en paix
Re : [VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

Re,

Un exemple plus complexe de du 1 2.... et sans doute plus difficile à transposer en VBA
 

Pièces jointes

  • Paga_V_Campanella.zip
    62.9 KB · Affichages: 126
Dernière édition:

jeanpierre

Nous a quitté
Repose en paix
Re : [VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

Re,

Toujours ch.... sur certains trucs...

Tes deux mesures.... Ré, sol, fa sol et un Ré obligé... la, mi (do dièze sur les deux) et laa (1 - 2)... Je ne suis plus musicien mais un grand virtuose.... Je souhaite comprendre.

Mais là....

A te lire.

Jean-Pierre
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

Re

Je sais pas comment mieux me faire comprendre.
Je vais réessayer

1) site de l'archive d'origine au format *.rar : sur ce site
Je poste le même fichier au format zip : Ce lien n'existe plus

Ce fichier contient la partition au format pdf (en "notation classique")

Maintenant pour les personnes sachant le solfège et les équivalences suivantes :
(A -LA, B -SI, C - DO, D -RE, E -MI, F -FA, G -SOL)
et qui connaissent les normes MIDI
Voir ici: (1) Summary of MIDI Note Numbers

Il doit être facile en lisant la partition de "convertir" les notes "classiques"
en lettres.
(Juste quelques mesures, ou dans mon langage, l'équivalent de 30 à 45 secondes en partant du début de la partition)

Pour moi, cela n'est pas intuitif. (Je ne connais pas le solfège et je ne sais pas lire une partition)

Mais une fois que j'aurais ces quelques lettres, à l'aide du tableau de correspondance (1), j'obtiendrai une suite de chiffres, qui seront exploitables dans le code VBA PlayMidi (cité plus bas dans le fil)

Quant à la finalité, comme dit précédemment, tout ceci, n'est que pur divertissement (en tout cas pour moi).

J'espère jeanpierre que ce dernier message t'aura aidé à comprendre.

Merci en tout cas de t'être arrêté ici.

Bonne soirée à tous et bon week-end.
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

Re


Devant mon inculture musicale, j'ai orienté mes recherches vers un traitement "informatique" de la chose.

Bilan des opérations:

1) un fichier midi : Ce lien n'existe plus (version karaoké)

2) cet applicatif java: MidiSwing
MidiSwing

3) A ce stade, j'obtiens (enfin je crois) les notes ("numéro MIDI")
et ce qui semble être la "durée des notes".

4) J'ai donc incorporé ces chiffres dans VBA
mais le résultat n'est guère probant (lol) on reconnait absolument pas ce tube du King.

PS: je sais (grâce à la FAQ (pages WIKI de MichelXLD) que je pourrais jouer directement le fichier MIDI dans Excel, mais justement je voudrais faire
(comme le fait si bien Sitting Hoax sur mpfe) mettre les notes en dur dans le code VBA.)

Je poursuis mes investigations (tout aide ou suggestions sera la bienvenue)

Bon week-end à tous.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : [VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

Re


EDITION: un autre outil plus simple ( sous Dos) pour rendre plus compréhensible le contenu d'un fichier midi et obtenir les notes en notation abc
abc.zip


_________________________
Voici un exemple plus parlant

A mettre dans un module standard
Puis allumez les enceintes de votre PC
Ensuite lancer danse_du_sabre
(sauf si vous êtes mélomane )
Source:
MPFE
Auteur: Sitting Hoax
Code:
Private Declare Function midiOutClose Lib "winmm.dll" _
                (ByVal hMidiOut As Long) As Long
'-------------------------------
Private Declare Function midiOutOpen Lib "winmm.dll" _
                (lphMidiOut As Long, _
                ByVal uDeviceID As Long, _
                ByVal dwCallback As Long, _
                ByVal dwInstance As Long, _
                ByVal dwFlags As Long) As Long
'-------------------------------
Private Declare Function midiOutShortMsg Lib "winmm.dll" _
                (ByVal hMidiOut As Long, _
                ByVal dwMsg As Long) As Long
Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Dim hMidiOut As Long
Public notes
Public instrument
Public temps
Sub jouer_la_note()
midiOutClose hMidiOut
    midiOutOpen hMidiOut, 0, 0, 0, 0
    midiOutShortMsg hMidiOut, RGB(192, instrument - 1, 127)
    lanote = 12 + CInt(notes)
    note = RGB(144, lanote, 127)
    midiOutShortMsg hMidiOut, note
Sleep (temps)
fin:
End Sub

Sub danse_du_sabre()
Numéro = 0
notes_a_jouer = "6262626262626262626262626262" & _
"616262626162626261626262616262626161" & _
"606059595858006158006158"
 For Notess = 0 To Len(notes_a_jouer) Step 2
 noteG = Mid(notes_a_jouer, (Numéro * 2) + 1, 2)
      Application.EnableCancelKey = xlErrorHandler
On Error GoTo fin
TEMP = "150150150150150150150150150150150" & _
"150150150150150150150150150150150150150150" & _
"150150150150150150150150150200150" & _
"150150100200300100200300"
    temps = Mid(TEMP, (Numéro * 3) + 1, 3)
    lanote = 12 + CInt(noteG)
    note = RGB(144, lanote, 127)
    notes = lanote
   instrument = 87 'Int(Rnd * 128)
   jouer_la_note
    Numéro = Numéro + 1
Next
fin:
midiOutClose hMidiOut
End Sub
Pour ce qui concerne Elvis, je pense avoir les
notes_a_jouer mais pas TEMP
 
Dernière édition:

ya_v_ka

XLDnaute Impliqué
Re : [VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

Salut tout le monde

(code inspiré comme le dit l'auteur d'un site français)

Je me demande ce que sous-entend cette phrase ?

L'auteur d'un site en français a trouvé ce code inspiré ?

Ce code est inspiré, tel que le dit l'auteur d'un site français ?

Ce code est inspiré d'un site français, comme le dit l'auteur ?

Belle demoiselle d'amour mon coeur...

Ya'v
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

Bonsoir ya_v_ka

La version originale
I found some code that uses API functions to play MIDI music at a Ce lien n'existe plus. I adapted the code so it's easy to use. Copy the code below and paste it into a VBA module.
Comme cela chacun traduira comme il le voudra.

Tu n'es pas musicien par hasard?

Bon week-end à tous.
 
Dernière édition:

mutzik

XLDnaute Barbatruc
Re : [VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

Salut le foule,

pas de prob pour te donner les temp, mais le code de Sitting Hoax ne fonctionne pas chez moi, faut-il activer kkchose de spécial

les notes : Ré Sol Fa# Sol La Mi La Sol Fa# Mi Fa# Sol (cette ligne 2 fois)
ensuite : Si Si Si Si Si Si Si Si La Sol La Si
Si Si Do Si La Mi La Sol Fa# Mi Fa# Sol

les temp
en prenant comme base de temps 1 = 0,5 sec (2=1sec ...)
1 1 1 1 1 1 2 1 1 1 1 4 (2x)
1 1 1 1 1 1 2 1 1 1 1 4
1 1 1 1 1 1 2 1 1 1 1 4
on peut affiner par la suite, suivant les tempéraments d'éxecution

voili, à plus
 

mutzik

XLDnaute Barbatruc
Re : [VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

Re, sinon, on peut aller voir sur le site

Notes
qui explique assez bien le début de la zik
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

Bonjour Mutsik


Cela peut venir de ta configuration

(Carte son et périphérique MIDI)


midiOutOpen hMidiOut, 0, 0, 0, 0


Sur certains forums, certains parlent de changer les chiffres

Je vais chercher plus d'infos et je reviens te dire

Autrement, voici les notes que j'ai récupéré (avec le logiciel abc)

mais les notes sont en notation abc

Et je ne vois comment faire pour retrouver leur "duration"

ci-joint le fichier txt contenant

(quelques notes)


EDITION: Mutzik : les notes que tu indiques sont celles de Love Me tender ?

Je vais essayer de les convertir en "numéros MIDI"
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : [VBA] La macro ultime (POUR CEUX QUI SAVENT LA VERITE) - Ne pas DIFFUSEZ -

Re

Mutzik:
Voila ce que j'ai trouvé comme infos

NB : incrémenter le 1er parametre 0 sert dans le cas ou
plusieurs Devices Midi sont présents sur la machine.
La macro ci-dessous joue les notes.

Code:
'auteur: Modeste
'source
'[URL=http://groups.google.fr/group/microsoft.public.fr.excel/msg/c82907b9e832a6d6][COLOR=Blue][B]MPFE[/B][/COLOR][/URL]
Private Declare Function midiOutClose Lib "winmm.dll" _ 
                 (ByVal hMidiOut As Long) As Long 
 '------------------------------- 
 Private Declare Function midiOutOpen Lib "winmm.dll" _ 
                 (lphMidiOut As Long, _ 
                 ByVal uDeviceID As Long, _ 
                 ByVal dwCallback As Long, _ 
                 ByVal dwInstance As Long, _ 
                 ByVal dwFlags As Long) As Long 
 '------------------------------- 
 Private Declare Function midiOutShortMsg Lib "winmm.dll" _ 
                 (ByVal hMidiOut As Long, _ 
                 ByVal dwMsg As Long) As Long 
 '--------------------------------------------------- 
 Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As 
 Long) 
 Dim hMidiOut As Long 
 Public note As long 
 '------------------------------- 
 Sub notesmidi() 
     For i = 32 To 96 
         note = RGB(144, i, 127) 
   '[B]si aucun son emis : incrémenter le 1er 0 ci-dessous [/B]
         midiOutOpen hMidiOut, 0, 0, 0, 0 
 
        midiOutShortMsg hMidiOut, note 
         Sleep (200) ' durée entre notes 
     Next 
     midiOutClose hMidiOut 
 End Sub
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…