Índice:

Luva de dança: 9 passos
Luva de dança: 9 passos

Vídeo: Luva de dança: 9 passos

Vídeo: Luva de dança: 9 passos
Vídeo: #muaythai #karate #taekwondo #capoeira #kickboxing #lutalivre #martialarts #artesmarciais 2024, Novembro
Anonim
Luva de dança
Luva de dança

Neste tutorial, explicarei como projetar uma luva que permite que você interaja com a música por meio da dança. Você construirá uma luva com acelerômetro, criará uma composição em Ableton e, em seguida, conectará os dois da maneira mais complexa ou simples que desejar!

Suprimentos

  • Ableton (ou teste gratuito)
  • Um Arduino
  • Cabos jumper
  • Ferro de solda
  • Cartão
  • Pistola de cola quente
  • Muita imaginação

Etapa 1: conceito

Este projeto foi pensado para ser divertido. Se a maneira como o projeto de exemplo neste tutorial funciona não é divertido para você, redesenhe-o!

Eu recomendo tocar algumas de suas músicas favoritas, mover suas mãos até elas e ver o que acontece. Você move suas mãos para cima e para baixo? Lado a lado? Devagar ou rapidamente? Que aspectos da música fazem você querer mexer as mãos? Se você tiver uma lista anotada, provavelmente será capaz de descobrir algumas maneiras de incorporar os movimentos de que gosta em seus algoritmos eventuais.

Aqui estão os movimentos que usei:

  • Um movimento rápido para cima e para baixo aciona o início da música, bateria ou baixo. (Isso acontece em pontos diferentes da música, não necessariamente simultaneamente!)
  • Um movimento lento e inclinado de um lado para o outro aciona um som mais ecoante e agudo.
  • Em uma seção específica da música, inclinar minha mão para cima faz a música se acalmar - então eu a "peguei" em meu punho fechado.

Use-os ou faça o seu próprio!

(Observação: este tutorial não cobre como gerar música ou melodias ao vivo no Ableton! Se você seguir essas instruções, só poderá aumentar / diminuir o volume das faixas ou a aplicação de efeitos de áudio.)

Etapa 2: preparar o acelerômetro

Prepare o acelerômetro
Prepare o acelerômetro

Primeiro, descubra que tipo de acelerômetro você possui. Eu usei este; qualquer acelerômetro de três eixos serve. (Ou experimente outro tipo de sensor se quiser ir à loucura.) Certifique-se de saber como ler os dados do acelerômetro do Arduino. Você pode precisar baixar uma biblioteca para o seu acelerômetro se ele usar algo mais complexo do que a entrada analógica.

Depois de testá-lo com uma placa de ensaio, solde fios curtos com códigos de cores nos pinos do acelerômetro. Coloque um fio vermelho no pino de alimentação, um fio preto no pino de aterramento e quaisquer outros fios necessários para a comunicação do acelerômetro. (Se você tiver um acelerômetro I2C, serão os pinos SCL e SDA. Se você tiver um acelerômetro analógico, provavelmente haverá um pino para cada uma das saídas x, y e z.) Certifique-se de que sua solda esteja sólida e que as contas não se sobreponham entre os pinos adjacentes.

Etapa 3: construir a luva

Construir a luva
Construir a luva

Corte um pedaço de papelão fino ou papel grosso em um retângulo um pouco maior que o acelerômetro. Cole o acelerômetro no papelão, certificando-se de colocar cola no fundo. Em seguida, cole o acelerômetro com fundo de papelão na parte de trás da luva. Costure cada fio frouxamente no pulso da luva para aliviar a tensão no acelerômetro e, em seguida, sua luva está pronta. Conecte-o a fios mais longos para ter espaço suficiente para mover sua mão quando estiver conectado.

Etapa 4: Compor no Ableton

Agora é hora de compor a música que você eventualmente usará com a luva para controlar. Eu recomendo loops Ableton que soam bem juntos, mas podem ser usados para construir gradualmente: tente melodia, acordes, baixo e percussão. Você poderá usar sua luva para controlar quando cada loop é reproduzido ou não.

Se você conseguir pensar em algum tipo de som interessante para ocasionalmente incorporar em uma música, como um efeito sonoro estranho ou um instrumento não convencional, tente adicionar um ou dois deles também! Você pode vinculá-los a movimentos de mão menos comuns para trazer algo interessante de vez em quando.

Aqui está um link para minha composição compatível com o Arduino, caso você não queira escrever uma sua:

(Infelizmente, ensinar Ableton a você não está dentro do escopo do tutorial. No entanto, existem muitos vídeos bons de como fazer por aí, e o Ableton tem um período de teste gratuito de 90 dias! Eu recomendo este vídeo.)

Etapa 5: Comece a usar o Firmata

Comece a usar Firmata
Comece a usar Firmata

Para permitir que seu Arduino se comunique com o Ableton, você precisará usar uma biblioteca chamada Firmata. Você também precisará baixar o Connection Kit for Ableton.

No Ableton, clique em Packs> Connection Kit> Devices no menu no canto superior esquerdo e clique duas vezes no primeiro dispositivo (Arduino) para adicioná-lo. Certifique-se de lembrar em qual faixa do Ableton você adicionou o dispositivo!

Etapa 6: Teste a Firmata

Testar Firmata
Testar Firmata

Primeiro, testaremos e verificaremos se o seu Arduino está se comunicando com o Ableton. Faça upload deste snippet de código para o seu Arduino e execute-o:

