Resumo
Arduino Stringless Guitar
sexta-feira, 2 de agosto de 2013
sexta-feira, 19 de abril de 2013
Modelos da Aplicação
A classe principal que controla a aplicação é a StringlessGuitarUI. Ela contém as variáveis de instância que representam os botões para cada acorde de um tom. No diagrama coloquei apenas uma para servir de exemplo. Logo abaixo, a classe ButtonHandler, onde se encontra a lógica de abertura de um arquivo áudio, é interna da StringlessGuitarUI. Ela é marcada com um + dentro de um círculo ligados por uma seta.
A ButtonFactory é uma classe que encapsula a instanciação de todos os botões da tela. ButtonHandler implementa uma interface ouvinte de eventos de clique em um botão - ActionListener. Destaquei o método que realiza essa operação:
public void actionPerformed(ActionEvent e) {
InputStream in;
if(e.getSource() == buttonEm_CMaior){
try{
in = new FileInputStream(new File("C:\\Users\\Thiago\\Downloads\\Em_C Maior.wav"));
AudioStream audios = new AudioStream(in);
AudioPlayer.player.start(audios);
}
catch(Exception ex){
JOptionPane.showMessageDialog(null, ex);
}
}
Um destaque para a interação do usuário com a máquina, ao clicar em um botão. O evento actionPerformed é disparado para a classe que o tratará (ButtonHandler):
A classe InputStream instancia um objeto da classe FileInputStream, que passa como argumento um path de um arquivo áudio (no momento em que actionPerformed é executado). Logo, a classe AudioInputStream instancia um objeto da própria classe e este recebe como argumento o path do arquivo, criando uma dependência de parâmetros.
quarta-feira, 27 de março de 2013
Modelagem de Domínio
Um modelo de domínio é uma representação visual de classes conceituais ou objetos do mundo real, em um contexto (Fowler, 1996). Ou seja, é uma descrição de coisas/conceitos em uma situação real, mas não de objetos de software, tais como classes em Java, por exemplo. O modelo de domínio, produzido na etapa de análise, ajuda na elaboração da lista de requisitos.
Nesse sentido, um tom determina 8 acordes (sem as variações) a serem tocados. Um tom pode ser maior ou menor; por causa disso, temos que Acordes Maior e Acordes Menor são um tipo de Acorde. Um acorde é composto por 3 notas tocadas simultaneamente. As instâncias C e C#m são apenas um exemplo de nota e acorde, respectivamente.
sexta-feira, 15 de março de 2013
Musical Instrument Shield
Seguindo com o projeto, estamos na fase da integração Hardware-Software.
O manuseio do hardware é simples junto ao Arduino e a Protoboard, como estamos fazendo alguns testes com o Software, decidimos ainda não solda-lo junto ao Arduino, mas para a finalização do projeto será necessário.
Estamos trabalhando no momento com o Musical Instrument Shield, que será de extrema utilidade no projeto, com ele poderemos reproduzir sons reais de instrumentos musicais, já que o Musical Instrument Shield comporta uma biblioteca de diversos instrumentos musicais.
Segue foto abaixo dele conectado no Arduino e na Protoboard para a realização de alguns testes com o Software.
Musical Instrument Shield (vermelho) |
Musical Instrument Shield |
A princípio utilizamos este site de dois alunos da Universidade de Stanford, para nos auxiliar com o desenvolvimento do código.
Ao decorrer do desenvolvimento encontramos algumas dificuldades que serão solucionadas junto a nossa Orientadora.
sexta-feira, 8 de março de 2013
Relatórios Parciais
No último mês, deixamos um pouco o blog de lado para correr com a elaboração dos relatórios parciais de cada um. Decidi publicar agora os documentos com os resultados preliminares da pesquisa:
Danilo - Programação Arduino
Rodrigo - Hardware
Thiago - Interface Java
Danilo - Programação Arduino
Rodrigo - Hardware
Thiago - Interface Java
quinta-feira, 24 de janeiro de 2013
Montagem do Projeto
Nos reunimos esta semana para a segunda parte da montagem do protótipo.
Esta segunda parte consiste em soldar os seguintes materiais: laser, LDR, woofer e a bateria.
A terceira parte do projeto, consiste em fazer uma montagem parcial de como ficará nosso protótipo.
Utilizaremos também o código processing que está sendo desenvolvido por nosso colega, para que possamos ter um protótipo mais completo.
Laser's / Woofer's / LDR's |
Posição do Arduino e da Protoboard |
terça-feira, 15 de janeiro de 2013
Prévia da Interface Gráfica: Stringless Guitar - Parte 4
Nesta última parte da prévia da interface gráfica, vamos abordar o assunto mais intrínseco, que é a lógica de abrir arquivo de áudio. Para isso, há dois jeitos distintos: especificar o caminho de um arquivo local ou por Uniform Resource Locators (URLs). Como o próprio nome já diz, URLs são utilizados para localizar sites na web. Por exemplo, no outro post, o site http://pscode.org/media/EverLove.mid é o URL utilizado pelo programa pra abrir esse arquivo de áudio midi.
Ao explorar a outra alternativa, devemos informar no código do programa aonde esse arquivo se encontra no computador.
Em suma, o método abaixo é encarregado de implementar essa operação:
private void D_GMaiorActionPerformed(java.awt.event.ActionEvent evt) {
InputStream in;
try{
in = new FileInputStream(new File("C:\\Users\\Thiago\\Downloads\\D_G Maior.wav"));
AudioStream audioStream = new AudioStream(in);
AudioPlayer.player.start(audioStream);
}
catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}
}
Um caractere separador é utilizado para separar diretórios e arquivos no caminho. No Windows, o caractere separador é uma barra invertida (\). Em um sistema UNIX, é uma barra (/). Um erro comum de programação é utilizar '\' como um separador de diretório em vez de '\\'. Uma '\' simples indica que a '\' seguida pelo próximo caractere representa uma sequência de escape.
A diferença aqui é que essa classe, também do pacote javax.sound.sampled (API Java Sound), permite abrir outros formatos de áudio, como o .wav. Isso ajuda bastante, pois obtemos uma qualidade sonora melhor. O MIDI produz um som digitalizado, o que dificulta a experiência de descobrir o som real das notas, objetivo que norteia nosso propósito.
DEITEL, H.M; DEITEL, P.J, Java, Como Programar -8ªed. – São Paulo: Prentice Hall, 2010.
Ao explorar a outra alternativa, devemos informar no código do programa aonde esse arquivo se encontra no computador.
Em suma, o método abaixo é encarregado de implementar essa operação:
private void D_GMaiorActionPerformed(java.awt.event.ActionEvent evt) {
InputStream in;
try{
in = new FileInputStream(new File("C:\\Users\\Thiago\\Downloads\\D_G Maior.wav"));
AudioStream audioStream = new AudioStream(in);
AudioPlayer.player.start(audioStream);
}
catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}
}
Um caractere separador é utilizado para separar diretórios e arquivos no caminho. No Windows, o caractere separador é uma barra invertida (\). Em um sistema UNIX, é uma barra (/). Um erro comum de programação é utilizar '\' como um separador de diretório em vez de '\\'. Uma '\' simples indica que a '\' seguida pelo próximo caractere representa uma sequência de escape.
A diferença aqui é que essa classe, também do pacote javax.sound.sampled (API Java Sound), permite abrir outros formatos de áudio, como o .wav. Isso ajuda bastante, pois obtemos uma qualidade sonora melhor. O MIDI produz um som digitalizado, o que dificulta a experiência de descobrir o som real das notas, objetivo que norteia nosso propósito.
Fontes de Referência
DEITEL, H.M; DEITEL, P.J, Java, Como Programar -8ªed. – São Paulo: Prentice Hall, 2010.
http://docs.oracle.com/javase/7/docs/api/javax/sound/sampled/AudioInputStream.html
Assinar:
Postagens (Atom)