ADF Voice Changer Principe

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche


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. Si vous voulez seulement assembler le circuit, vous pouvez passer directement à la page suivante.


Les grains audios...

{{bloc-etroit

 |text=Peu importe si vous êtes assez âgé pour avoir pu jouer avec la platine à disque vinyle de papa, ou plus jeune pour avoir « échantillonner » (sampler issus de l'anglais) des morceaux musicaux en fichiers audio numériques grâce a votre PC moderne, vous avez probablement connu le phénomène suivant:
Prendre un enregistrement audio lu à vitesse normale (dite nominale)... pour ensuite modifier cette vitesse, ce qui revient à en compresser ou en dilater le temps... et la hauteur (en 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 à voyager... le morceau a jouer).

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).

VOICE-CHANGER-HOWTO-Compress.png

C'est facile à réaliser avec des enregistrements... mais avec le son en temps réel c'est plus compliquer car nous n'avons pas le luxe d'enregistrer puis de modifier le son avec un programme comme Audacity (par exemple).

Modifier le son (ou la voix) en temps réel c'est le faire en temps réel... Nous ne pouvons ni le compresser, ni le dilater... Il est ce qu'il est. Que peux donc donc faire un "Voice changer" ?

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 (1*). La valeur de la fréquence résultante peut-être altérée (par un programme) et une transformée inverse utilisé pour re-transformer les valeurs fréquences en 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...

1*: La transformée de fourrier transforme un son en une série de valeur numériques indiquant le niveau (l'importance) de chaque fréquence élémentaire qui compose ce son. C'est un peu comme écouter un morceau de symphonie et de pouvoir identifier instantanément toutes les notes jouées par chaque instrument... au fur et a mesure... et les coucher sur des partitions. Un travail colossale!

Dans le domaine de la musique numérique, la synthèse granulaire est une technique d'assemblage et une superposition de nombreux extraits audio très courts (échantillons ou « grains ») -- de l'ordre de un à quelques millisecondes. Cette assemblage permet de construire des sons ou instruments plus complexes.

Maintenant, imaginez un simple échantillon appelé « grain » de dix millisecondes ou plus ... que nous continuons à rafraîchir constamment et directement depuis un microphone, nous obtenons une minuscule "boucle" d'échantillonnage. Par compression ou étirement du temps de cette minuscule boucle, en répétant ou enlevant de courts segments, il est possible de rester dans un traitement du son en temps réel.

Nous avons là une base pour un « pitch shifter » (modificateur de tonalité de voix) en temps réel. Si cela peu sembler aberrant et non fonctionnel, soyez assuré que cela fonctionne... et ca le fait!

La parole (et donc les sons qui la compose) est composée de formes d'ondes très courtes qui tendent à se répètent sur de très courtes périodes. 'xxxx' qui se répète Speech waveforms tend to repeat over the very short term, and we can drop or repeat some of those waves with only minor degradation in legibility.

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.