#include void analogWriteCallback (byte pin, int value) {if (IS_PIN_PWM (pin)) {pinMode (PIN_TO_DIGITAL (pin), OUTPUT); analogWrite (PIN_TO_PWM (pino), valor); }} void 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);}

Este é o mínimo necessário para se comunicar com Firmata. Ele envia continuamente uma saída de 800 (de 1024) para a porta 0 do dispositivo Firmata no Ableton. Se você carregar este código para o seu Arduino enquanto tiver um dispositivo Firmata aberto no Ableton, ele deve ser semelhante à imagem acima. (Mapeie a porta 0 para qualquer coisa no Ableton para poder ver os valores.)

Você pode clicar no botão Map e, em seguida, em qualquer dispositivo compatível com Firmata no Ableton para adicionar um mapeamento entre a entrada recebida para aquela porta e o valor desse dispositivo Ableton. Exemplos fáceis incluem o volume de qualquer trilha ou dial em um efeito de áudio. Explore e veja o que você pode encontrar para mapear!

Etapa 7: Influencie a música com os movimentos das mãos

Influencie a música com seus movimentos de mão!
Influencie a música com seus movimentos de mão!

A esta altura, você deve ter um pouco de música no Ableton, um script Firmata em seu Arduino e uma luva de acelerômetro anexada. Vamos fazer música!

Mapeie as portas do dispositivo Arduino no Ableton para coisas diferentes (sugiro o volume da trilha) e, em seguida, adicione linhas de código para enviar dados para cada porta do Arduino.

Firmata.sendAnalog (porta, volumeLevel);

Use um código como este para cada porta Firmata.

Se você quiser fazer algo simples, pode enviar os valores do acelerômetro não processados para as portas do Ableton e mapeá-los a partir daí. Para uma experiência mais sofisticada, você pode decidir: quais valores do acelerômetro devem acionar os sons, como e quando?

Em seguida, reproduza todos os seus loops Ableton, execute o código do Arduino e dance!

(Aviso de isenção de responsabilidade: se você está planejando criar qualquer tipo de algoritmo complexo para sua música, pode levar muito tempo para afinar. "Dance away" pode ser menos preciso do que o previsto.)

Etapa 8: A classe da trilha (bônus!)

Se você não se importa em aumentar o volume ou tem outra maneira de atenuá-lo, pule esta etapa. Caso contrário, continue lendo!

Percebi que mudar o volume de mudo para máximo de uma vez cria alguns sons de estouro desagradáveis e é bom poder aumentar o volume gradualmente. No entanto, é difícil fazer isso no ambiente de programação síncrona do Arduino. Então, aqui está um código para fazer o popping desaparecer:

classe Track {public: int volume; int volumeGoal; int updateSpeed; Faixa () {volume = 0; volumeGoal = 0; updateSpeed = 0; } void setVolumeGoal (int goal) {volumeGoal = goal; } int getVolumeGoal () {return volumeGoal; } void setUpdateSpeed (int fastness) {updateSpeed = fastness; } int getVolume () {volume de retorno; } void updateVolume () {if ((volume> volumeGoal) && ((volume - volumeGoal)> = updateSpeed)) {volume - = updateSpeed; } else if ((volume = updateSpeed)) {volume + = updateSpeed; }} void mute (int fastness) {volumeGoal = 50; updateSpeed = rapidez; } void full (int fastness) {volumeGoal = 950; updateSpeed = rapidez; }};

Cada faixa tem um volume atual, um volume objetivo e uma velocidade na qual se move em direção a esse volume objetivo. Quando você quiser alterar o volume de uma faixa, chame setVolumeGoal (). Toda vez que você executar a função loop () em seu Arduino, chame updateVolume () em cada trilha e envie essa informação para Firmata com getVolume (). Altere a velocidade de atualização para fadeouts mais rápidos ou graduais! Além disso, evite definir o volume para 0, se puder; em vez disso, defina-o com um valor muito baixo (o padrão em mute () é 100).

Etapa 9: duração da faixa, batidas e muito mais (bônus!)

Você pode fazer muitas coisas para tornar o som resultante do seu projeto mais fácil de ouvir. Aqui estão algumas opções:

Você pode controlar há quanto tempo a música está em execução. Para fazer isso, você terá que descobrir quando a música começou; Eu recomendo um loop while na função setup () que retarda a execução do seu código até que ele tenha detectado um movimento da mão. Armazene a hora de início da música em uma variável usando millis () e verifique quanto tempo ela dura cada vez que você faz um loop (). Você pode usar isso para habilitar ou desabilitar certos recursos em determinados momentos da música.

Se você sabe quanto tempo seus loops são em milissegundos, também pode rastrear quantos loops você já fez para uma compreensão mais detalhada da estrutura da música!

Outro problema potencial que você pode encontrar é quando iniciar e interromper a reprodução de uma faixa. Resolvi isso mantendo o controle de em qual batida de compasso a música estava no momento. Então, eu poderia reproduzir as faixas por qualquer número de batidas após um gesto, em vez de interrompê-la imediatamente. Isso faz com que as coisas fluam muito mais suavemente. Aqui está um exemplo:

if (millis () - lastLoop> = 4000) {loops + = 1; lastLoop = millis (); para (int j = 0; j <8; j ++) {beatNow [j] = false; }} batida = (milis () - lastLoop) / 250; if (batida! = última batida) {última batida = batida; beatsLeft - = 1; }

Certifique-se de atualizar os volumes de acordo com os valores de beatNow [beat] e / ou beatsLeft. O código de exemplo que incorpora quase tudo neste tutorial, mais alguns, está anexado, caso você queira vê-lo na prática.

Recomendado: