Différences entre versions de « ADF Voice Changer Principe »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
Ligne 4 : Ligne 4 :
  
 
== Les grains audios...==
 
== Les grains audios...==
Peu importe si vous êtes assez âgé pour avoir pu jouer avec la platine à disque vinyl de papa, ou avoir pu « sampler » les fichiers audio numériques sur le nouveau PC moderne, vous avez probablement connu une certaine version de ce phénomène : prendre un enregistrement audio normalement lu à vitesse normale (dite nominale)... pour ensuite modifier cette vitesse, ce qui revient à en compresser ou en dilater le temps ... et la hauteur (fréquence) de l'enregistrement change avec elle.
+
Peu importe si vous êtes assez âgé pour avoir pu jouer avec la platine à disque vinyle de papa, ou avoir pu « sampler » les fichiers audio numériques sur le nouveau PC moderne, vous avez probablement connu une certaine version de ce phénomène : prendre un enregistrement audio normalement lu à vitesse normale (dite nominale)... pour ensuite modifier cette vitesse, ce qui revient à en compresser ou en dilater le temps ... et la hauteur (fréquence) de l'enregistrement change avec elle.
  
 
'''Comprimer''' le temps (donc jouer le morceau plus vite) augmente la hauteur du son (il est plus aigu), tandis que '''dilater''' le temps (jouer plus lentement) diminue la hauteur hauteur du son (il est plus grave).  
 
'''Comprimer''' le temps (donc jouer le morceau plus vite) augmente la hauteur du son (il est plus aigu), tandis que '''dilater''' le temps (jouer plus lentement) diminue la hauteur hauteur du son (il est plus grave).  

Version du 18 janvier 2013 à 12:31


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Ici, nous allons expliquer quelques notions de théorie geek. Si vous voulez seulement assembler le circuit, vous pouvez aller directement à la page suivante.

Les grains audios...

Peu importe si vous êtes assez âgé pour avoir pu jouer avec la platine à disque vinyle de papa, ou avoir pu « sampler » les fichiers audio numériques sur le nouveau PC moderne, vous avez probablement connu une certaine version de ce phénomène : prendre un enregistrement audio normalement lu à vitesse normale (dite nominale)... pour ensuite modifier cette vitesse, ce qui revient à en compresser ou en dilater le temps ... et la hauteur (fréquence) de l'enregistrement change avec elle.

Comprimer le temps (donc jouer le morceau plus vite) augmente la hauteur du son (il est plus aigu), tandis que dilater le temps (jouer plus lentement) diminue la hauteur hauteur du son (il est plus grave).

La fréquence (hauteur du son... aigu/grave) est inversement proportionnelle à la longueur d'onde (temps que met l'onde a voyager).

Quand le temps augmente... le son devient plus grave (la fréquence diminue).

Quand le temps diminue... le son devient plus aigu (la fréquence augmente).

IMAGE

C'est facile avec des enregistrements ... mais avec le son en temps réel, nous n'avons pas réellement ce luxe. Le temps réel est le temps réel ... Nous ne pouvons ni le compresser, ni le dilater ... Il est ce qu'il est. Qu'est-ce qu'un voice-changer peut faire ?

Il s'agit d'une technique complexe appelée Transformée de Fourrier qui transforme une fonction (ou, disons un flux sonore) dans son spectre de fréquences. La valeur de la fréquence résultante peut-être altérée et une Transformée inverse appliquée pour rendre un nouveau son. Ceci est purement mathématique ... mais c'est un processus très exigeant et sollicite notre petit Arduino bien au-delà de ses possibilités. Un puissant processeur (CPU) ou un DSP est habituellement requis. Nous aurons donc besoin d'un raccourci ou d'une astuce...

Dans le domaine de la musique numérique, la synthèse granulaire est une technique d'assemblage et une superposition de nombreux très courts extraits audios (échantillons ou « grains ») --de l'ordre de un à quelques millisecondes-- pour construire des sons ou instruments plus complexes. Maintenant, imaginez un simple « grain » de dix millisecondes ou plus ... et nous continuons à rafraîchir ce sample d'un microphone en direct. Par temps-compression ou étirement de cette boucle minuscule, en répétant ou enlevant de courts segments permet de rester en temps réel. Nous avons la base pour un « pitch shifter » en temps réel. Cela semble ne pas vraiment fonctionner ... mais cela le fait ! En reproduisant ces signaux très rapidement, nous ne pouvons pas laisser tomber ou répéter certains de ces échantillons sans dégradation mineure de lisibilité.

