Você está na página 1de 17

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO

PRÓ-REITORIA DE GRADUAÇÃO
CENTRO MULTIDISCIPLINAR DE PAU DOS FERROS
ENGENHARIA DE COMPUTAÇÃO
TECNOLOGIA DA INFORMAÇÃO
MULTIMÍDIA 2022.1
Prof.: Caio César

OPERAÇÕES DE MULTIMÍDIA EM SINAIS

DE ÁUDIO UTILIZANDO MATLAB

ANTONIO DECELMO DE ALMEIDA JUNIOR


PAULO HENRIQUE DE SOUZA RÊGO

PAU DOS FERROS


2023
SUMÁRIO

1. INTRODUÇÃO 3
2. MOTIVAÇÃO 3
3. CARREGANDO E REPRODUZINDO SINAIS DE ÁUDIO NO MATLAB 4
4. PROCESSAMENTO DE SINAIS DE ÁUDIO 5
5. FUNCIONAMENTO/ EXEMPLO 6
6. EXEMPLOS E APLICAÇÕES NO MATLAB 7
7. CONCLUSÃO 15
1. INTRODUÇÃO

No presente trabalho foi desenvolvida uma aplicação para processamento de


sinais de áudio que consiste na modificação de um sinal de áudio através de scripts de
Matlab, onde foram aplicados filtros de reversão temporal, aumento e diminuição de
velocidade no tempo, efeito delay, e overdrive. Como exemplo, foram utilizadas amostras de
sinais áudio da música Sweet Child O' Mine da banda Guns N’ Roses, dada a complexidade
dos sinais produzidos pela amostra de áudio, fora possível observar graficamente a
modificação do sinal de áudio, o que nos permitiu verificar a eficácia do projeto.

2. MOTIVAÇÃO

O que são sinais de áudio e como eles são representados no computador.?

Sinais de áudio são representações numéricas de variações de pressão acústica que


podem ser armazenadas em um computador. De acordo com Gomes e Silva (2004), "quando
gravados, esses sinais são representados por uma série de valores numéricos que descrevem a
amplitude do sinal em intervalos de tempo regulares". A técnica mais comum para
representar sinais de áudio no computador é a PCM (Pulse Code Modulation), que "consiste
em amostrar o sinal em intervalos regulares e quantizar a amplitude de cada amostra para um
número finito de valores discretos" (Gomes e Silva, 2004).

Esses valores numéricos são armazenados em arquivos de áudio, como o formato


WAV ou MP3, que podem ser reproduzidos por software de edição de áudio ou players de
mídia. Durante a reprodução, o software converte esses valores numéricos de volta em uma
forma de onda analógica que pode ser ouvida através de alto-falantes ou fones de ouvido
(Rocha et al., 2004).
Em resumo, sinais de áudio são representações numéricas de variações de pressão
acústica, e a técnica mais comum para representá-los no computador é a PCM. Esses valores
numéricos são armazenados em arquivos de áudio e podem ser reproduzidos por software de
edição de áudio ou players de mídia, sendo convertidos de volta em uma forma de onda
analógica durante a reprodução.

3. CARREGANDO E REPRODUZINDO SINAIS DE ÁUDIO NO MATLAB

Para carregar o arquivo de áudio que desejado o mesmo precisa se encontrar no


mesmo diretório que o arquivo do seu script MATLAB ou definir o caminho completo do
arquivo. Utilizando a função "audioread" para ler o arquivo de áudio. Esta função retorna
dois valores: o sinal de áudio amostrado e a frequência de amostragem do sinal.

[originalSignal, sampleRate] = audioread('SemDistorção.wav');

No código acima, "originalSinal" é uma matriz que contém as amostras do sinal de áudio, e
"sampleRate" é a frequência de amostragem do sinal.

Note que a função "audioread" suporta vários formatos de arquivo de áudio, como
WAV, MP3, AAC, etc.

Para reproduzir o sinal de áudio adquirido pela função anterior utilizamos a função
"sound" para reproduzir o sinal. Esta função toma o sinal de áudio como entrada e reproduz o
sinal em alto-falantes ou fones de ouvido conectados ao computador.

sound(distortedSignal, sampleRate);
Agora que conseguimos adicionar um sinal de áudio e reproduzi-lo, poderemos
utilizar funções que nos permitam fazer modificações nos sinais de áudio, podendo assim
manipular sinais de áudio como quisermos.

4. PROCESSAMENTO DE SINAIS DE ÁUDIO

Existem diversas técnicas de processamento de sinais de áudio, que são utilizadas


para diferentes propósitos, como filtragem, equalização e compressão. A seguir, discutirei
brevemente cada uma dessas técnicas.

● Filtragem: A filtragem é uma técnica que remove ou enfatiza certas


frequências em um sinal de áudio. Isso pode ser feito por meio de filtros
passa-baixa, passa-alta, passa-faixa ou rejeita-faixa.
● Equalização: A equalização é usada para ajustar o equilíbrio tonal de um sinal
de áudio. O equalizador pode ser usado para aumentar ou diminuir a
intensidade de frequências específicas do sinal, o que pode ser útil para
corrigir problemas de som ou ajustar o som de acordo com as preferências do
ouvinte.
● A compressão é usada para reduzir a amplitude de um sinal de áudio. Isso é
geralmente feito para reduzir a dinâmica do sinal, tornando as partes mais
suaves mais audíveis e as partes mais altas mais silenciosas. A compressão é
frequentemente usada em gravações musicais para controlar a dinâmica de um
desempenho, tornando o som mais uniforme e consistente.

Além dessas técnicas, existem outras, como a transformada de Fourier, que é usada
para analisar o espectro de frequência de um sinal, a ressíntese de áudio, que é usada para
sintetizar novos sons a partir de sons existentes, e a codificação de áudio, que é usada para
compactar dados de áudio para armazenamento ou transmissão.

A escolha da técnica de processamento de sinal de áudio depende do tipo de sinal e do


objetivo do processamento. É importante entender as aplicações e limitações de cada técnica
para escolher a abordagem correta para o processamento de sinais de áudio.
5. FUNCIONAMENTO/ EXEMPLO

Técnicas de Processamento de Sinais de Áudio

As técnicas aqui abordadas dizem respeito a Reversão Temporal, aumento e


diminuição de velocidade, efeito delay, e Overdrive.

● A reversão temporal ou reprodução reversa, consiste simplesmente em um


sinal de áudio ser tocado de trás para frente.
● Aumento e Diminuição de velocidade: Nesta técnica consiste em ponderar o
sinal de áudio por um escalar a fim de aumentar ou diminuir sua velocidade de
reprodução no tempo, onde seja a um escalar e a > 1 aumenta a velocidade, e
a<1 diminui.
● Delay: É uma técnica de processamento de sinais de áudio que adiciona uma
cópia atrasada do sinal original ao sinal original. Esse efeito é criado pela
introdução de uma pequena pausa entre a reprodução do sinal original e a
cópia atrasada, criando uma sensação de eco ou repetição.
● Overdrive: O efeito overdrive é uma técnica de processamento de sinais de
áudio que cria uma distorção no som, resultando em uma tonalidade mais
agressiva e com mais sustain.
6. EXEMPLOS E APLICAÇÕES NO MATLAB

Todos os exemplos a seguir estão disponíveis em uma pasta compartilhada no Drive.


demonstrando em audiovisual todos os efeitos aplicados ao áudio;

<https://drive.google.com/file/d/1UhNvJ5dRmmOcy9FyNE_7f3coLHut5Krd/view?u
sp=sharing>

● REVERSÃO TEMPORAL:

Figura 01: Reversão temporal de sinal de áudio.


Tabela 01: Script para MATLAB Reversão temporal de sinal de áudio.

% Carregue o sinal de áudio original


[originalSignal, sampleRate] = audioread('SweetChildOMine.wav');

% Obtenha o tamanho do sinal


signalLength = length(originalSignal);

% Inverta o sinal
processedSignal = flip(originalSignal);

% Salve o sinal processado


