Musique

MicroPython sur le BBC micro:bit est fourni avec un module de musique et de son puissant. Il est très facile de générer des bips avec l’appareil si tu le raccordes à un haut-parleur. Utilise des pinces crocodile pour relier les pins 0 et GND aux entrées positives et négatives du haut-parleur.

../_images/pin0-gnd.png

Note

N’essaye pas de le faire avec un simple buzzer Piezo - ce genre de buzzer est seulement capable de jouer un seul ton.

Jouons de la musique!:

import music

music.play(music.NYAN)

Remarque que nous importons le module music. Il contient les méthodes utilisées pour produire et contrôler le son.

MicroPython a tout un tas de mélodies pré-programmées. En voici la liste complète :

  • music.DADADADUM
  • music.ENTERTAINER
  • music.PRELUDE
  • music.ODE
  • music.NYAN
  • music.RINGTONE
  • music.FUNK
  • music.BLUES
  • music.BIRTHDAY
  • music.WEDDING
  • music.FUNERAL
  • music.PUNCHLINE
  • music.PYTHON
  • music.BADDY
  • music.CHASE
  • music.BA_DING
  • music.WAWAWAWAA
  • music.JUMP_UP
  • music.JUMP_DOWN
  • music.POWER_UP
  • music.POWER_DOWN

Prend le code d’exemple et change la mélodie. Quelle est ta préférée ? Comment pourrais-tu utiliser ces airs comme des signaux ou des indices ?

Wolfgang Amadeus Microbit

Créer ta propre mélodie est facile !

Chaque note a un nom (comme C# ou F), une octave (pour dire à MicroPython à quelle hauteur il faut jouer la note) et une durée (combien de temps elle dure). Les octaves sont indiquées par un nombre ~ 0 est la plus basse et 8 est à peu près aussi haut que ce dont tu auras besoin à moins que tu ne fasses de la musique pour chiens. La durée s’exprime aussi à l’aide de nombres. Plus la valeur de la durée est grande plus la note sera jouée longtemps. Ces valeurs sont reliées entres elles - par exemple, une durée de 4 durera deux fois plus longtemps qu’une durée de 2 (et ainsi de suite). Si tu utilises la note nommée R alors MicroPython jouera une pause (c’est-à-dire un silence) pendant la durée spécifiée.

Chaque note est représentée par une chaîne de caractères comme ça:

NOTE[octave][:durée]

Par exemple, "A1:4" représente la note nommée A dans l’octave numéro 1 à jouer sur une durée de 4.

Fais une liste de note pour créer une mélodie (c’est équivalent à créer une animation avec une liste d’images). Par exemple, voici comment faire jouer à MicroPython le début de « Frère Jacques »:

import music

tune = ["C4:4", "D4:4", "E4:4", "C4:4", "C4:4", "D4:4", "E4:4", "C4:4",
        "E4:4", "F4:4", "G4:8", "E4:4", "F4:4", "G4:8"]
music.play(tune)

Note

MicroPython t’aide à simplifier de telles mélodies. Il se rappellera de l’octave et de la durée jusqu’à ce que tu les changes. Grâce à cela, l’exemple ci-dessus peut-être ré-écrit de cette façon:

import music

tune = ["C4:4", "D", "E", "C", "C", "D", "E", "C", "E", "F", "G:8",
        "E:4", "F", "G:8"]
music.play(tune)

Remarque que l’octave et la durée ne changent que lorsqu’elles le doivent. Ça fait beaucoup moins à taper et c’est plus simple à lire.

Effets sonores

MicroPython te permets de faire des sons qui ne sont pas des notes de musique. Par exemple, voici comment créer un effet de sirène de police:

import music

while True:
    for freq in range(880, 1760, 16):
        music.pitch(freq, 6)
    for freq in range(1760, 880, -16):
        music.pitch(freq, 6)

Remarque comment la méthode music.pitch est utilisée dans cet exemple. Elle attend une fréquence. Par exemple, une fréquence de 440 est la même chose qu’une note A (qui correspond au LA) utilisée pour accorder un orchestre symphonique.

Dans l’exemple ci-dessus la fonction range est utilisée pour générer un assortiment de valeurs numériques. Ces nombres sont utilisés pour définir la hauteur du ton. Les trois arguments de la fonction range sont la valeur de départ, la valeur de fin et la taille du pas. Ainsi, la première utilisation de range consiste à dire, en français, « créé un assortiment de nombres compris entre 880 et 1760 de 16 en 16 ». Sa deuxième utilisation dit « créé un assortiment de nombres compris entre 1760 et 880 de -16 en -16 ». C’est comme ça que l’on obtient une liste de fréquences qui montent puis qui descendent comme une sirène.

Puisque la sirène doit durer éternellement, elle est contenue dans une boucle while infinie.

Surtout, nous avons introduit une nouvelle sorte de boucle à l’intérieur de la boucle while: la boucle for. En français ça revient à dire « pour chaque élément dans une certaine collection, fais des trucs avec ». Plus précisément, dans l’exemple ci-dessus ça dit « pour chaque fréquences dans l’assortiment de fréquences, joue la hauteur de cette fréquence pendant 6 millisecondes ». Remarque que les choses à faire dans cette boucle sont indentées (comme on l’a vu précédemment) de façon à ce que Python sache quel code exécuter avec chaque élément.