Inhoudsopgave:

Danshandschoen: 9 stappen
Danshandschoen: 9 stappen

Video: Danshandschoen: 9 stappen

Video: Danshandschoen: 9 stappen
Video: Dit ging niet zoals ik had verwacht..😳 2024, November
Anonim
Danshandschoen
Danshandschoen

In deze tutorial zal ik je helpen bij het ontwerpen van een handschoen waarmee je via dans met muziek kunt communiceren. Je bouwt een handschoen met versnellingsmeter, ontwerpt een compositie in Ableton en verbindt de twee op een zo complexe of eenvoudige manier als je wilt!

Benodigdheden

  • Ableton (of gratis proefversie)
  • Een Arduino
  • Startkabels
  • Soldeerbout
  • Karton
  • Heet lijmpistool
  • Veel fantasie

Stap 1: Concept

Dit project is ontworpen om leuk te zijn. Als de manier waarop het voorbeeldproject in deze tutorial werkt niet leuk voor je is, herontwerp het dan!

Ik raad aan om een paar van je favoriete nummers op te zetten, je handen ernaartoe te bewegen en te kijken wat er gebeurt. Beweeg jij je handen op en neer? Naast elkaar? Langzaam of snel? Welke aspecten van muziek zorgen ervoor dat je je handen wilt bewegen? Als je een lijst hiervan hebt opgeschreven, zul je waarschijnlijk een aantal manieren kunnen bedenken om de bewegingen die je leuk vindt op te nemen in je uiteindelijke algoritmen.

Dit zijn de bewegingen die ik heb gebruikt:

  • Een snelle op-en-neer beweging activeert het begin van het nummer, de drums of de bas. (Deze gebeuren op verschillende punten in het nummer, niet noodzakelijk tegelijkertijd!)
  • Een langzame, kantelende zij-aan-zij beweging veroorzaakt een meer echoey, hoog geluid.
  • Bij een bepaald gedeelte van het nummer wordt de muziek zachter door mijn hand omhoog te kantelen - dus ik heb het in mijn gesloten vuist "gevangen".

Gebruik deze of maak er zelf een!

(Let op: deze tutorial behandelt niet hoe je live muziek of melodieën kunt genereren in Ableton! Als je je aan deze instructies houdt, kun je alleen het volume van tracks of de toepassing van audio-effecten verhogen/verlagen.)

Stap 2: Bereid de versnellingsmeter voor

Bereid de versnellingsmeter voor
Bereid de versnellingsmeter voor

Zoek eerst uit welk type versnellingsmeter je hebt. Ik heb deze gebruikt; elke drie-assige versnellingsmeter is voldoende. (Of probeer een ander type sensor als je wild wilt gaan.) Zorg ervoor dat je weet hoe je de versnellingsmetergegevens van de Arduino moet lezen. Mogelijk moet u een bibliotheek voor uw versnellingsmeter downloaden als deze iets complexer dan analoge invoer gebruikt.

Nadat je het hebt getest met een breadboard, soldeer je korte kleurgecodeerde draden in de pinnen van je versnellingsmeter. Steek een rode draad in de stroompen, een zwarte draad in de aardingspen en alle andere noodzakelijke draden voor communicatie van de versnellingsmeter. (Als je een I2C-versnellingsmeter hebt, zijn dit de SCL- en SDA-pinnen. Als je een analoge versnellingsmeter hebt, is er waarschijnlijk één pin voor elk van de x-, y- en z-uitgangen.) Zorg ervoor dat je soldeer stevig is en dat de kralen elkaar niet overlappen tussen aangrenzende pinnen.

Stap 3: Bouw de handschoen

Bouw de handschoen
Bouw de handschoen

Knip een stuk dun karton of dik papier in een rechthoek die iets groter is dan je versnellingsmeter. Lijm de versnellingsmeter op het karton en zorg ervoor dat je lijm op de bodem aanbrengt. Lijm vervolgens de versnellingsmeter met kartonnen achterkant op de achterkant van je handschoen. Naai elke draad losjes aan de pols van de handschoen om de spanning op de versnellingsmeter te verlichten, en dan is je handschoen klaar. Sluit hem aan op langere draden om voldoende ruimte te hebben om je hand te bewegen wanneer hij is aangesloten.

