π
<-
Chat plein-écran
[^]

News 2021
July (1)
June (2)
May (7)
April (3)
March (1)

News 2020
August (15)
July (2)
June (7)
May (7)
April (19)
March (4)

News 2019
August (4)
July (7)
June (6)
May (1)
April (3)
March (1)

News 2018
August (11)
July (8)
June (3)
May (10)
April (2)
March (4)

News 2017
August (15)
July (18)
June (1)
May (7)
April (4)
March (7)

News 2016
August (17)
July (16)
June (2)
May (2)
April (1)
March (5)

News 2015
August (25)
July (1)
June (4)
May (9)
April (4)
March (10)

News 2014
August (4)
July (4)
June (11)
May (12)
April (9)
March (12)
January (13)

News 2013
October (11)
August (5)
July (5)
June (9)
May (12)
April (10)
March (7)
January (10)

News 2012
August (12)
July (10)
June (13)
May (22)
April (8)
March (5)

News 2011
October (23)
August (1)
July (7)
June (29)
May (11)
April (5)
March (3)

News 2010
August (2)
July (2)
June (5)

News 2009
August (1)
July (1)
June (1)
May (1)
April (1)
March (1)

Cahier à colorier TI-Nspire CX II & TI-84 Plus CE Python !

New postby critor » 27 Jul 2021, 08:05

Comme l'année dernière,
Texas Instruments
t'offre cette année encore un cahier de coloriage estival. :favorite:

Les calculatrices couleur
TI-Nspire CX II
et pour cette rentrée 2021
TI-84 Plus CE Python
n'attendent plus que ton coup de crayon de couleur. :)

De quoi exprimer toute l'étendue de ton talent si tu es
iNspiré(e)
, et peut-être même offrir tes meilleurs coloriages à tes profs de sciences préférés à la rentrée ? ;)



Téléchargement
:
archives_voir.php?id=2787862

Source
:
https://twitter.com/TICalculators/statu ... 2320713729

Jour des projets ESIEE 2021

New postby critor » 24 Jun 2021, 18:43

L'école d'ingénieurs bénéficie depuis 2018 du , la première bibliothèque 4.0 d'Europe installée en partenariat avec
Texas Instruments
.

Grâce au
TI-Innovator Gateway
les étudiants de l'école n'ont plus besoin de dépenser des 100aines d'euros en achat de matériel pour leurs projets obligatoires, ils peuvent emprunter gratuitement à la bibliothèque les briques programmables
Texas Instruments
dont ils ont besoin ! :bj:

9252Cela comprend certes les calculatrices ainsi que les périphériques
TI-Innovator Hub
et
TI-Innovator Rover
que tu connais bien, mais aussi les cartes de développement
TI-LaunchPad
, cartes d'extension
TI-BoosterPack
associées, et également capteurs
TI-SensorTag
.

Ce
jeudi 24 juin
c'est le grand jour en partenariat avec
Texas Instruments
, le jour des projets des étudiants et étudiantes de l'
ESIEE Paris
, organisé en virtuel dans le contexte sanitaire que tu connais.

16 projets sont finalistes pour 4 récompenses à attribuer :
  • prix de l'
    Innovation
    par
    Texas Instruments
  • prix du
    Meilleur Projet Technique
    par l'
    AA ESIEE
  • prix
    Santé Environnement Handicap
    par l'
    ESIEE
  • mention spéciale
    TI Digital Marketing
    par
    Texas Instruments
  • mention spéciale
    Coup de Cœur du Public

Viens découvrir les projets et les lauréats :
  • Miragramme :
    projecteur holographique 3D ; l'occasion de découvrir la technologie optique de
    Texas Instruments
    avec le miroir pilotable via un système électromécanique
    (
    MEMS
    )
  • EchoSign :
    application traductrice de la langue des signes afin de faciliter la communication avec les personnes muettes
  • Sandy :
    analyseur de pollution des sols en micro-plastiques
  • Infrared Veins Targeting :
    détecteur de veine infrarouge pour les prises de sang
  • Blink :
    feux de signalisation clignotants gauche et droit pour vélos, à installer sur le casque du cycliste
  • ...
Dans tous les cas félicitations à tous pour avoir mené à bien vos projets en cette année une nouvelle fois difficile ! :bj:

Lien
:
https://jdp.esiee.fr/laureats-2021/
Link to topic: Jour des projets ESIEE 2021 (Comments: 0)

midi2calc: conversion musique → Python pour BBC micro:bit

New postby critor » 01 Jun 2021, 11:13

1395013949Dans une actualité précédente nous lancions
midi2calc
, notre service en ligne de conversion de fichiers de partitions
MIDI
en scripts
Python
pour ta calculatrice.

midi2calc
te permettait de donner une toute nouvelle dimension à tes jeux et projets sur ta calculatrice en lui permettant de jouer du son sur un périphérique à connecter, initialement le
TI-Innovator Hub
. :D

Une possibilité offerte à ce jour sur les éditions
Python
des
TI-83 Premium CE
et
TI-84 Plus CE
, ainsi que sur les
TI-Nspire CX II
.

Mais ce n'était encore que l'apéritif de la semaine... ;)

1395413953Rentrons aujourd'hui dans le cœur du sujet avec une mise à jour majeure de
midi2calc
. Tu as désormais le support d'un autre périphérique sonore ayant l'avantage d'être bien plus répandu et abordable, la carte
BBC micro:bit
! :favorite:

Le code produit est compatible aussi bien avec :
  • la
    micro:bit v2
    qui dispose directement d'un haut-parleur intégré
  • ou la
    micro:bit v1
    à condition de lui connecter un haut-parleur sur le contact 0 comme d'ailleurs illustré en bandeau de l'outil

midi2calc
t'offre ici la possibilité de générer ton script pour 2 modules
Python
différents au choix :
  • soit
    microbit
  • soit
    ti_innovator (micro:bit)
    pour les
    TI-Nspire CX II
    ou
    ti_hub (micro:bit)
    pour la plateforme
    CE
La différence est très simple. Les modules
microbit
sont à installer sur ta calculatrice, liens de téléchargements disponibles en fin d'article. Sans ces modules, le script généré ne fonctionnera pas.

