Modifications

Sauter à la navigation Sauter à la recherche
392 octets ajoutés ,  19 janvier 2013 à 17:30
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.
 +
 
 +
Conceptuellement, il est facile d'imaginer une telle mémoire tampon comme un cercle sans fin :
 +
 
 +
[[Fichier:VOICE-CHANGER-Circle.png]]
    
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 ».
 
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 ».
Ligne 60 : Ligne 64 :  
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.
 
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 !  
+
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 ==
 
== Limitations ==
29 917

modifications

Menu de navigation