Stap 4: Componeren in Ableton

Nu is het tijd om het nummer te componeren dat je uiteindelijk met de handschoen zult besturen. Ik raad Ableton-loops aan die allemaal goed samen klinken, maar kunnen worden gebruikt om geleidelijk op te bouwen: probeer melodie, akkoorden, bas en percussie. Je kunt je handschoen gebruiken om te bepalen wanneer elke lus wordt afgespeeld of niet.

Als je interessante soorten geluiden kunt bedenken om af en toe in een nummer op te nemen, zoals een raar geluidseffect of een onconventioneel instrument, probeer er dan ook een of twee aan toe te voegen! Je kunt ze koppelen aan minder gebruikelijke handbewegingen om af en toe iets interessants binnen te halen.

Hier is een link naar mijn Arduino-compatibele compositie, voor het geval je er zelf geen wilt schrijven:

(Helaas valt het leren van Ableton niet binnen het bestek van de tutorial. Er zijn echter veel goede instructievideo's en Ableton heeft een gratis proefperiode van 90 dagen! Ik raad deze video aan.)

Stap 5: Begin Firmata te gebruiken

Begin Firmata te gebruiken
Begin Firmata te gebruiken

Om uw Arduino in staat te stellen met Ableton te communiceren, moet u een bibliotheek met de naam Firmata gebruiken. Je moet ook de Connection Kit voor Ableton downloaden.

Klik in Ableton op Packs>Connection Kit>Apparaten in het menu linksboven en dubbelklik vervolgens op het eerste apparaat (Arduino) om het toe te voegen. Zorg ervoor dat je onthoudt aan welke Ableton-track je het apparaat hebt toegevoegd!

Stap 6: Test Firmata

Test Firmata
Test Firmata

Eerst zullen we testen en ervoor zorgen dat uw Arduino communiceert met Ableton. Upload dit codefragment naar uw Arduino en voer het uit:

#include void analogWriteCallback(byte pin, int value){ if (IS_PIN_PWM(pin)) {pinMode(PIN_TO_DIGITAL(pin), OUTPUT); analogWrite(PIN_TO_PWM(pin), waarde); }} ongeldige setup () { Firmata.setFirmwareVersion (FIRMATA_FIRMWARE_MAJOR_VERSION, FIRMATA_FIRMWARE_MINOR_VERSION); Firmata.attach (ANALOG_MESSAGE, analogWriteCallback); Firmata.begin(57600);}void loop() { Firmata.sendAnalog(0, 800);}

Dit is het absolute minimum dat nodig is om met Firmata te communiceren. Het stuurt continu een output van 800 (van de 1024) naar poort 0 van het Firmata-apparaat in Ableton. Als je deze code uploadt naar je Arduino terwijl je een Firmata-apparaat hebt geopend in Ableton, zou het eruit moeten zien als de afbeelding hierboven. (Wijs poort 0 toe aan alles in Ableton om de waarden te kunnen zien.)

U kunt op de knop Map klikken en vervolgens op elk Firmata-compatibel apparaat in Ableton om een toewijzing toe te voegen tussen de invoer die op die poort is ontvangen en de waarde van dat Ableton-apparaat. Eenvoudige voorbeelden zijn het volume van een track of een draaiknop binnen een audio-effect. Verken en zie wat je kunt vinden om naar toe te wijzen!

Stap 7: Beïnvloed muziek met je handbewegingen

Beïnvloed muziek met je handbewegingen!
Beïnvloed muziek met je handbewegingen!

Tegen die tijd zou je wat muziek in Ableton, een Firmata-script op je Arduino en een versnellingsmeterhandschoen moeten hebben. Laten we wat muziek maken!

Wijs poorten van het Arduino-apparaat in Ableton toe aan verschillende dingen (ik raad het trackvolume aan) en voeg vervolgens coderegels toe om gegevens naar elke poort van de Arduino te verzenden.

Firmata.sendAnalog (poort, volumeniveau);

Gebruik dergelijke code voor elke Firmata-poort.

Als u iets eenvoudigs wilt doen, kunt u de waarden van de accelerometer onverwerkt naar Ableton-poorten sturen en ze vanaf daar in kaart brengen. Voor een meer verfijnde ervaring kunt u beslissen: welke versnellingsmeterwaarden moeten geluiden activeren, hoe en wanneer?

Speel vervolgens al je Ableton-loops, voer je Arduino-code uit en dans weg!

(Disclaimer: als je van plan bent om een complex algoritme voor je nummer te maken, kan het veel tijd kosten om te finetunen. "Dance away" is mogelijk minder nauwkeurig dan verwacht.)

Stap 8: De Track Class (bonus!)

Als je het niet erg vindt om het volume te laten knallen of als je een andere manier hebt om het te verminderen, sla deze stap dan over. Lees anders even verder!

Ik merkte dat het in één keer schakelen van het volume van gedempt naar vol onaangename ploffende geluiden veroorzaakt, en het is prettig om het volume geleidelijker te kunnen infaden. Het is echter moeilijk om dit te doen in de synchrone programmeeromgeving van de Arduino. Dus hier is wat code om popping te laten verdwijnen:

klasse Track{ public: int volume; int volumeDoel; int updateSnelheid; Track() {volume = 0; volumeDoel = 0; updatesnelheid = 0; } void setVolumeGoal (int doel) { volumeGoal = doel; } int getVolumeGoal() { retourvolumeGoal; } void setUpdateSpeed (int snelheid) { updateSpeed = snelheid; } int getVolume() { retourvolume; } void updateVolume() { if((volume > volumeGoal) && ((volume - volumeGoal) >= updateSpeed)) { volume -= updateSpeed; } else if((volume = updateSpeed)) { volume += updateSpeed; } } void mute (int snelheid) { volumeGoal = 50; updateSpeed = snelheid; } void full (int snelheid) { volumeGoal = 950; updateSpeed = snelheid; }};

Elke track heeft een huidig volume, een doelvolume en een snelheid waarmee het naar dat doelvolume beweegt. Als u het volume van een track wilt wijzigen, roept u setVolumeGoal() aan. Elke keer dat u de loop()-functie in uw Arduino uitvoert, roept u updateVolume() op elke track aan en stuurt u die informatie vervolgens naar Firmata met getVolume(). Verander de updatesnelheid voor snellere of meer geleidelijke fadeouts! Vermijd ook om het volume zo mogelijk op 0 te zetten; stel het in plaats daarvan in op een zeer lage waarde (de standaard in mute() is 100).

Stap 9: tracklengte, beats en meer (bonus!)

U kunt veel doen om het geluid dat uit uw project voortkomt, gemakkelijker te beluisteren. Hier zijn een paar opties:

U kunt bijhouden hoe lang het nummer al loopt. Om dit te doen, moet je uitzoeken wanneer het nummer begon; Ik raad een while-lus aan in de setup()-functie die het uitvoeren van uw code vertraagt totdat deze een handbeweging heeft gedetecteerd. Sla de starttijd van het nummer op in een variabele met millis(), en controleer hoe lang het al aan de gang is elke keer dat je loop(). U kunt dit gebruiken om bepaalde functies op bepaalde tijden van het nummer in of uit te schakelen.

Als je weet hoe lang je loops in milliseconden zijn, kun je ook bijhouden hoeveel loops je hebt doorlopen voor een meer genuanceerd begrip van de songstructuur!

Een ander potentieel probleem dat u kunt tegenkomen, is wanneer u een nummer moet starten en stoppen met afspelen. Ik loste dit op door bij te houden in welke beat van een maat het nummer zich op dat moment bevond. Dan kon ik na een gebaar nummers afspelen voor een willekeurig aantal beats, in plaats van het meteen af te breken. Hierdoor lopen de zaken een stuk soepeler. Hier is een voorbeeld:

if(millis() - lastLoop >= 4000) { loops += 1; lastLoop = millis(); for(int j = 0; j <8; j++) { beatNow[j] = false; } } beat = (millis() - lastLoop) / 250; if(beat!= lastBeat) { lastBeat = beat; beatsLinks -= 1; }

Zorg ervoor dat u de volumes bijwerkt volgens de waarden van beatNow[beat] en/of beatsLeft. Voorbeeldcode waarin bijna alles in deze zelfstudie is verwerkt, plus enkele, is bijgevoegd voor het geval u het in de praktijk wilt zien.

Aanbevolen: