Você está na página 1de 15

INSTITUTO FEDERAL DE EDUCAO, CINCIA E TECNOLOGIA DO

ESPRITO SANTO CAMPUS SERRA

JARBAS REZENDE
RODRIGO LIMA
SHEILA BELOTI

AFINADOR VIRTUAL DE INSTRUMENTOS

SERRA
2015

JARBAS REZENDE
RODRIGO LIMA
SHEILA BELOTI

AFINADOR VIRTUAL DE INSTRUMENTOS

Relatrio apresentado disciplina de


Ferramentas Computacionais, do curso
de
Engenharia
de
Controle
e
Automao, do Instituto Federal de
Educao, Cincia e Tecnologia do
Esprito Santo, como requisito parcial
para avaliao na referida disciplina.
Orientador: Prof. Flavio Garcia.

SERRA
2015

RESUMO
Utilizando o Software Matlab, foi arquitetado um sistema capaz de afinar
um instrumento como um violo ou uma guitarra. Assim, visualmente pode-se
afinar cada corda do instrumento.

SUMRIO
1 INTRODUO................................................................................................................
1.1 Objetivos.........................................................................................................................
2 ATIVIDADES REALIZADAS........................................................................................
2.1 Princpio de funcionamento do Afinador Virtual......................................................
3 ESTUDO DO CDIGO MATLAB..............................................................................
4 CONCLUSES..............................................................................................................
5 REFERNCIAS.............................................................................................................

5
1 INTRODUO
Instrumentos de corda emitem o som de acordo com a frequncia
sonora emitida pelas cordas, isso depende da densidade da corda, o mdulo, a
trao e do comprimento linear da corda. Para alterar as notas musicais emitidas
pela corda, deve-se alterar um dos fatores citados.
Afinar um instrumento fazer a comparao de um som equivalente
ao que quer ser afinado. A afinao mais utilizada a de unssonos, onde se
utiliza um intervalo de oitava, ou seja, tem-se a mesma nota em uma corda j
afinada da corda que se quer afinar e compara-se, fazendo assim o ajuste
necessrio. Mas para esse tipo de afinao deve se ter um conhecimento auditivo
aguado de, pelo menos, uma nota, inciantes em instrumentos tem dificuldades
tambm na comparao da nota em tons diferentes, por no ter uma
compreenso auditiva to aguada. Assim, geralmente eles utilizam afinadores
para realizar a afinao de seu instrumento.
A afinao de instrumentos de cordas pode ser feita em vrios tons
que so definidos pela variao de frequncia das cordas, o tom mais utilizado
o fundamental que equivale as seguintes frequncias para cada corda:

Notas

Frequncia

Mi

660 Hz

Si

495 Hz

Sol

396 Hz

296 Hz

440 Hz

MI

330 Hz

1.1

Objetivos

Programar um Afinador Virtual de instrumentos, utilizando Software Matlab


e a entrada de udio do computador.

7
2 ATIVIDADES REALIZADAS
2.1

Princpio de funcionamento do Afinador Virtual

O som recebido pela entrada de udio do computador, que capta o sinal


e funciona conversor analgico digital, e grava um tempo pr-determinado do
som, no caso, um segundo. Foi desenvolvido um algoritmo utilizando o Matlab e o
Guide, que cria interfaces grficas para melhor visualizao do programa. O som
captado, atravs da entrada de udio do computador gravado por um segundo e
depois realizada a transformada de fourier do sinal gravado, para ser convertido
do domnio do tempo para o domnio da frequncia. A frequncia captada o
primeiro pico do espectro de potncia, conhecido como harmnico fundamental,
pelo qual caracterizada a nota, este comparado com a frequncia que a nota a
ser afinada deve ter, conforme tabela abaixo, de acordo com a resultado obtido
indicada a necessidade de afrouxar ou apertar a corda, caso a frequncia captada
esteja acima ou abaixo da frequncia da nota, e, no caso de a frequncia captada
seja igual frequncia da nota indicado na tela como Afinado.
Para a afinao de cada corda foi utilizado um filtro para utilizar as
frequncias dos harmnicos de cada nota como referncia na afinao do
instrumento, ao selecionar qual nota est sendo tocada, tal filtro possui notas em
vrios harmnicos. As frequncias com base no filtro, definidas para a condio
afinado de cada corda so as seguintes:

Cordas

Frequncia

1 Mi

329.62 Hz

2 Si

246.94 Hz

3 Sol

196.01 Hz

4 R

146.83 Hz