Si par contre tu choisis
ti_innovator (micro:bit)
ou
ti_hub (micro:bit)
, ici tu n'as rien à installer puisque ces modules sont directement intégrés à la calculatrice ! :bj:
L'astuce mise en œuvre est d'utiliser leur méthode
send()
afin de définir notre propre fonction permettant d'envoyer directement à la carte
micro:bit
le code
Python
que l'on souhaite lui faire exécuter :
Code: Select all
def send_microbit(cmd):
  send("\x04")
  send(cmd)
  send("\x05")








1) La musique : de la vibration à la partition

Go to top

Mais commençons rapidement par expliquer tout cela. Au tout début, le son est une vibration mécanique. On appelle fréquence le nombre de vibrations par seconde, que l'on exprime en Hertz
(symbole
Hz
)
. Les fréquences audibles par l'oreille humaine vont en gros de
20 Hz
à
20000 Hz
.

Bien évidemment, les limites de fréquences audibles varient d'une personne à une autre. Donc laissons de côté ces extrêmes, et prenons comme référence une vibration intermédiaire de
440 Hz
. Et bien voilà donc notre première note de musique : le
la3
en notation française, ou
A4
en notation anglo-allemande.

Le numéro en suffixe indique l'octave. Un octave est un intervalle de fréquences
$mathjax$\left[f_1,f_2\right[$mathjax$
, où
$mathjax$f_2=2\times f_1$mathjax$
. Ce qui nous permet déjà d'encadrer notre note de référence en passant aux octaves supérieurs
(plus aigus)
ou inférieurs
(plus graves)
:
  • la8
    ou
    A9
    ou
    A8
    : 14080 Hz
  • la7
    ou
    A8
    ou
    A7
    : 7040 Hz
  • la6
    ou
    A7
    ou
    A6
    : 3520 Hz
  • la5
    ou
    A6
    ou
    A5
    : 1760 Hz
  • la4
    ou
    A5
    ou
    A4
    : 880 Hz
  • la3
    ou
    A4
    ou
    A3
    : 440 Hz
  • la2
    ou
    A3
    ou
    A2
    : 220 Hz
  • la1
    ou
    A2
    ou
    A1
    : 110 Hz
  • la-1
    ou
    la0
    ou
    A1
    ou
    A0
    : 55 Hz
  • la-2
    ou
    la-1
    ou
    A0
    ou
    A-1
    : 27,5 Hz
  • la-3
    ou
    la-2
    ou
    A-1
    ou
    A-2
    : 13,75 Hz
Comme tu vois, la numérotation des octaves, c'est compliqué... Il existe diverses numérotations différentes de par le monde. Ci-dessus tu as donc :
  • jusqu'à 2 versions de la numérotation latine :
    • l'historique, qui n'a pas d'octave de numéro 0, et passe donc directement de l'octave 1 à l'octave -1
    • et une où l'octave 0 a été rajouté par soucis de logique
  • la numérotation anglo-allemande
  • la numérotation de certains instruments compatibles avec la norme
    MIDI
Sans une connaissance pointue du contexte dans lequel il est énoncé, un numéro d'octave est donc hautement imprécis. Nous éviterons donc soigneusement de faire appel aux numéros d'octaves dans le code qui va suivre.

Séparons chaque octave en 12 sous-intervalles de même longueur que nous appellerons demi-tons. Pour cela nous avons besoin de 11 notes de musique, que voici :
  • en notation latine :
    Do
    ,
    Do# ou Ré♭
    ,
    ,
    Ré# ou Mi♭
    ,
    Mi
    ,
    Fa
    ,
    Fa# ou Sol♭
    ,
    Sol
    ,
    Sol# ou La♭
    ,
    La
    ,
    Si
  • en notation anglo-saxonne :
    C
    ,
    C# ou D♭
    ,
    D
    ,
    D# ou E♭
    ,
    E
    ,
    F
    ,
    F# ou G♭
    ,
    G
    ,
    G# ou A♭
    ,
    A
    ,
    B
  • en notation germanique :
    C
    ,
    C# ou D♭
    ,
    D
    ,
    D# ou E♭
    ,
    E
    ,
    F
    ,
    F# ou G♭
    ,
    G
    ,
    G# ou A♭
    ,
    A
    ,
    H
C'est la gamme chromatique. Le rapport entre les fréquences de 2 notes consécutives dans cette gamme est alors de
$mathjax$\sqrt[12]2$mathjax$
.




2) Codage MIDI d'une partition

Go to top

Maintenant que nous avons les bases, nous pouvons passer aux fichiers
MIDI
. Il s'agit d'une version informatisée d'une partition de musique. Elle comprend une ou plusieurs pistes de notes, à jouer chacune par un instrument.

Chaque piste comprend donc des notes à jouer. Chaque note à jouer est décrite par plusieurs caractéristiques, dont entre autres 2 qui vont nous intéresser ici :
  • sa hauteur, valeur qui détermine sa fréquence
  • sa durée
Le format
MIDI
code les hauteurs de notes sur 7 bits, ce qui autorise 27=128 notes différentes :
  • La note de numéro
    0
    est la plus grave : selon le contexte le
    do-3
    ou
    do-2
    ou
    C-1
    ou
    C-2
    .
  • La note de numéro
    69
    est notre fameux
    la3
    ou
    A4
    ou
    A3
    .
  • La note de numéro
    127
    est la plus aiguë : selon le contexte le
    sol8
    ou
    G9
    ou
    G8
    .

Ayant récupéré le numéro
n
d'une note
MIDI
à jouer, il nous est donc très facile de calculer sa fréquence :
$mathjax$440\times {\sqrt[12]2}^{n-69}$mathjax$
.




3) De la partition à la mélodie, une affaire de choix

Go to top

Les fichiers
MIDI
ont donc été conçus pour gérer plusieurs instruments, et comportent pour cela plusieurs pistes. Il ne sera donc pas rare de rencontrer plusieurs notes devant être jouées en même temps.
Or problème ici, nous contrôlons la
BBC micro:bit
qui ne peut se comporter que comme 1 seul instrument. Il lui est ainsi impossible de jouer plusieurs notes à la fois.

Nous t'avons justement conçu sur-mesures une interface permettant de résoudre facilement cette difficulté.

Lorsque tu auras fourni ton fichier
MIDI
ses différentes pistes te seront listées, chacune avec sa description ainsi que son nombre de notes.