IMAGE

Cette approche est bien adaptée à la puissance de traitement limitée et du peu de RAM de l'Arduino. La qualité du résultat ne sera pas hollywoodienne, mais il sera quand même mieux que la voix des jouets et des masques de magasin. Et vous le réalisez vous-même ... Ce n'est pas super ça ?

Echantillonage Audio

La plage de fréquences de la voix humaine s'étend sur environ 300 Hz à 3.500 Hz (les harmoniques peuvent s'étendre au-delà). Le théorème d'échantillonnage de Nyquist ***LIEN*** (http://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem) stipule que la fréquence d'échantillonnage de deux fois minimum est nécessaire pour reconstruire un signal fidèle. Pour la voix humaine cela signifie un échantillonnage à 7 kHz ... mais un peu plus ne peut nuire.

En appelant de façon répétitive la fonction standard analogRead() de l'Arduino dans une boucle est beaucoup, beaucoup trop lente pour cela. Nous avons besoin de chercher plus profondément dans les possibilités du système convertisseur analogique-numérique de l'Arduino, en utilisant directement les modes et les registres spéciaux. Une possibilité appelée « mode free-run » collecte des échantillons analogiques plus rapidement à intervalle fixe sans interrogation répétée dans notre code. Le gestionnaire d'interruption est automatiquement appelé chaque fois qu'un échantillon est prêt, sans attendre. En fonctionnant à fréquence maximum, un Arduino à 16 MHz permet la capture de 9.615 échantillons de 10 bits par seconde C'est plus que suffisant pour échantillonner la voix !

Les échantillons audio sont stockés dans un tampon circulaire, Cette réflexion en informatique qui dit que « lorsque vous atteignez la fin du tampon, retourner au début et écrire à nouveau (écraser le contenu) ». Mais, conceptuellement, cela aide d'imaginer le tampon comme un cercle sans fin :

IMAGE

La fréquence du son enregistré correspondra rarement à la longueur du tampon, et les échantillons audio sont stockés et lus à des vitesses différentes. Cela peut produire une nette discontinuité -un bruit sec- à chaque fois que l'entrée et la sortie se croisent. Un petit tampon supplémentaire est utilisé pour stocker les premiers échantillons et le code des fondu-enchaînés sur cette limite pour réduire le « pop ».

Parce que notre « grain » audio est relativement court (environ 10 millisecondes), Le besoin en RAM devrait être modéré, quelques centaines de bytes. Le problème est : nous aimerions aussi faire autre chose avec le Wave Shield il a été conçu pour --à savoir, lire les fichiers WAV. Cela nécessite la lecture de fichiers d'une carte SD, qui elle consomme beaucoup de mémoire vive. Heureusement, la bibliothèque de lecture des fichiers WAV nous permet d'avoir accès à son code et de la réutiliser pour nos besoins.

Les détails techniques sont bien commentés dans le code source. Donc, si vous êtes curieux de connaître les détails de mise en œuvre ... utilisez le source, bonne chance !

Limitations

Au début, les nouveaux utilisateurs d'Arduino, le décrivent souvent comme « l'ordinateur juste suffisant pour effectuer une seule chose et bien ».

>>> Walking while chewing gum is a challenge???<<<,

Gardez les limitations suivantes à l'esprit :

  • il peut traiter l'effet vocal ou jouer des WAVs (et peut faire les deux avec le même sketch), mais il ne peut pas le faire simultanément.
  • Vous ne pouvez pas lire d'autres entrées analogiques lorsque l'effet de voix est en fonction (cas concret, vous ne pouvez pas faire varier la fréquence en continu avec le potentiomètre). Si vous utilisez des capteurs analogiques comme déclencheurs (par ex. Des capteurs de force résistifs dans des chaussures), envisagez des solutions de contournement comme l'utilisation d'un diviseur de tension, soigneusement calculé, sur une entrée digitale, ou un deuxième microcontrôleur (MCU) pour traiter les entrées analogiques, déclenchant la suite au travers une liaison série ou une connexion I2C.

Source: Wave Shield Voice Changer. Crédit: Adafruit Industries

Réalisé avec l'aide de Mr Carette J. à qui nous remettons tous nos remerciements.

Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.