audiowrite('SweetChildOMine-reversão-temporal.wav', processedSignal, sampleRate);

% Tocando o sinal processado


fprintf('Tocando o sinal processado...\n');
sound(processedSignal, sampleRate);

% Criando o vetor de tempo


time = linspace(0, signalLength/sampleRate, signalLength);

% Plotando os gráficos no tempo


figure;
subplot(2,1,1);
plot(time, originalSignal);
title('Sinal de áudio original');
xlabel('Tempo (s)');
ylabel('Amplitude');
subplot(2,1,2);
plot(time, processedSignal);
title('Sinal de áudio processado - Reversão temporal');
xlabel('Tempo (s)');
ylabel('Amplitude');
● AUMENTO DE VELOCIDADE:

Figura 02: Aumento de velocidade 2x de sinal de áudio.

Tabela 02: Script para MATLAB Aumento de velocidade 2x de sinal de áudio.

% Carregando o sinal original


[originalSignal, sampleRate] = audioread('SweetChildOMine.wav');

% Aplicando a subamostragem pelo fator de 2


processedSignal = originalSignal(1:2:end, :);

% Salvando o sinal processado


audiowrite('SweetChildOMine-Velocidade2x.wav', processedSignal, sampleRate);

% Tocando o sinal procecssado

fprintf('Tocando o sinal processado...\n');


sound(processedSignal, sampleRate);

% Criando o vetor de tempo para o sinal original


timeOriginal = linspace(0, length(originalSignal)/sampleRate, length(originalSignal));
% Criando o vetor de tempo para o sinal processado
timeProcessed = linspace(0, length(processedSignal)/sampleRate, length(processedSignal));

% Plotando o gráfico no tempo


figure;
subplot(2,1,1);
plot(timeOriginal, originalSignal);
title('Sinal de áudio original');
xlabel('Tempo (s)');
ylabel('Amplitude');
subplot(2,1,2);
plot(timeProcessed, processedSignal);
title('Sinal de áudio processado - Velocidade 2x');
xlabel('Tempo (s)');
ylabel('Amplitude');

● DIMINUIÇÃO DE VELOCIDADE:

Figura 03: Diminuição de velocidade 0.5x de sinal de áudio.


Tabela 03: Script para MATLAB Diminuição de velocidade 0.5x de sinal de áudio.

% Carregando o sinal original


[originalSignal, sampleRate] = audioread('SweetChildOMine.wav');

% Expandido o sinal pelo fator de 2


originalLength = length(originalSignal);
newLength = originalLength * 2;
originalTime = (1:originalLength)';
newTime = linspace(1, originalLength, newLength)';
processedSignal = interp1(originalTime, originalSignal, newTime, 'linear') ;

% Salvando o sinal processado


audiowrite('SweetChildOMine-Velocidade0.5x.wav', processedSignal, sampleRate);

% Tocando o sinal processado


fprintf('Tocando o sinal processado...\n');
sound(processedSignal, sampleRate);

% Criando o vetor de tempo para o sinal original


timeOriginal = linspace(0, length(originalSignal)/sampleRate, length(originalSignal));

% Criando o vetor de tempo para o sinal processado


timeProcessed = linspace(0, length(processedSignal)/sampleRate, length(processedSignal));

% Plotando o gráfico no tempo


figure;
subplot(2,1,1);
plot(timeOriginal, originalSignal);
title('Sinal de áudio original');
xlabel('Tempo (s)');
ylabel('Amplitude');
subplot(2,1,2);
plot(timeProcessed, processedSignal);
title('Sinal de áudio processado - Velocidade 0.5x');
xlabel('Tempo (s)');
ylabel('Amplitude');
● DELAY:

Figura 04: Delay de 500 ms no sinal de áudio.

Tabela 04: Script para MATLAB Delay de 500 ms no sinal de áudio.

% Carregando o sinal de áudio original


[x, fs] = audioread('SweetChildOMine.wav');

% Definindo a profundidade do efeito e o atraso desejado


eta = 0.5; % Profundidade do efeito
delay_time = 0.5; % Setar o atraso (0.5 = 500ms)

% Calculando o número de amostras de atraso


delay_samples = round(fs * delay_time);

% Criando o vetor de saída y


y = zeros(length(x), 1);

% Aplicando o efeito de delay


for n = 1:length(x)
if n <= delay_samples
y(n) = x(n);
else
y(n) = x(n) + eta * x(n - delay_samples);
end
end

% Normalizando o sinal de áudio processado


y = y / max(abs(y));

% Salvando o sinal de áudio processado


audiowrite('SweetChildOMine-Delay.wav', y, fs);

fprintf('Tocando o sinal processado...\n');


sound(y, fs);

% Criando o vetor de tempo para o sinal original


timeOriginal = linspace(0, length(x)/fs, length(x));

% Criando o vetor de tempo para o sinal processado


timeProcessed = linspace(0, length(y)/fs, length(y));

% Plotando o gráfico no tempo


figure;
subplot(2,1,1);
plot(timeOriginal, x);
title('Sinal de áudio original');
xlabel('Tempo (s)');
ylabel('Amplitude');
subplot(2,1,2);
plot(timeProcessed, y);
title('Sinal de áudio processado - Delay de 500ms');
xlabel('Tempo (s)');
ylabel('Amplitude');
● OVERDRIVE:

Figura 05: Overdrive/Distorção no sinal de áudio.

Tabela 04: Overdrive/Distorção no sinal de áudio.

% Carregando o sinal original


[originalSignal, sampleRate] = audioread('SemDistorção.wav');

% Normalizando o sinal original


originalSignal = originalSignal / max(abs(originalSignal));

% Parâmetro de distorção (um valor maior resulta em mais distorção)


gain = 20;

% Aplicando a distorção de guitarra


distortedSignal = atan(gain * originalSignal) / atan(gain);

% Salvando o sinal processado


audiowrite('SemDistorção-Distorted.wav', distortedSignal, sampleRate);
% Tocando o sinal processado
fprintf('Tocando o sinal processado...\n');
sound(distortedSignal, sampleRate);

% Criando o vetor de tempo


time = linspace(0, length(originalSignal)/sampleRate, length(originalSignal));

% Plotando o gráfico no tempo


figure;
subplot(2,1,1);
plot(time, originalSignal);
title('Sinal de áudio original');
xlabel('Tempo (s)');
ylabel('Amplitude');
subplot(2,1,2);
plot(time, distortedSignal);
title('Sinal de áudio distorcido');
xlabel('Tempo (s)');
ylabel('Amplitude');

7. CONCLUSÃO

Em conclusão, o processamento de sinais de áudio usando MATLAB é uma técnica


poderosa para criar efeitos interessantes em gravações e produções musicais. A manipulação
de sinais de áudio pode ser feita de várias maneiras, incluindo a aplicação de efeitos como
delay, overdrive e a reversão temporal do áudio.

O efeito delay é útil para criar uma sensação de profundidade e espaço, enquanto o
overdrive pode adicionar peso e presença ao som. Aumentar e diminuir a velocidade do áudio
pode alterar drasticamente o som original, criando uma sensação de tensão ou relaxamento. A
reversão temporal do áudio é uma técnica criativa que pode ser usada para criar efeitos
sonoros únicos.
A implementação desses efeitos pode ser feita através de programação em MATLAB,
usando funções e bibliotecas específicas. Em resumo, a manipulação de sinais de áudio
usando MATLAB e técnicas como delay, overdrive, aumento e diminuição de velocidade e
reversão temporal pode levar a criação de efeitos sonoros interessantes e únicos. É
importante, no entanto, usá-los com moderação e de forma adequada para não prejudicar a
qualidade sonora final.
Bibliografia

COSTA, EDUARDO HA. Processamento de Sinais de Áudio Utilizando o Matlab.

GOMES, A. L. A.; SILVA, J. R. S. Sinais de áudio: conceitos e aplicações. Revista Brasileira de


Engenharia de Som e Imagem, v. 2, n. 1, p. 30-40, 2004.

Você também pode gostar