Modifications

Sauter à la navigation Sauter à la recherche
956 octets ajoutés ,  25 août 2013 à 18:27
aucun résumé de modification
Ligne 20 : Ligne 20 :  
Quand le temps diminue... le son devient plus aigu (la fréquence augmente).
 
Quand le temps diminue... le son devient plus aigu (la fréquence augmente).
   −
[[Fichier:VOICE-CHANGER-HOWTO-Compress.png]]
+
{{ADFImage|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).
 
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).
Ligne 40 : Ligne 40 :  
La parole est composée de sons, ces sons étant eux mêmes composés de formes d'ondes très courtes qui tendent à se répéter sur de très courtes périodes. Nous pouvons donc éliminer ou répéter certain de ces segments d'onde en préservant la qualité audible du son (il y a uniquement une dégradation mineur de la qualité de rendu audio).
 
La parole est composée de sons, ces sons étant eux mêmes composés de formes d'ondes très courtes qui tendent à se répéter sur de très courtes périodes. Nous pouvons donc éliminer ou répéter certain de ces segments d'onde en préservant la qualité audible du son (il y a uniquement une dégradation mineur de la qualité de rendu audio).
   −
[[Fichier:VOICE-CHANGER-HOWTO-Repeat.png]]
+
{{ADFImage|VOICE-CHANGER-HOWTO-Repeat.png}}
    
En conclusion: nous pouvons laisser tomber ou répéter certains des segments dans notre boucle d'échantillonnage tout en préservant le côté audible (compréhensible) de l'élément sonore d'origine.
 
En conclusion: nous pouvons laisser tomber ou répéter certains des segments dans notre boucle d'échantillonnage tout en préservant le côté audible (compréhensible) de l'élément sonore d'origine.
Ligne 48 : Ligne 48 :  
== Echantillonage Audio ==
 
== 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.
+
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 [http://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem théorème d'échantillonnage de Nyquist] (''anglais'') stipule que pour reconstituer un signal fidèle, la fréquence d'échantillonnage doit être au moins 2 fois plus élevée que la fréquence du signal à échantillonner. Pour la voix humaine cela signifie un échantillonnage à 7 kHz au minimum (soit 2 x 3.5 KHz)... bien que un peu plus ne pourra que donner un meilleur résultat.
   −
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 !
+
La fonction standard analogRead() d'Arduino est beaucoup.. beaucoup trop lente pour faire un appel répétitive dans une boucle. Nous avons besoin de chercher plus profondément dans les entrailles du système de conversion analogique-numérique d'Arduino. En utilisant directement des modes et les registres spéciaux, nous pourrons faire un échantillonnage correct.  
   −
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 :
+
Une possibilité appelée « mode free-run » collecte des échantillons analogiques à intervalle régulier (et rapidement) sans faire d'appel répété dans notre propre programme/code. Une fonction de gestion d'interruption (''interrupt handler'' en anglais) est automatiquement appelée chaque fois qu'un nouvel échantillon est prêt. Ca fonctionne comme sur des roulettes :-) . Dans les meilleures conditions, un Arduino à 16 MHz permet de capturer 9.615 échantillons (de 10 bits) par seconde (9.6 KHz), c'est plus que suffisant pour échantillonner la voix !
   −
[[IMAGE]]
+
Les échantillons audio sont stockés dans une mémoire tampon circulaire, c'est une structure informatique où  "lorsque vous atteignez la fin de la mémoire tampon" alors "le programme recommence au début de la mémoire tampon" pour stocker les données suivante. Les données sont donc "écrasée" continuellement.
   −
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 ».
+
Conceptuellement, il est facile d'imaginer une telle mémoire tampon comme un cercle sans fin :
   −
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.
+
{{ADFImage|VOICE-CHANGER-Circle.png}}
   −
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 !
+
La fréquence du son enregistré correspondra rarement à la longueur du tampon. Cependant, les échantillons audio sont stockés et lus à des vitesses différentes. Cela peut produire une discontinuité notable -un bruit sec- à chaque fois que l'entrée et la sortie se croisent. Une petite mémoire tampon supplémentaire est utilisée pour stocker les premiers échantillons et le code effectue des fondu-enchaînés en passant d'un tampon à l'autre pour réduire les « craquements ».
 +
 
 +
Parce que notre « grain » audio est relativement court (environ 10 millisecondes), le besoin en mémoire RAM devrait être modéré (quelques centaines d'octets/bytes).
 +
 
 +
Le problème c'est que nous aimerions aussi utiliser le Wave Shield pour faire ce pourquoi il a été conçu - la lecture de fichiers WAV. La lecture se fait depuis une carte carte SD et cette opération consomme vraiment beaucoup de mémoire. Heureusement, la bibliothèque de lecture des fichiers WAV est bien conçue, ce qui permet d'accéder à la mémoire de la librairie et de l'utiliser pour nos propres 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 à votre disposition.
    
== Limitations ==
 
== 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 ».
+
Lorsque LadyAda présente Arduino à des nouveaux utilisateur, elle le décrit comme "un ordinateur juste assez puissant pour réaliser une des nombreuses choses possible mais de le faire vraiment bien".
   −
>>> Walking while chewing gum is a challenge???<<<,
+
Il faut quand même garder à l'esprit, que même pour l'humain, il est difficile de coordonnées des tâches distinctes pour les réaliser en même temps. Ce que l'on traduirait en anglais par "Walking while chewing gum is a challenge!" (''"c'est un challenge de se promener en chiquant"'' sous entendu marcher à un rythme totalement désynchronisé de la mastication).
 +
 +
Arduino aussi à ses limites
    
Gardez les limitations suivantes à l'esprit :
 
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.
+
* il peut traiter l'effet vocal ou jouer des fichiers 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.
+
* 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 de l'effet de voix à la volée 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.
    
{{Voice-Changer-TRAILER}}
 
{{Voice-Changer-TRAILER}}
29 918

modifications

Menu de navigation