Il te suffit alors de désactiver les pistes correspondant aux instruments d'accompagnement, et de ne garder que la ou les pistes des instruments principaux. :)

Mais comment donc distinguer les pistes principales ? Une difficulté est qu'il n'y a pas de règle absolue :
  • Tu peux regarder les descriptions des pistes : le caractère principal ou accompagnant de la piste sera parfois indiqué, mais pas toujours.
  • Tu peux regarder l'ordre des pistes : la ou les pistes principales seront parfois les premières ou les dernières, mais encore une fois pas systématiquement.
  • Tu peux regarder le nombre de notes des pistes : un nombre nettement supérieur à ceux des autres pistes peut être un indice, mais il n'est absolument pas infaillible.

Mais justement, ça aussi nous l'avons prévu. Tu trouveras sous la liste des pistes un bouton de lecture, qui te permettra de jouer directement dans ton navigateur ta sélection actuelle de pistes, et ce avec un seul instrument histoire de te donner un aperçu aussi fiable que possible de ce que cela donnera une fois passé sur ta calculatrice.

Tu peux donc immédiatement savoir à l'oreille si tu as effectué une bonne sélection de pistes ou pas ! :bj:

Tu restes bien sûr libre de conserver plusieurs pistes, et tester l'effet que ça donne. Puisque le cas n'est donc pas à exclure il nous faut faire un choix : en cas de notes devant être jouées en même temps, nous ne conserverons que la plus aiguë sur l'intervalle de temps concerné.

Si les cas où sur un même intervalle de temps une note de piste d'accompagnement est plus aiguë qu'une note de piste principale sont rares, cela pourra donner un bon effet, plus de richesse à ta mélodie.

Notons que si tu disposes de plusieurs
BBC micro:bit
, tu peux convertir les pistes séparément et tenter de les jouer simultanément.




4) Fonctions Python disponibles pour jouer du son sur BBC micro:bit

Go to top

Nous en arrivons donc enfin à la question de la
BBC micro:bit
. Comment lui faire jouer un son ?

La méthode music.pitch(fréquence, durée) permet justement de jouer une fréquence pendant une durée exprimée en millisecondes.
Par exemple pour jouer notre
la3
ou
A4
pendant 1 seconde, on peut appeler music.pitch(440, 1000).

Précisons de plus que cette méthode
music.pitch()
accepte un paramètre nommé optionnel
wait
, avec 2 valeurs au choix :
  • true
    : l'appel attendra la fin de la note de musique avant de rendre la main
  • false
    : l'appel rendra immédiatement la main, et ce sera donc à notre code d'attendre le délai nécessaire avant d'envoyer la note suivante

Mais contrairement au
TI-Innovator Hub
, la
BBC micro:bit
a l'avantage de gérer directement son propre format de mélodie dans le cadre de la méthode
music.play()
, ainsi documenté :
Code: Select all
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)

Une liste de chaînes de caractères, c'est bien embêtant niveau consommation de mémoire
heap
Python
surtout si l'on souhaite jouer de longues mélodies, aussi bien sur calculatrice que sur
micro:bit
d'ailleurs.
Nous calculons ici
56+14×(8+49+4)= 910
octets de
heap
consommés aussi bien sur la calculatrice que sur la
micro:bit
, et tout cela rien que pour les 14 premières notes de
Frère Jacques
.

Selon nos tests, on peut toutefois utiliser un tuple à la place d'une liste, et ainsi économiser un petit peu :
Code: Select all
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)

On descend à
40+14×(8+49+4)= 894
octets de
heap
.

Encore mieux, on peut utiliser des tableaux d'octets
(bytes)
au lieu des chaînes pour un gain très significatif :
Code: Select all
tune = (b"C4:4", b"D4:4", b"E4:4", b"C4:4", b"C4:4", b"D4:4", b"E4:4", b"C4:4", b"E4:4", b"F4:4", b"G4:8", b"E4:4", b"F4:4", b"G4:8")
music.play(tune)

Fantastique, plus que
40+14×(8+33+4)= 670
octets de
heap
.

On peut de plus raccourcir encore la chose en ne reprécisant pas les octaves et durées en l'absence de changement :
Code: Select all
tune = (b"C4:4", b"D", b"E", b"C", b"C", b"D", b"E", b"C", b"E", b"F", b"G:8", b"E:4", b"F", b"G:8")
music.play(tune)

Extraordinaire, plus que
40+14×(8+33)+10×1+3×3+1×4= 637
octets de
heap
. Nous avons donc une bonne marge pour limiter la casse induite par ce choix de format pas très malin.

En prime, on pourrait passer la paramètre nommé
wait=false
. Cela permettrait ici à notre script de reprendre la main immédiatement après l'envoi de la mélodie, avec donc la possibilité de poursuivre l'exécution de ton jeu ou projet pendant qu'elle joue ! :favorite:

Ce serait vraiment la solution idéale, non ?...

Et bien non, malheureusement nous n'utiliserons pas
music.play()
.

Ce format nous impose en effet d'envoyer de longues lignes de code
Python
, et il semble y avoir un problème avec le protocole de communication entre la calculatrice et la
micro:bit
: au-delà des 900 caractères et quelques, les lignes
Python
ne semblent pas exécutées par la
micro:bit
.

Malheureusement la limite n'est pas fixe. Envoyer 2 lignes légèrement plus courtes génère le même problème, comme si le problème n'était pas la taille de la ligne, mais celle d'un
buffer
quelque part...

En attendant de mieux comprendre le problème afin de le contourner, ou d'avoir une mise à jour de
Texas Instruments
le corrigeant, nous nous devons donc à grand regret de laisser ce format de côté. :'(


Nous allons utiliser
music.pitch()
pour le moment.

Notons que le
TI-Innovator Hub
n'intégrait qu'un
buzzer piézoélectrique
pas très harmonieux dans les fréquences très graves ou aiguës. La
micro:bit v2
fait bien mieux avec son véritable haut-parleur.

Malgré tout, nous te laissons la possibilité de corriger la hauteur de ta mélodie. Une fois ta sélection de pistes effectuée, l'intervalle de notes utilisées t'est indiqué en numérotation
MIDI
. Tu peux alors décaler tout le morceau de musique vers le haut ou vers le bas d'autant de demi-tons que tu voudras.




5) Notre codage Python d'une mélodie

Go to top

Nous souhaitons te permettre de stocker et jouer de longues mélodies
Python
sur ta calculatrice, et ainsi organiser de véritables concerts pour tes jeux ou projets
Python
.

Il nous faut minimiser la consommation de mémoire
heap
. Comme déjà expliqué, nous te proposons un format de données compacté sous forme de tableau d'octets
(type bytes)
. Une note sera codée sur 2 octets :
  • 1 octet avec les bits 0 à 6
    (7 bits donc)
    pour indiquer le numéro de note, et le bit 7 pour indiquer un silence
  • 2 octets pour indiquer la durée en millisecondes




6) Notre fonction Python pour jouer une mélodie

Go to top

Et voilà donc notre fonction jouant la musique, ici dans sa version
TI-83 Premium CE
et
TI-84 Plus CE
: :D
Code: Select all
#the melody playing function
#- mus : melody data
#- durat_bytes : number of bytes encoding each note duration
def play_melody_on_microbit(mus, durat_bytes):
  r = 2 ** (1 / 12)
  t2, durat, i = monotonic(), 0, 0
  t1 = t2
  while i < len(mus):
    t1, t2 = t2, monotonic()
    deltat = max(0, (t2 - t1) / 1000 - durat)
    note = mus[i]
    i += note < 0x80
    durat = mus[i] & ((note ^ 0x80) | 0x7F)
    i += 1
    if durat_bytes > 1:
      durat |= int.from_bytes(mus[i:i + durat_bytes - 1],'little') << (8 - (note >= 0x80))
      i += durat_bytes - 1
    durat = max(1, durat) / 1000
    music.pitch(round((note < 0x80) and 440 * r**(note - 57)), int(durat*1000), wait=False)
    sleep(max(0, durat - deltat))

Chaque appel music.pitch(note, durée) est ici suivi d'un appel time.sleep(durée) afin d'attendre avant de jouer la note suivante.

Toutefois pour enchaîner correctement les notes de musique et tenir le rythme, il nous faut tenir compte du temps de latence dû au fait que l'appel
sound.tone()
est ici converti en une commande envoyée à la
micro:bit
par le port
USB
de la calculatrice, ainsi que du temps d'exécution que nécessite tout le reste du corps de la boucle.

Et bien c'est prévu, la méthode
time.monotonic()
ou
time.ticks_ms()
est utilisée pour mesurer la durée d'exécution d'une itération, prise en compte pour corriger l'appel
time.sleep()
de l'itération suivante. :D

Une fois ta conversion validée, tu obtiens ton script
Python
converti sous deux formes différentes :
  • un fichier
    .py
    téléchargeable
  • un code en coloration syntaxique que tu peux directement sélectionner et copier-coller




7) Exemples de mélodies

Go to top

Voyons tout-de-suite ce que ça donne. Nous t'avions promis de quoi jouer des mélodies ambitieuses pour tes jeux ou projets, voici par exemple de quoi te montrer que ça tient bien le rythme, avec l'air de la chevauchée des Walkyries par
Richard Wagner
, 1856 : :favorite:


De plus nous t'avons donc dit plus haut que le haut-parleur de la
micro:bit v2
se comportait bien mieux que le
buzzer
du
TI-Innovator Hub
, notamment dans les aigus. Voici de quoi t'en convaincre avec rien de moins que l'un des airs les plus virtuoses de l'art lyrique culminant au
Fa5
ou
F6
, l'air de la Reine de la nuit dans
La Flûte enchantée
de
Wolfgang Amadeus Mozart
, 1791 : :#tritop#:




8) Téléchargements et liens d'accès

Go to top

Modules micro:bit
:


midi2calc
est un service en ligne entièrement gratuit, ne nécessitant de plus aucune inscription. :D

Pour accéder à
midi2calc
dès maintenant, c'est très simple. Tu as 2 liens directs courts :
  • pour lancer l'outil de façon intégrée à l'interface de
    TI-Planet
    , soit entre autres avec le
    chat
    sous la main pour demander de l'aide ou faire des suggestions :)
  • dédié à un usage pédagogique en classe. Les divers éléments de
    TI-Planet
    (chat d'entraide, etc.)
    ne sont ici pas affichés, ne générant donc aucun bruit ou distraction lors de ta présentation.
En retour, nous aurons grand plaisir à prendre connaissance de tes projets. ;)

midi2calc: conversion musique → Python pour TI-Innovator Hub

New postby critor » 31 May 2021, 11:38

729872897757Le
TI-Innovator Hub
est un périphérique pour tes calculatrices
TI-83 Premium CE
,
TI-84 Plus CE
et
TI-Nspire CX
.

Il est même pilotable en
Python
sur les derniers modèles
TI-Nspire CX II
, ainsi que sur les éditions
Python
des
TI-83 Premium CE
et
TI-84 Plus CE
.

Entre bien d'autres choses, il rajoute à ta calculatrice la capacité à produire des sons, grâce à un élément situé dans la base de son boîtier.

1395013949Aujourd'hui est encore un grand jour sur
TI-Planet
; nous te lançons , un nouveau service en ligne entièrement gratuit permettant d'ouvrir les portes d'une toute nouvelle dimension à ta calculatrice. ;)

Comme son nom l'indique ce nouveau projet que nous t'avons développé avec amour est une nouvelle fois d'un convertisseur : tu lui donnes un fichier de partition de musique au format
MIDI
, et il te génère automatiquement un script
Python
permettant à ta calculatrice de jouer la musique en question sur le
TI-Innovator Hub
! :D








1) La musique : de la vibration à la partition

Go to top

Mais commençons rapidement par expliquer tout cela. Au tout début, le son est une vibration mécanique. On appelle fréquence le nombre de vibrations par seconde, que l'on exprime en Hertz
(symbole
Hz
)
. Les fréquences audibles par l'oreille humaine vont en gros de
20 Hz
à
20000 Hz
.

Bien évidemment, les limites de fréquences audibles varient d'une personne à une autre. Donc laissons de côté ces extrêmes, et prenons comme référence une vibration intermédiaire de
440 Hz
. Et bien voilà donc notre première note de musique : le
la3
en notation française, ou
A4
en notation anglo-allemande.

