Last active
April 22, 2016 15:05
-
-
Save edmorais/5ec38e4b95bcb127b70b to your computer and use it in GitHub Desktop.
Visualizamos o som correspondente à entrada do microfone do computador.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* __ ________ ___ ___ _______ | |
/ / / __/ _/ |_ |/ _ < / __/ | |
/ /___\ \_/ / / __// // / /__ \ | |
/____/___/___/ /____/\___/_/____/ | |
Aula de 15/05/2015: | |
Visualizamos o som correspondente à entrada do microfone do computador. | |
Por Eduardo Morais / FBAUP - www.eduardomorais.pt/fbaup/ | |
*/ | |
/* | |
Importar bibliotecas! | |
*/ | |
import ddf.minim.spi.*; | |
import ddf.minim.signals.*; | |
import ddf.minim.*; | |
import ddf.minim.analysis.*; | |
import ddf.minim.ugens.*; | |
import ddf.minim.effects.*; // via menu Sketch->Import Library->Minim | |
/* | |
Declarações de variáveis: | |
*/ | |
Minim minim; // objecto que corresponde à 'mesa de mistura' | |
AudioInput in; // objecto correspondente ao input / microfone | |
/* | |
Função setup(): | |
Executada automaticamente no início do programa: | |
*/ | |
void setup() { | |
size(512,512); | |
background(0); | |
// ligamos a 'mesa de mistura' ao nosso sketch: | |
minim = new Minim(this); | |
// ligamos o microfone em modo stereo, | |
// com memória/buffer de tamanho 1024 | |
in = minim.getLineIn(minim.STEREO, 1024); | |
} | |
/* | |
Função draw(): | |
Executada repetidamente a cada 'frame'/fotograma de animação. | |
*/ | |
void draw() { | |
// vamos preencher a janela com um rectângulo negro semi-transparente | |
// para produzir um efeito de 'delay' na imagem: | |
noStroke(); | |
fill(0,20); | |
rect(0,0, width, height); | |
stroke(#FF7700, 100); | |
strokeWeight(1); | |
// vamos percorrer o 'buffer' do microfone! | |
// afinal trata-se de um conjunto de amplitudes que podemos visualizar: | |
for (int i = 0; i < in.bufferSize(); i++) { | |
// vamos mapear ('regra de três simples') o ponto em que estamos (i) | |
// à coordenada y da nossa janela: | |
float y = map(i, 0, in.bufferSize(), 0, height); | |
// vamos desenhar uma linha horizontal nesse ponto. | |
// adicionamos e subtraímos a amplitude dos canais desse ponto do buffer | |
// (multiplicado por um numero para melhor se expressar) | |
// à coordenada x do centro do ecrã, obtendo assim os pontos | |
// inicial e final da linha: | |
line(width/2 - in.left.get(i)*300, y, | |
width/2 + in.right.get(i)*300, y); | |
} | |
// vamos multiplicar o nível médio do buffer (entre 0 e 1) | |
// pela altura do ecrã, para desenharmos um nível de som | |
float y = height - in.mix.level() * height; | |
stroke(#0066FF); | |
strokeWeight(2); | |
// desenhamos uma linha horizontal nesse ponto: | |
line(0,y, width, y); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment