À l’aide de boutons et capteurs pour faire de la musique avec l’Edison Intel (8 / 9 étapes)

Étape 8: Fatigué de faire de la chute de battre ? Nous allons ajouter d’autres capteurs et sons.

La joie de faire un tambour bass le coup d’une presse de bouton physique s’estompe assez rapidement, nous allons donc faire un peu plus intéressant. Nous pouvons utiliser Cylon s’interfacer avec une énorme quantité de différents capteurs et dispositifs. Jusqu'à présent, nous avons collé à l’aide d’un événement de pousser le bouton unique pour lancer le tambour. Maintenant, nous allons à refactoriser notre code app.js pour la rendre un peu plus facile d’ajouter plus de boutons, ainsi que d’ajouter certains capteurs analogiques.

Avant d’apporter des modifications au code, nous allons ajouter quelques dispositifs plus de travailler avec.

Pour cela instructable, j’ai choisi d’associer un total de 4 boutons, un potentiomètre et une cellule photoélectrique. Cela nous permettra de contrôler plusieurs paramètres d’instruments de Timbre.js avec un large éventail de valeurs, au lieu de simplement les valeurs ON/OFF de nos boutons.

Maintenant, nous allons Refactoriser notre code pour prendre en charge davantage de périphériques. Nous voulons être en mesure de permettre à notre client pour écouter les touches spécifiques et des lectures de capteurs spécifiques, au lieu d’utiliser un événement générique "bouton". Nous allons envoyer deux événements différents, « bouton » et « capteur », avec une valeur de hachage qui contient un id de notre dispositif, ainsi que la valeur que nous voulons envoyer. Pour les boutons, nous attendrons un 0 ou un 1 et pour capteurs analogiques, nous tout ce qui attendra la valeur qu'est la lecture de la sonde. Apportez les modifications suivantes à votre fichier « app.js ».

 var express = require('express')
 var app = express() var server = require('http').Server(app) var cylon = require('cylon') var io = require('socket.io')(server) app.use(express.static(__dirname + '/public')) server.listen(8080) var socket = io .of('/soundsocket') .on('connection', function (socket) { console.log('client connected') }) var cylonReady = function(my) { io .of('/soundsocket') .on('connection', function (socket) { registerSocketHandlers(my, socket); }) } // this will be called each time a socket is opened, so each client will receive their own events when buttons are pushed. var registerSocketHandlers = function(my, socket) { buttons = [my.button0, my.button1, my.button2, my.button3] for (var i = 0; i < buttons.length; i++) { var button = buttons[i]; registerButtonHandler(socket, button, i); } analogSensors = [my.potentiometer, my.photocell] for (var i = 0; i < analogSensors.length; i++) { var sensor = analogSensors[i]; registerAnalogSensorHandler(socket, sensor, i); } } // convenience for button specific events var registerButtonHandler = function(socket, button, buttonID) { // on push, send button ID and value of 1 button.on('push', function() { socket.emit('button', { 'id': buttonID, 'value': 1 }) }) // on push, send button ID and value of 0 button.on('release', function() { socket.emit('button', { 'id': buttonID, 'value': 0 }) }) } // convenience for listening to analog read events and emitting sensor data messages var registerAnalogSensorHandler = function(socket, analogSensor, analogSensorID) { // on new data, send sensor ID and value of sensor reading analogSensor.on('analogRead', function() { // ask the sensor for it's value sensorValue = analogSensor.analogRead() socket.emit('sensor', { 'id': analogSensorID, 'value': sensorValue }) }) } // tell Cylon which devices we will be interfacing with var getDevices = function() { return { button0: { driver: 'button', pin: 2 }, button1: { driver: 'button', pin: 3 }, button2: { driver: 'button', pin: 4 }, button3: { driver: 'button', pin: 5 }, potentiometer: { driver: 'analogSensor', pin: 0, lowerLimit: 100, upperLimit: 900 }, photocell: { driver: 'analogSensor', pin: 1, lowerLimit: 100, upperLimit: 900 } } } // tell Cylon how we will be connecting to our devices var getConnections = function() { return { edison: { adaptor: 'intel-iot' } } } cylon.robot({ connections: getConnections(), // use our getConnections function to clean this up. devices: getDevices() // use our getDevices function to clean this up. }).on('ready', cylonReady) cylon.start() 

Remarque : Assurez-vous que vos capteurs analogiques sont connectés aux ports Analogiques dans de votre Edison.