Le numéro en suffixe indique l'octave. Un octave est un intervalle de fréquences
$mathjax$\left[f_1,f_2\right[$mathjax$
, où
$mathjax$f_2=2\times f_1$mathjax$
. Ce qui nous permet déjà d'encadrer notre note de référence en passant aux octaves supérieurs
(plus aigus)
ou inférieurs
(plus graves)
:
  • la8
    ou
    A9
    ou
    A8
    : 14080 Hz
  • la7
    ou
    A8
    ou
    A7
    : 7040 Hz
  • la6
    ou
    A7
    ou
    A6
    : 3520 Hz
  • la5
    ou
    A6
    ou
    A5
    : 1760 Hz
  • la4
    ou
    A5
    ou
    A4
    : 880 Hz
  • la3
    ou
    A4
    ou
    A3
    : 440 Hz
  • la2
    ou
    A3
    ou
    A2
    : 220 Hz
  • la1
    ou
    A2
    ou
    A1
    : 110 Hz
  • la-1
    ou
    la0
    ou
    A1
    ou
    A0
    : 55 Hz
  • la-2
    ou
    la-1
    ou
    A0
    ou
    A-1
    : 27,5 Hz
  • la-3
    ou
    la-2
    ou
    A-1
    ou
    A-2
    : 13,75 Hz
Comme tu vois, la numérotation des octaves, c'est compliqué... Il existe diverses numérotations différentes de par le monde. Ci-dessus tu as donc :
  • jusqu'à 2 versions de la numérotation latine :
    • l'historique, qui n'a pas d'octave de numéro 0, et passe donc directement de l'octave 1 à l'octave -1
    • et une où l'octave 0 a été rajouté par soucis de logique
  • la numérotation anglo-allemande
  • la numérotation de certains instruments compatibles avec la norme
    MIDI
Sans une connaissance pointue du contexte dans lequel il est énoncé, un numéro d'octave est donc hautement imprécis. Nous éviterons donc soigneusement de faire appel aux numéros d'octaves dans le code qui va suivre.

Séparons chaque octave en 12 sous-intervalles de même longueur que nous appellerons demi-tons. Pour cela nous avons besoin de 11 notes de musique, que voici :
  • en notation latine :
    Do
    ,
    Do# ou Ré♭
    ,
    ,
    Ré# ou Mi♭
    ,
    Mi
    ,
    Fa
    ,
    Fa# ou Sol♭
    ,
    Sol
    ,
    Sol# ou La♭
    ,
    La
    ,
    Si
  • en notation anglo-saxonne :
    C
    ,
    C# ou D♭
    ,
    D
    ,
    D# ou E♭
    ,
    E
    ,
    F
    ,
    F# ou G♭
    ,
    G
    ,
    G# ou A♭
    ,
    A
    ,
    B
  • en notation germanique :
    C
    ,
    C# ou D♭
    ,
    D
    ,
    D# ou E♭
    ,
    E
    ,
    F
    ,
    F# ou G♭
    ,
    G
    ,
    G# ou A♭
    ,
    A
    ,
    H
C'est la gamme chromatique. Le rapport entre les fréquences de 2 notes consécutives dans cette gamme est alors de
$mathjax$\sqrt[12]2$mathjax$
.




2) Codage MIDI d'une partition

Go to top

Maintenant que nous avons les bases, nous pouvons passer aux fichiers
MIDI
. Il s'agit d'une version informatisée d'une partition de musique. Elle comprend une ou plusieurs pistes de notes, à jouer chacune par un instrument.

Chaque piste comprend donc des notes à jouer. Chaque note à jouer est décrite par plusieurs caractéristiques, dont entre autres 2 qui vont nous intéresser ici :
  • sa hauteur, valeur qui détermine sa fréquence
  • sa durée
Le format
MIDI
code les hauteurs de notes sur 7 bits, ce qui autorise 27=128 notes différentes :
  • La note de numéro
    0
    est la plus grave : selon le contexte le
    do-3
    ou
    do-2
    ou
    C-1
    ou
    C-2
    .
  • La note de numéro
    69
    est notre fameux
    la3
    ou
    A4
    ou
    A3
    .
  • La note de numéro
    127
    est la plus aiguë : selon le contexte le
    sol8
    ou
    G9
    ou
    G8
    .

Ayant récupéré le numéro
n
d'une note
MIDI
à jouer, il nous est donc très facile de calculer sa fréquence :
$mathjax$440\times {\sqrt[12]2}^{n-69}$mathjax$
.




3) De la partition à la mélodie, une affaire de choix

Go to top

Les fichiers
MIDI
ont donc été conçus pour gérer plusieurs instruments, et comportent pour cela plusieurs pistes. Il ne sera donc pas rare de rencontrer plusieurs notes devant être jouées en même temps.
Or problème ici, nous contrôlons le
TI-Innovator Hub
qui ne peut se comporter que comme 1 seul instrument. Il lui est ainsi impossible de jouer plusieurs notes à la fois.

Nous t'avons justement conçu sur-mesures une interface permettant de résoudre facilement cette difficulté.

Lorsque tu auras fourni ton fichier
MIDI
ses différentes pistes seront listées, chacune avec sa description ainsi que son nombre de notes.

Il te suffit alors de désactiver les pistes correspondant aux instruments d'accompagnement, et de ne garder que la ou les pistes des instruments principaux. :)

Mais comment donc distinguer les pistes principales ? Une difficulté est qu'il n'y a pas de règle absolue :
  • Tu peux regarder les descriptions des pistes : le caractère principal ou accompagnant de la piste sera parfois indiqué, mais pas toujours.
  • Tu peux regarder l'ordre des pistes : la ou les pistes principales seront parfois les premières ou les dernières, mais encore une fois pas systématiquement.
  • Tu peux regarder le nombre de notes des pistes : un nombre nettement supérieur à ceux des autres pistes peut être un indice, mais il n'est absolument pas infaillible.

Mais justement, ça aussi nous l'avons prévu. Tu trouveras sous la liste des pistes un bouton de lecture, qui permet de jouer directement dans ton navigateur ta sélection actuelle de pistes, et ce avec un seul instrument histoire de te donner un aperçu aussi fiable que possible de ce que cela donnera une fois passé sur ta calculatrice.