5 La

110.01 Hz

6 MI

82.41 Hz

Para melhor utilizao e visualizao do programa, fez-se uma interface na


qual selecionada a corda que se quer afinar, ao tocar a corda aparece qual nota
foi tocada e se necessrio afrouxar ou apertar a corda, assim faz-se a ajuste de
acordo com os comandos at aparecer a mensagem afinado, segue abaixo a
interface, com os comandos de apertar, afrouxar e afinado, respectivamente:

Tentativa de afinao da corda com afinao em s (B).

Corda M (E) afinada.

10
3 ESTUDO DO CDIGO MATLAB

Abaixo segue o cdigo do programa completo, que ser explicado


posteriormente:
function varargout = laytrabalho1(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @laytrabalho1_OpeningFcn, ...
'gui_OutputFcn', @laytrabalho1_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end

function laytrabalho1_OpeningFcn(hObject, ~, handles, varargin)


handles.output = hObject;
guidata(hObject, handles);

function setGlobalz(val)%declarao da variavel global z


global z
z = val;
function setGlobals(val)%declarao da variavel global s
global s
s = val;

function varargout = laytrabalho1_OutputFcn(~, ~, handles)


varargout{1} = handles.output;
setGlobalz(0);

11
function ligar_Callback(~, ~, handles)%linha de comando ao clicar em ligar
A = [0; 32.70; 34.64; 36.70; 38.89; 41.20; 43.65; 46.24; 48.99; 51.91; 55; 58.27;
61.73; 65.40; 69.29; 73.41; 77.78; 82.40; 87.30; 92.49; 97.99; 103.82; 110.01;
116.54; 123.47; 130.81; 138.59; 146.83; 155.56; 164.81; 174.61; 184.99; 195.99;
207.65; 220; 233.08; 246.94; 261.62; 277.18; 293.66; 311.12; 329.62; 349.22;
369.99; 391.99; 415.30; 440; 466.16; 493.88; 523.25; 554.36; 587.32; 622.25;
659.25; 698.45; 739.98; 783.99; 830.60; 880; 932.32; 987.76];%vetor com as
frequencias das notas
B = {0;0;'C'; 'C#'; 'D'; 'D#'; 'E'; 'F'; 'F#'; 'G'; 'G#'; 'A'; 'A#'; 'B'; 'C'; 'C#'; 'D'; 'D#'; 'E';
'F'; 'F#'; 'G'; 'G#'; 'A'; 'A#'; 'B'; 'C'; 'C#'; 'D'; 'D#'; 'E'; 'F'; 'F#'; 'G'; 'G#'; 'A'; 'A#'; 'B';
'C'; 'C#'; 'D'; 'D#'; 'E'; 'F'; 'F#'; 'G'; 'G#'; 'A'; 'A#'; 'B'; 'C'; 'C#'; 'D'; 'D#'; 'E'; 'F'; 'F#';
'G'; 'G#'; 'A'; 'A#'; 'B';'X'; 'X'};%vetor com as respectivas notas
Fs = 44100;
global z;
global s;
setGlobals(0);
while(s == 0)
a1 = audiorecorder(Fs, 8, 1);%grava audio com frequencia de amostragem Fs,
8 bits e 1 canal
recordblocking(a1, 1);%para a gravao apos 1 segundo
a1=getaudiodata(a1);%captura os dados da gravao
N = length(a1);%avalia o comprimento do vetor a1
T = N/Fs;%encontra o periodo do sinal
x = fft(a1)/N;%aplica a transformada de fourier no sinal
cutOff = ceil (N/2);
x = x(1:cutOff);
[~,i] = max (abs(x));%filtra o valor maximo abs do sinal x
b1 = i/T;
A(61,1) = b1;
C = sort(A);%organiza A em ordem crescente
pos = find (C == b1);
set(findobj(gcf,'Tag','freq'),'String', b1);
notaref = A(pos-1,1) + (A(pos+1,1)-A(pos-1,1))/2;
if (b1 < notaref)
set (findobj(gcf,'Tag','visor1'),'String', B(pos-1,1));
set (findobj(gcf,'Tag','visor2'),'String', B(pos+1,1));
set (findobj(gcf,'Tag','nota'),'String', B(pos,1));
elseif (b1 > notaref)
set (findobj(gcf,'Tag','visor1'),'String', B(pos,1));
set (findobj(gcf,'Tag','visor2'),'String', B(pos+2,1));
set (findobj(gcf,'Tag','nota'),'String', B(pos+1,1));
end
if (b1 > z+1 && z > 0)
set (handles.texto, 'String', 'Afrouxe a corda');
elseif (b1 < z-1 && z > 0)
set (handles.texto, 'String', 'Aperte a corda');
elseif (b1 > z-1 && b1 < z+1 && z > 0)

12
set (handles.texto, 'String', 'Afinado');
elseif (z == 0)
set (handles.texto, 'String', 'Selecione uma corda');
end
pause(1/10);
end
% --- Executes when selected object is changed in uipanel7.
function uipanel7_SelectionChangeFcn(hObject, ~, handles)
if hObject == handles.e1
setGlobalz(329.62);
elseif hObject == handles.B
setGlobalz(246.94);
elseif hObject == handles.G
setGlobalz(196.01);
elseif hObject == handles.D
setGlobalz(146.83);
elseif hObject == handles.A
setGlobalz(110.01);
elseif hObject == handles.e2
setGlobalz(82.41);
elseif hObject == handles.parar
setGlobals(1);
end

Antes de detalharmos o funcionamento geral do cdigo importante


explicar alguns comandos essenciais para o programa, como:
audiorecorder(Fs, 8, 1): Comando para gravar um sinal de udio, sendo Fs a
frequncia de amostragem do sinal com 8 bits e 1 canal;
recordblocking(a1,1): Para de gravar o sinal de udio na varivel a1 aps 1
segundo.
getaudiodata(a1): Captura os dados que foram gravados atravs do comando
audiorecorder.
fft(a1): Aplica a transformada de fourier ao sinal capturado a1 com o objetivo de
transform-lo para o domnio da frequncia e facilitar a manipulao do sinal.

O cdigo funciona da seguinte forma, ao execut-lo aberta a interface


grfica para a operao do programa, nesta interface, ao selecionar a corda a ser

13
afinada, na parte superior da tela, atribuda varivel z a frequncia da
harmnica fundamental daquela nota, que servir de comparao ao sinal
captado atravs da entrada de udio.
Ao clicar em ligar, ser executada a funo ligar_callback, onde ser
declarado o vetor A, com as frequncias em ordem crescente, e declarado
tambm o vetor B com as notas referentes s frequncias declaradas no vetor A,
tais vetores sero utilizados para identificar e mostrar qual nota est sendo
tocada. Logo aps o programa setar a frequncia de amostragem Fs no valor
estipulado, no caso, 44100 e atribuir 0 varivel s, sendo assim o programa
entra em um loop onde gravado 1 segundo do som, atravs do comando
audiorecorder e recordblocking, e os dados gravados so capturados atravs do
comando getaudiodata e atribudos varivel a1.
Com os dados acessveis, o sinal agora ser tratado a fim de encontrar o
que se deseja do mesmo, para isso, o programa encontra o comprimento de a1 e
divide o comprimento de a1 pela frequncia de amostragem Fs, encontrando o
perodo T do sinal. Para trabalhar no domnio da frequncia aplicado ao sinal a
transformada de fourier.
J no domnio da frequncia encontrada o valor de frequncia mais alto,
sendo esta a frequncia da harmnica fundamental que defina a nota que est
sendo tocada, tal valor inserido na ltima posio do vetor A, que
reorganizado em ordem crescente, e j no vetor organizado encontra a posio
em que est a harmnica fundamental do som, na interface mostrado a
frequncia fundamental, entre quais notas esta a nota tocada e a necessidade de
se apertar ou afrouxar a corda a fim de se igualar nota de referncia
selecionada na parte superior da interface.

14
4 CONCLUSES
Conclui-se que o Matlab, um software de ferramentas matemticas,
contribui para vrias aplicaes da matemtica no cotidiano das pessoas, alm de
impressionar pela quantidade de recursos disponibilizados pelo software, capaz
de executar desde tarefas mais simples e comuns, at atividades avanadas,
neste caso conseguiu-se uma aplicao em afinaes de instrumentos de corda
como um violo e uma guitarra.
Conclui-se tambm que tal software pode ser aprimorado com extenses
para afinao de outros instrumentos de corda como Baixo, Viola, entre outros,
basta fazer modificaes rpidas.

15
5 REFERNCIAS

CORRA, CARINA. Manipulao de dados de som no Matlab/Ostave. Rio de


Janeiro: UFF, 2013.
TONINI, ADRIANA. Matlab para Engenharia. 1 Edio, 2002. Belo Horizonte:
Uni-bh.

Você também pode gostar