Afin de consommer ces changements dans notre client, apportez les modifications suivantes afin que votre "playsounds.js" reflète le code suivant :

 var BD var SD var HH1 var HH2 var CYM var drum var lead var env var arp var delay var inv T("audio").load("./drumkit.wav", function() { BD = this.slice( 0, 500).set({bang:false}) SD = this.slice( 500, 1000).set({bang:false}) HH1 = this.slice(1000, 1500).set({bang:false, mul:0.2}) HH2 = this.slice(1500, 2000).set({bang:false, mul:0.2}) CYM = this.slice(2000).set({bang:false, mul:0.2}) var scale = new sc.Scale([0,1,3,7,8], 12, "Pelog") var P1 = [ [BD, HH1], [HH1], [HH2], [], [BD, SD, HH1], [HH1], [HH2], [SD], ].wrapExtend(128) var P2 = sc.series(16) drum = T("lowshelf", {freq:110, gain:8, mul:0.6}, BD, SD, HH1, HH2, CYM).play() lead = T("saw", {freq:T("param")}) env = T("perc", {r:100}) arp = T("OscGen", {wave:"sin(15)", env:env, mul:0.5}) delay = T("delay", {time:"BPM128 L4", fb:0.65, mix:0.35}, T("pan", {pos:T("tri", {freq:"BPM64 L1", mul:0.8}).kr()}, arp) ).play(); inv = T("interval", {interval:"BPM128 L16"}, function(count) { var i = count % P1.length if (i === 0) CYM.bang() P1[i].forEach(function(p) { p.bang() }) if (Math.random() < 0.015) { var j = (Math.random() * P1.length)|0; P1.wrapSwap(i, j); P2.wrapSwap(i, j); } var noteNum = scale.wrapAt(P2.wrapAt(count)) + 60; if (i % 2 === 0) { lead.freq.linTo(noteNum.midicps() * 2, "100ms"); } arp.noteOn(noteNum + 24, 60) }).start() }) var socketConnection = io.connect('http://0.0.0.0:8080/soundsocket') socketConnection.on('connect', function () { console.log('connected to socket') }) socketConnection.on('button', function (data) { buttonID = data['id'] value = data['value'] switch (buttonID) { case 0: if (value == 1) { BD.bang() } break; case 1: if (value == 1) { CYM.bang() } break; case 2: value == 1 ? HH1.set({mul: 1}) : HH1.set({mul: 0.2}) break; case 3: value == 1 ? HH2.set({mul: 1}) : HH2.set({mul: 0.2}) break; default: } }) socketConnection.on('sensor', function (data) { sensorID = data['id'] value = data['value'] switch (sensorID) { case 0: inv.set({interval: value * 2 }) break; case 1: arp.set({mul: 10 / value }) break; default: } }) 

Commettre et poussez vos modifications, tirez-les vers le bas pour l' Edisonet exécuter votre application. Si tout fonctionne comme prévu, vous devriez être en mesure d’utiliser les touches pour frapper des instruments spécifiques et être capable de modifier le délai et Remarque décale à l’aide de vos capteurs analogiques.

Cela vous donne un exemple de la façon de consommer des différents types de données et chaque jeu ou modifier les paramètres des instruments au sein de la Timbre.js.

Articles Liés

LE BÂTON | Un moyen interactif pour faire de la musique.

LE BÂTON | Un moyen interactif pour faire de la musique.

Regardez la vidéo pour la voir en action ! Vous pouvez le voir que j'ai utilisé une plante pour faire des sons différents et aussi un verre d'eau pour faire de nouveaux sons !Etape 1: Coller | Un moyen interactif pour faire de la musique.Premier proj
À l’aide d’un cutter Silhouette pour faire un slogan t-shirt

À l’aide d’un cutter Silhouette pour faire un slogan t-shirt

Il s'agit d'un processus par étapes simple pour l'aide d'un cutter Silhouette pour faire un slogan de la seule couleur t-shirt.Étape 1: Recueillir vos matériaux Vous aurez besoin...Un t-shirt blanc (préférence neuf) *Tee-shirt en vinyle - couleur de
Traîneau pour faire un vrai avantage avec une scie à Table

Traîneau pour faire un vrai avantage avec une scie à Table

même si votre bois de charpente a été rabotée pour un vrai avantage, les changements au fil du temps peuvent signifier il n'est plus vrai. Je veux montrer un appareil pour faire un vrai avantage avec une table a vu c'est un peu différente de la métho
Faire de la musique avec vos ondes cérébrales en temps réel.

Faire de la musique avec vos ondes cérébrales en temps réel.

Vidéo de la musique des ondes cérébrales :MindMIDI est une façon révolutionnaire de faire de la musique, avec vos ondes cérébrales, en temps réel. Ondes cérébrales sont comme des stations de radio, avec chaque station de travail sur un autre calque,
À l’aide de bouts de papier pour faire rapide et facile en relief des cartes

À l’aide de bouts de papier pour faire rapide et facile en relief des cartes

En plus des instructions de la photo ci-dessous, j'ai également téléchargé une vidéo ci-dessus pour ceux d'entre vous qui préfèrent des vidéos et tutoriels photo.J'adore le papier et j'aime faire des cartes. Lorsque vous mettez les deux de ces ensemb
Faire de la musique avec un Atari Punk Console

Faire de la musique avec un Atari Punk Console

certains anciens circuits analogiques sont aussi populaires aujourd'hui que lorsqu'ils ont été introduits il y a des décennies. Souvent, ils ont facilement battu micros et autres solutions de circuit numérique en termes de simplicité fondamentale. Fo
Faire de la musique avec Makeblock

Faire de la musique avec Makeblock

Makeblock est un système de construction en aluminium extrusion basée qui fournit une solution intégrée pour les aspects de la conception mécanique, électronique et logiciel. Avec Makeblock vous pouvez faire des robots professionnels, machines de jou
À l’aide de Adhesive-Backed carrelage pour faire imprimer & Play BoardGames

À l’aide de Adhesive-Backed carrelage pour faire imprimer & Play BoardGames

comme un habitué (obsessor?) de www.boardgamegeek.com et un radin notoire, j'aime imprimer et jouer des jeux de société.  Le meilleur endroit pour commencer est de FNH1 Print et Podcast de jouer à http://printandplay.blogspot.com/FNH évoqué cette idé
À l’aide d’un pi framboise pour contrôler un WF32 avec LabVIEW (contrôle du ventilateur)

À l’aide d’un pi framboise pour contrôler un WF32 avec LabVIEW (contrôle du ventilateur)

Ce Instructable prend un projet de mon dernier Instructable (thermistance - commande du ventilateur à l'aide de LabVIEW) et ajoute dans l'utilisation d'un pi framboise 3 pour contrôle sans fil de la WF32. Cela signifie que vous pouvez maintenant conf
Faire de la musique avec votre imprimante 3d

Faire de la musique avec votre imprimante 3d

Je trouve des utilisations de plus en plus de l'imprimante 3D, et je tiens à partager avec le monde. Il s'agit d'un rapide petit comment obtenir votre imprimante 3D à jouer de la musique. Avec en prime une peu je vous montrer comment l'ajouter à la f
Faire de la musique genre de goût agréable avec un capteur de mouvement de bande X

Faire de la musique genre de goût agréable avec un capteur de mouvement de bande X

Faire de la musique avec un radar en bande X, hmmm... qui ne serait plus amusant qu'une personne devrait pouvoir avoir ? Il n'est pas difficile de nos jours, avec les bons outils bien sûr. Comme vous pouvez le voir dans l'image qui accompagne cette i
Comment pour faire le Super Manx Paper Airplane

Comment pour faire le Super Manx Paper Airplane

repensé pour mieux répondre aux besoins des aviateurs battant le Manx, le Super Manx est une augmentation de l'original avec des modifications mineures. Afin de rendre les choses encore plus facile, j'ai conçu cet avion pour être compatible avec le M
Comment faire pour faire Fortune Cookies

Comment faire pour faire Fortune Cookies

quand je sors manger dans un restaurant chinois, une des choses que j'attends avec impatience est le cookie de fortune à la fin du repas. Souvent la fortune cachée à l'intérieur est significative, mais elles sont parfois carrément drôle lorsqu'il est
Comment faire un broyeur à billes avec lego et un tuyau en pvc--inclut le fichier de conception numérique

Comment faire un broyeur à billes avec lego et un tuyau en pvc--inclut le fichier de conception numérique

Bonjour et Bienvenue sur mon Instructable sur comment faire un broyeur à billes à l'aide de lego et tuyau en PVC.Cet instant instructable inclut une conception numérique 3D et 3D manuel de comment faire ce broyeur à boulets.la version Html du guide e