Tu peux donc immédiatement savoir à l'oreille si tu as coché les bonnes pistes ou pas ! :bj:

Tu restes bien sûr libre de conserver plusieurs pistes, et tester l'effet que ça donne. Puisque le cas n'est donc pas à exclure il nous faut faire un choix : en cas de notes devant être jouées en même temps, nous ne conserverons que la plus aiguë sur l'intervalle de temps concerné.

Si les cas où sur un intervalle de temps une note de piste d'accompagnement est plus aiguë qu'une note de piste principale sont rares, cela pourra donner un bon effet, plus de richesse à ta mélodie.

Notons que si tu disposes de plusieurs
TI-Innovator Hub
, tu peux convertir les pistes séparément et tenter de les jouer simultanément. Nous n'avons toutefois pas testé si cette superposition sonore d'instruments identiques était très harmonieuse.




4) Notre codage Python d'une mélodie

Go to top

Nous souhaitons te permettre de stocker et jouer de longues mélodies
Python
sur ta calculatrice, et ainsi organiser de véritables concerts pour tes jeux ou projets
Python
.

Il nous faut minimiser la consommation de mémoire
heap
. Comme déjà expliqué, nous te proposons un format de données compacté sous forme de tableau d'octets
(type bytes)
. Une note sera codée sur 2 octets :
  • 1 octet avec les bits 0 à 6
    (7 bits donc)
    pour indiquer le numéro de note, et le bit 7 pour indiquer un silence
  • 1 octet pour indiquer la durée




5) Fonctions Python disponibles pour jouer du son sur TI-Innovator Hub

Go to top

Nous en arrivons donc enfin à la question du
TI-Innovator Hub
. Comment lui faire jouer un son ?

Importons déjà le module nécessaire, directement intégré sur nos calculatrices :
Code: Select all
import sound #sur TI-83PCE/84+CE
from ti_hub import sound #sur TI-Nspire CX II


2 méthodes sont alors offertes pour jouer un son :
  • .tone(fréquence, temps), avec la fréquence qui peut aller de 0 à 8000 Hz, et le temps de 0.1 à 100s
  • .note(note, temps) très similaire, où l'on précise juste la note au lieu de la fréquence

Par exemple pour jouer notre
la3
ou
A4
, on peut appeler au choix :
  • sound.tone(440, 1)
  • sound.note("A4", 1)
Nous allons ici utiliser
sound.tone()
pour plusieurs raisons :
  • le calcul de la fréquence pour
    sound.tone()
    est simple et rapide comme vu plus haut, alors que pour
    sound.note()
    il faudrait calculer à la fois la note et l'octave
  • pour éviter toute confusion, nous souhaitons éviter l'utilisation du moindre numéro d'octave
  • sound.note()
    ne joue que des fréquences correspondant à des notes de la gamme, alors que
    sound.tone()
    offre bien davantage de libertés pour de futures évolutions
  • avec
    sound.note()
    nous n'avons pas trouvé de notation permettant de jouer les notes altérées par un
    dièse
    ou
    bémol
    , et 5 des 12 notes de la gamme chromatique nous sont donc inaccessibles, ton oreille risquerait de ne pas apprécier les conversions de certains morceaux...
  • sound.note()
    ne comprend de plus qu'un intervalle de notes restreint allant du
    C3
    au
    A7
    soit seulement 35 notes, très insuffisant pour reproduire fidèlement les 128 notes
    MIDI
Notons que le
TI-Innovator Hub
n'est pas très harmonieux dans les fréquences extrêmement graves ou aiguës.
Mais ça aussi nous te l'avons prévu sur l'interface. :D

Une fois ta sélection de pistes effectuée, l'intervalle de notes utilisées t'est indiqué en numérotation
MIDI
. Tu peux alors décaler tout le morceau de musique vers le haut ou vers le bas d'autant de demi-tons que tu voudras.




6) Notre fonction Python pour jouer une mélodie

Go to top

Et voilà donc notre fonction jouant la musique, ici dans sa version
TI-83 Premium CE
et
TI-84 Plus CE
: :D
Code: Select all
#the melody playing function
#- mus : melody data
#- durat_bytes : number of bytes encoding each note duration
def play_melody_on_innovator(mus, durat_bytes):
  r = 2 ** (1 / 12)
  t2, durat, i = monotonic(), 0, 0
  t1 = t2
  while i < len(mus):
    t1, t2 = t2, monotonic()
    deltat = max(0, (t2 - t1) / 1000 - durat)
    note = mus[i]
    i += note < 0x80
    durat = mus[i] & ((note ^ 0x80) | 0x7F)
    i += 1
    if durat_bytes > 1:
      durat |= int.from_bytes(mus[i:i + durat_bytes - 1],'little') << (8 - (note >= 0x80))
      i += durat_bytes - 1
    durat = max(1, durat) / 10
    sound.tone((note < 0x80) and 440 * r**(note - 69), durat)
    sleep(max(0, durat - deltat))

Chaque appel sound.tone(note, durée) est ici suivi d'un appel time.sleep(durée) afin d'attendre avant de jouer la note suivante.

Toutefois pour enchaîner correctement les notes de musique et tenir le rythme, il nous faut tenir compte du temps de latence dû au fait que l'appel
sound.tone()
est ici converti en une commande envoyée au
TI-Innovator Hub
par le port
USB
de la calculatrice, ainsi que du temps d'exécution que nécessite tout le reste du corps de la boucle.

Et bien c'est prévu, la méthode
time.monotonic()
ou
time.ticks_ms()
est utilisée pour mesurer la durée d'exécution d'une itération, prise en compte pour corriger l'appel
time.sleep()
de l'itération suivante. :D

Une fois ta conversion validée, tu obtiens ton script
Python
converti sous deux formes différentes :
  • un fichier
    .py
    téléchargeable
  • un code en coloration syntaxique que tu peux directement sélectionner et copier-coller




7) Exemples de mélodies

Go to top

Voyons tout-de-suite ce que ça donne. Pour fêter cet événement exceptionnel, commençons par un clin d'œil à nos amis nord-américains : ;)


