samedi 31 août 2013

Une méthode ultra-simple (et parfois efficace) pour se débarrasser du chanteur

Un article publié il y a quelques jours sur le site web du MAKE magazine a attiré mon attention: "Sing-a-long Song Devocalizer" par Jeffrey M. Goller et Nathan Goller-Deitsch.  On y explique comment construire un petit dispositif permettant d'atténuer (et parfois même d'éliminer) la voix du chanteur sur une pièce musicale enregistrée en stéréophonie.

J'avais d'abord supposé qu'il s'agissait d'un quelconque filtre mais j'étais dans l'erreur:   le dispositif qu'ils proposent est beaucoup plus simple: si la masse (GND) de votre casque d'écoute n'est pas reliée à celle de la source sonore (un lecteur mp3, par exemple), un phénomène d'interférence destructive entraîne l'élimination des sons qui ont été enregistrés de façon identique dans les deux canaux (droite et gauche). Puisque le chanteur soliste et la basse sont souvent mixés de façon égale dans les deux canaux (pour que l'auditeur ait l'impression qu'ils se trouvent au centre de l'orchestre), on ne les entend plus, ou presque. Quant aux instruments qui ont été mixés de façon asymétrique (plus intenses à gauche ou à droite), ils demeurent audibles.

Le montage proposé par MAKE magazine comporte deux interrupteurs qui permettent de sélectionner 4 options possibles:  son stéréophonique normal, élimination du vocaliste, canal gauche seulement ou canal droit seulement.  Ce circuit complet est déjà d'une grande simplicité, mais si vous désirez simplement tester l'effet d'élimination du vocaliste (à mon avis beaucoup plus spectaculaire que la simple isolation du canal gauche ou du canal droit), vous pouvez vous contenter d'un circuit encore plus simple:  votre lecteur mp3 est branché dans un jack audio femelle, vos écouteurs sont branchés dans un deuxième jack audio femelle.  Vous reliez ensemble les deux pointes (tips) et les deux anneaux (rings) des jacks, mais vous ne reliez pas leurs manchons (sleeves).



Plus simple encore:  avant d'insérer la prise mâle de vos écouteurs dans son orifice habituel,  vous recouvrez son manchon (sleeve) au moyen d'un mince ruban adhésif isolant.  C'est un peu à l'étroit, mais ça fonctionne!


Le résultat varie en fonction de l'enregistrement choisi.  Dans la plupart des cas, le chanteur soliste et la basse sont fortement atténués.    Dans Bohémian Rhapsody de Queen, on n'entend pas Freddy Mercury quand il chante en solo, mais on entend très bien le piano.  Dans Money de Pink Floyd, on entend un tout petit peu le chanteur, mais on est surtout surpris de ne pas entendre la bass et sa mélodie caractéristique.  Dans Purple Haze, Jimi Hendrix chante pratiquement a capella, les guitares étant presque inaudibles.  

Yves Pelletier (Twitter:  @ElectroAmateur)

vendredi 30 août 2013

Data logging avec Carriots (Arduino et shield Ethernet)

Dans ma précédente rubrique, j'avais exploré les possibilités de Carriots pour la mise au point d'une alerte: Carriots vous envoyait un email , un texto ou un tweet lorsque votre Arduino mesurait un paramètre dont la valeur indiquait une situation anormale.

Je vais maintenant utiliser Carriots pour faire du data logging:  l'Arduino, muni de son shield ethernet, va envoyer des mesures au serveur de Carriots à intervalles réguliers, de façon à ce qu'elles y soient enregistrées.  Ces données seront ensuite accessibles à partir de n'importe quel ordinateur branché à internet (à condition d'avoir les autorisations d'accès nécessaires, bien entendu).

Marche à suivre:

1)  Ouvrir un compte gratuit chez Carriots.

2)  Accéder au "control panel" de Carriots et prendre en note votre "Full Privileges APIkey" (en passant par My Settings / My Account).  Vous aurez besoin de cet identifiant dans le sketch de l'Arduino.

3)  Noter également le nom de l'appareil (device developer ID).  Vous avez droit de brancher jusqu'à 10 appareils gratuitement sur Carriots.  Si vous utilisez l'appareil qui a été créé par défaut lors de votre inscription,  cet ID sera de la forme  "defaultDevice@votre_nom_d'utilisateur".

4)  Le montage est constitué d'un Arduino muni de son shield Ethernet, auquel j'ai ajouté trois potentiomètres branchés aux entrées A0, A1 et A2, afin de simuler des capteurs analogiques.  Le shield ethernet est évidemment branché à internet, par l'entremise d'un câble ethernet.

5)  Le sketch ci-dessous envoie à Carriots trois mesures (prises par des capteurs analogiques branchés aux entrées A0, A1 et A2) toutes les 30 secondes.  Je crois qu'il sera facile de modifier ce sketch pour qu'il réponde à vos besoins spécifiques (en modifiant, par exemple, le délai entre les différentes prises de mesures).




Le moniteur série vous permettra de vérifier si le transfert de données s'effectue correctement (30 secondes après le démarrage du sketch, si vous n'y avez rien changé).  Vous pouvez également consulter les données envoyées en allant dans la section "Data Streams" du control panel de Carriots (il faut rafraîchir la page pour voir les données s'ajouter).


Pour afficher les données sous forme de graphique, Carriots met à notre disposition un Wizard Widget Graphs (dans la section Publish Data).  Cet outil construit pour vous un bout de script que vous pouvez ensuite coller dans une page web (j'ai utilisé le logiciel KompoZer).  Voici le résultat obtenu avec mes données:


Ça fonctionne très bien.  Par contre il serait utile de pouvoir visionner les graphique en cliquant un simple bouton directement sur le control panel de Carriots, sans qu'il nous soit nécessaire de créer une page web.

Qu'arrive-t-il si vous voulez récupérer vos données brutes afin, par exemple, de les traiter dans Excel?  Ici ça se complique un peu.  Comme je l'ai déjà mentionné, vous pouvez toujours aller les lire dans la section "Data Streams" du control panel de Carriots, mais ce n'est pas très pratique (surtout si vous avez une grande quantité de données à traiter).

Une autre option consiste à utiliser la commande "LIST" de l'API de Carriots.  Pour ce faire, je suis allé sur la page "hurl.it" et j'y ai entré les informations suivantes:


J'ai obtenu en retour la totalité de mes données enregistrée sous la forme suivante:

    {
      "_id": "5218a0467c5d75dd148b5478",
      "_t": "str",
      "at": 1377345608,
      "device": "DataLogger@xyz",
      "protocol": "v2",
      "data": {
        "valeur2": "271",
        "valeur3": "1023",
        "valeur1": "0"
      },
      "id_developer": "blablabla",
      "created_at": 1377345607,
      "owner": "xyz"
    },

À première vue, ça ne semble pas trop compliqué de faire un script en Python qui extraira les données pertinentes, mais ce serait quand même pratique d'avoir un bouton dans le control panel qui nous permettrait d'extraire les données rapidement sous la forme d'un fichier Excel.

Même difficulté pour effacer nos données:  on peut les effacer une par une avec hurl.it. mais je n'ai pas trouvé de bouton dans le control panel de Carriots qui nous permettrait d'effacer facilement des données indésirables ou de tout effacer pour repartir à zéro.  Ce serait bien utile!

Addendum:

Les gens de chez Carriots m'informent qu'un outil permettant d'exporter les données vers Excel sera bientôt disponible. :-)

Yves Pelletier (Twitter: @ElectroAmateur)

vendredi 16 août 2013

Envoyer des données à carriots.com avec un Arduino (et un shield Ethernet)

Note:  Si vous préférez utiliser un module WiFi ESP8266 plutôt qu'un shield Ethernet, voir cet autre article.

Carriots est une compagnie spécialisée dans l'internet des objets ("internet of things" ou IoT). Tout comme Xively (anciennement Pachube), vous pouvez y envoyer des données émises par un Arduino ou un Raspberry Pi.  Vous pouvez ensuite accéder à vos données sur internet, même si vous êtes très éloigné de l'Arduino.  Le service est totalement gratuit pour vos 10 premiers appareils.

Dans cet article, je présente une adaptation d'un tutoriel présenté sur le site web de Carriots.   dans ce tutoriel, l'Arduino agit comme un système d'alarme:  il est muni d'une photorésistance et, si quelqu'un allume la lumière dans la pièce où se trouve l'Arduino, un email est envoyé au propriétaire pour l'aviser de la présence d'un intrus.

Pour me familiariser avec Carriot, j'ai apporté quelques modifications à ce projet:  tout d'abord, j'ai utilisé un potentiomètre à la place d'une photorésistance, car c'est plus simple de varier sa résistance à la valeur désirée (mon but pour l'instant est d'expérimenter, et non de produire immédiatement un dispositif qui sert véritablement à quelque chose).

Ce potentiomètre permet d'allumer ou d'éteindre une LED.  Chaque fois que l'état de la LED change (lorsqu'elle s'allume ou lorsqu'elle s'éteint), deux informations sont envoyées à Carriots:  la valeur du potentiomètre (entre 0 et 1053) et l'état de la LED ("ON" ou "OFF") (le sketch proposé par carriots n'envoyait qu'une seule donnée).

J'ai profité de la possibilité de régler automatiquement l'adresse IP du shield ethernet au moyen du protocole DHCP (disponible depuis la version 1.0 de l'IDE, je crois):  donc pas besoin de choisir soi-même une adresse IP à inscrire dans le sketch.

Finalement, dans le sketch d'origine toutes les données apparaissaient sur Carriots comme si elles avaient été enregistrées le 24 décembre 2012 à 18h00:  dans mon sketch elle s'affichent à l'heure correcte.

Marche à suivre:

1)  Ouvrir un compte chez Carriots.  Comme je l'ai déjà mentionné, c'est gratuit.

2)  Dans le "control panel" de Carriots, cliquer sur le bouton "SETTINGS", puis "Apikeys". et prendre en note votre "Automatic apikey default".  Cet interminable code formé de 64 caractères sera nécessaire dans votre sketch.

3)  Allez ensuite dans la section "Devices" et notez le nom de l'appareil (device developer ID).  Vous avez droit de brancher jusqu'à 10 appareils gratuitement sur Carriots.  Si vous utilisez l'appareil qui a été créé par défaut lors de votre inscription,  cet ID sera de la forme  "defaultDevice@votre_nom_d'utilisateur".

4)  Vous avez besoin d'un Arduino muni d'un shield Ethernet.  Pour ma part, j'ai utilisé un shield Ethernet chinois bon marché acheté sur eBay, et un Duemilanove chinois bon marché acheté sur eBay.  Le seul inconvénient, c'est que je suis obligé d'alimenter mon Arduino avec une alimentation externe aussitôt que je lui ajoute le shield Ethernet, sinon ça tire trop de courant du port USB et mon PC annule la connexion (à ma connaissance, je suis propriétaire du seul shield Ethernet au monde qui agit de cette façon).

5)  Ne pas oublier de brancher votre shield ethernet à un routeur au moyen d'un câble ethernet (je le précise, parce que ça m'est déjà arrivé d'oublier ce détail...).

6)  Le circuit d'essai n'a rien de compliqué:  un potentiomètre dont le curseur est branché à A3, et une LED (avec résistance de 150 Ω ou un peu plus) branchée à la sortie numérique 7.

7)  Voici mon sketch.  Avant de l'uploader dans l'Arduino, n'oubliez pas d'inscrire aux endroits appropriés votre APIKey et l'ID de votre appareil.  Vous pouvez également modifier l'adresse MAC si votre shield ethernet dispose d'une étiquette qui la mentionne.



8)  Ouvrez le moniteur série, tournez le potentiomètre de façon à allumer et éteindre la LED à quelques reprises.  Si le moniteur série affiche une erreur, je suis vraiment désolé pour vous.

9)  Vous pouvez accéder aux données acheminées à Carriots en cliquant sur le lien "Data streams" dans le control panel (une ligne pour chaque fois que vous avez allumé ou éteint la LED).

10)  Vous pouvez également cérer sur Carriots un "listener" qui se chargera de vous envoyer un email, un texto ou un tweet chaque fois que la LED changera d'état:  vous cliquez sur Wizard Create Listener et suivez les indications.

Dans une prochaine rubrique, je prévois faire un exemple de datalogging en explorant les possibilités d'accéder aux données sous forme de graphique.

Yves Pelletier (Twitter: @ElectroAmateur)