Et nous t'avions promis de quoi jouer des mélodies ambitieuses pour tes jeux ou projets, voici de quoi te convaincre que l'objectif est atteint et que ça tient bien le rythme. Voici l'air de la chevauchée des Walkyries par
Richard Wagner
, 1856 : :#tritop#:




8) Liens d'accès

Go to top

midi2calc
est un service en ligne entièrement gratuit, ne nécessitant de plus aucune inscription. :D

Pour accéder à
midi2calc
dès maintenant, c'est très simple. Tu as 2 liens directs courts :
  • pour lancer l'outil de façon intégrée à l'interface de
    TI-Planet
    , soit entre autres avec le
    chat
    sous la main pour demander de l'aide ou faire des suggestions :)
  • dédié à un usage pédagogique en classe. Les divers éléments de
    TI-Planet
    (chat d'entraide, etc.)
    ne sont ici pas affichés, ne générant donc aucun bruit ou distraction lors de ta présentation.
En retour, nous aurons grand plaisir à prendre connaissance de tes projets. ;)

img2calc: convertis tes images à afficher sur TI-RGB Array

New postby critor » 28 May 2021, 10:54

13917 est notre service universel de conversion d'images pour calculatrices graphiques.

À ce jour selon les cas, il te génère soit des fichiers ou variables à appeler depuis tes programmes
Basic
ou scripts
Python
, soit directement des scripts
Python
intégrant l'image en question.

1392913930Dans ce dernier cas, nous te rajoutions hier la possibilité de convertir des images pour un affichage sur
BBC micro:bit
.

Autre grande nouveauté aujourd'hui, tu peux maintenant convertir tes images en scripts
Python
permettant à ta calculatrice de les afficher sur la grille
TI-RGB Array
! :bj:

En effet la grille
TI-RGB Array
dispose de 2×8=16 diodes RGB adressables.

1213012129La grille
TI-RGB Array
est à connecter à ta calculatrice via l'interface
TI-Innovator Hub
et son port
breadboard
.

Une option disponible à ce jour uniquement pour les modèles ayant une gestion en
Python
du
TI-Innovator Hub
, soit les
TI-Nspire CX II
ainsi que les éditions
Python
des
TI-83 Premium CE
et
TI-84 Plus CE
.

Nous prendrons comme exemple l'image ci-contre faisant déjà 2×8 pixels.

Déjà quel format adopter pour l'image au sein du script
Python
? Il nous faut tout d'abord voir les instructions dont on dispose.

Pour récupérer un objet dont les méthodes permettent de contrôler le
TI-RGB Array
, il te faut commencer par le code suivant :
Code: Select all
from ti_hub import * # uniquement TI-Nspire CX II
from rgb_arr import * # uniquement TI-83PCE/84+CE

rgbarr = rgb_array()

En pratique contrairement à la
BBC micro:bit
, le
TI-Innovator Hub
n'est pas directement pilotable en
Python
mais dans un langage de script propriétaire. Les différents appels aux bibliothèques
Python
fournies par
TI
sur la calculatrice convertissent en fait ce qu'on leur demande en instructions pour le langage de script du
TI-Innovator Hub
. Par exemple, le code précédent envoie en réalité au
TI-Innovator Hub
l'instruction CONNECT RGB.

L'objet
Python
ainsi récupéré offre alors les méthodes suivantes :
  • .set(diode, rouge, vert, bleu) : allume la diode indiquée
    (n°0 à 15)
    dans la couleur RGB précisée
  • .set_all(rouge, vert, bleu) : allume les 16 diodes dans la couleur précisée
  • .all_off() : éteint les 16 diodes
  • .pattern(masque) : allume en rouge les diodes correspondant au masque binaire indiqué
Comme nous l'avions vu dans l'article précédent, ici les instructions d'affichage transitent via le port USB de la calculatrice, ce qui génère un certain délai. Afin d'obtenir un affichage d'image aussi instantané que possible et donc pouvoir espérer faire jouer des animations aussi fluides que possible, il nous faut donc minimiser le nombre d'instructions utilisées.

Intéressons-nous donc à la méthode .pattern() qui permet d'allumer plusieurs diodes à la fois. Par exemple .pattern(42) envoie la commande SET RGB PATTERN 42. Comme 42=25+23+21, cela allumera en rouge 3 diodes : les n°1, 3 et 5.

Mais si nous n'avons que du rouge, nous n'irons pas loin... Et bien justement, la dernière mise à jour
1.5
du
TI-Innovator Hub
a rajouté un paramètre de couleur optionnel à l'instruction
PATTERN
, sous la forme SET RGB PATTERN masque rouge vert bleu. En fait les bibliothèques
Python
de
TI
ne le gèrent pas encore, mais il y a quand même une astuce pour en profiter malgré tout. En effet toutes les méthodes
Python
acceptent un paramètre supplémentaire non spécifié au menu : un suffixe qui sera concaténé à l'instruction envoyée. Pour envoyer par exemple un SET RGB PATTERN 42 255 0 255, il nous suffit d'appeler .pattern(42, "255 0 255"). ;)

Cette méthode
.pattern()
aurait pu nous être très utile pour minimiser le nombre d'instructions échangées, notamment dans le contexte d'images indexées : au lieu d'une instruction pour chacune des 16 diodes, nous aurions une seule instruction par couleur de la palette. Mais hélas, nous nous rendons vite compte qu'elle ne convient pas. En effet, elle allume bien maintenant le masque de diodes dans la couleur indiquée, mais elle éteint systématiquement toutes les autres diodes. L'affichage d'une image comportant plusieurs couleurs est donc strictement impossible. :'(


Donc tant pis. En attendant que
Texas Instruments
nous fournisse de meilleures instructions
(ou pas)
, nous optons pour une boucle appelant la méthode
.set()
pour allumer au pire chacune des 16 diodes du
TI-RGB Array
.

Nous choisissons ici comme déjà expliqué de
compacter
les données
Python
de l'image sous la forme d'un tableau d'octets
(type byte)
, mais pas de les compresser, le gain d'une compression
RLE
étant bien faible sur un aussi petit nombre de pixels, sauf à afficher des images ne présentant pas une grande complexité.

Quant au format de ces données, nous choisissons de chaîner des quadruplets d'octets :
  • numéro de diode
  • rouge
  • vert
  • bleu
Ce qui permet entre autres de gérer des images transparentes en ne rafraîchissant pas l'état des diodes non indiquées.

1393113932Et voilà, l'image que tu as choisie s'affiche alors sur le
TI-RGB Array
! :bj:

Tu peux maintenant dessiner absolument tout ce que tu veux, de préférence en 2×8 pixels, et obtenir rapidement le script l'affichant sur ton
TI-RGB Array
! :D

Tu restes libre bien sûr de fournir des images plus grandes, elles seront si besoin redimensionnées. Mais avec ici sur le
TI-RGB Array
des pixels peu nombreux et assez
"gros"
, il vaut mieux pour toi garder le contrôle sur ce que ça donnera pixel par pixel, en fournissant une image au plus proche du format d'affichage.

Liens img2calc
:


img2calc: convertis tes images à afficher sur micro:bit

New postby critor » 27 May 2021, 10:40

13917Nous revenons aujourd'hui sur , notre service universel de conversion d'images pour calculatrices graphiques.

Depuis peu,
img2calc
gère la production de scripts
Python
incluant de quoi afficher l'image convertie sur l'écran de ta calculatrice.

Grande nouveauté aujourd'hui, tu peux maintenant convertir tes images en scripts
Python
permettant à ta calculatrice de les afficher sur une carte
BBC Micro:bit
! :bj:

En effet la
BBC Micro:bit
dispose d'un afficheur muni de 5×5 LEDs rouges.

Une option disponible pour les modèles gérant cette carte, soit à ce jour les
TI-Nspire CX II
ainsi que les éditions
Python
des
TI-83 Premium CE
et
TI-84 Plus CE
.

Nous prendrons comme exemple l'image ci-contre faisant déjà 5×5 pixels en niveaux de gris.

img2calc
t'offre ici la possibilité de générer ton script pour 2 modules
Python
différents au choix :
  • soit
    microbit
  • soit
    ti_innovator (micro:bit)
    pour les
    TI-Nspire CX II
    ou
    ti_hub (micro:bit)
    pour la plateforme
    CE
La différence est très simple. Les modules
microbit
sont à installer sur ta calculatrice, liens de téléchargements disponibles en fin d'article. Sans ces modules, le script généré ne fonctionnera pas.

Si par contre tu choisis
ti_innovator (micro:bit)
ou
ti_hub (micro:bit)
, ici tu n'as rien à installer puisque ces modules sont directement intégrés à la calculatrice ! :bj:
L'astuce mise en œuvre est d'utiliser leur méthode
send()
afin de définir notre propre fonction permettant d'envoyer directement à la carte
micro:bit
le code
Python
que l'on souhaite lui faire exécuter :
Code: Select all
def send_microbit(cmd):
  send("\x04")
  send(cmd)
  send("\x05")


L'afficheur de la
micro:bit
étant constitué de LEDs rouges, lors de la conversion
img2calc
ne prend ici en compte que les niveaux de gris et les transforme en niveaux de rouge comme illustré ci-contre.

Mais quel format adopter pour l'image au sein du script
Python
?

On peut certes imaginer une boucle allumant les diodes une par une à coups d'appels display.set_pixel(x,y,brillance), la brillance étant codée de 0 à 9, ce qui nous laisse toute liberté sur le format de stockage des données de l'image.

Cette méthode a toutefois le défaut d'être lente, puisque concernant ici un afficheur externe. En effet pour 5×5=25 diodes, les délais dus au protocole de communication seront multipliés par 25. Cela donnera de plus un affichage de l'image non pas instantané mais progressif, et pas du meilleur effet, bien embêtant de plus si tu souhaites afficher plusieurs images à la suite pour donner un effet d'animation. :'(

Sachant qu'avec le projet
img2calc
nous visons en priorité les performances, il nous faut trouver autre chose. Et bien cela tombe bien, car la carte
BBC micro:bit
gère son propre format d'image :
Code: Select all
#your image data
#5x5 10-shades of gray pixels
image = "33445:20005:21006:00006:98877"

1392913930L'image est alors directement affichable sur la
micro:bit
en lui faisant exécuter d'une façon ou d'une autre display.show(Image(...)) ! :bj:

Tu peux maintenant dessiner absolument tout ce que tu veux, de préférence en niveaux de gris sur 5×5 pixels, et obtenir rapidement le script l'affichant sur ta
micro:bit
! :D

Tu restes libre bien sûr de fournir des images couleurs ou plus grandes, elles seront si besoin redimensionnées et passées en niveaux de gris. Mais avec ici sur la
micro:bit
un afficheur munis de pixels peu nombreux et assez
"gros"
, il vaut mieux garder le contrôle de ce que ça donnera pixel par pixel, en fournissant une image au plus proche du format d'affichage.

Liens img2calc
:


Modules micro:bit
:


-
Search
-
Social
-
Featured topics
Remplace ton ancienne fx-92 Collège ou Graph 35 par la Graph 90+E couleur. Pour tout achat, Casio te rembourse 10€ en cas de retour de ta fx-92 Collège, ou 15€ en cas de retour de ta Graph 35. Etiquette de retour fournie, pas de frais de port à payer, même les anciens modèles et machines non fonctionnelles sont acceptées. En partenariat avec les Restos du coeur.
10€ remboursés par Casio sur l'achat de ta calculatrice Graph 35 d'ici le 30 Septembre 2021
Reprise de ton ancienne fx-92 Collège à 5€ ou Graph 35 à 10€. Même non fonctionnelle ou ancien modèle. Etiquette de retour fournie, pas de frais de port à payer. En partenariat avec les Restos du coeur.
Comparaisons des meilleurs prix pour acheter sa calculatrice !
25€ remboursés par Casio sur l'achat de ta calculatrice fx-CP400 d'ici le 31 Octobre 2021
3€ remboursés par Casio sur l'achat de ta calculatrice fx-92 Collège d'ici le 30 Septembre 2021
Découvre les nouvelles fonctionnalités en Python de l'OS 5.5 pour la 83PCE/84+C-T Python Edition
Découvre les nouvelles fonctionnalités en Python de l'OS 5.2 pour les Nspire CX II
Omega, le fork étendant les capacités de ta NumWorks, même en mode examen !
123456789
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
515 utilisateurs:
>504 invités
>4 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)

-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)