Ferramentas do usuário

Ferramentas do site


prog2:processamento_de_audio

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
prog2:processamento_de_audio [2019/08/01 17:02]
maziero [Processamento de áudio]
prog2:processamento_de_audio [2020/08/07 15:58] (atual)
maziero [O formato WAV]
Linha 1: Linha 1:
 ====== Processamento de áudio ====== ====== Processamento de áudio ======
 +
 +Este projeto consiste em criar filtros para arquivos de áudio em formato WAV, implementando operações como ajuste de volume, eco e normalização. ​
 +
 +===== Áudio digital =====
  
 Em um sistema digital, um som é normalmente codificado como um vetor de amostras (//​samples//​),​ onde cada amostra corresponde à amplitude do sinal sonoro em um instante de tempo. As figuras a seguir trazem um exemplos de sinais sonoros codificados dessa forma: Em um sistema digital, um som é normalmente codificado como um vetor de amostras (//​samples//​),​ onde cada amostra corresponde à amplitude do sinal sonoro em um instante de tempo. As figuras a seguir trazem um exemplos de sinais sonoros codificados dessa forma:
  
-Trecho de áudio (duração: 45s)+Trecho de áudio (duração ​45 s):
  
-{{  audio1.png ​ | Trecho de música (45s)}}+{{  audio1.png ​ | Trecho de música (45 s)}}
  
-Detalhe do trecho de áudio acima (duração: 0,2s):+Detalhe do trecho de áudio acima (duração ​200 ms):
  
-{{  audio2.png ​ | Detalhe (0,2s)}}+{{  audio2.png ​ | Detalhe (200 ms)}}
  
-Detalhe do trecho de áudio acima (duração: 0,02s):+Detalhe do trecho de áudio acima (duração ​20 ms):
  
-{{  audio3.png ​ | Detalhe do detalhe (0,02s)}}+{{  audio3.png ​ | Detalhe do detalhe (20 ms)}}
  
 Visão conceitual da amostragem de áudio: Visão conceitual da amostragem de áudio:
Linha 19: Linha 23:
 {{  amostragem.png?​500 ​ |Amostragem de sinal analógico}} {{  amostragem.png?​500 ​ |Amostragem de sinal analógico}}
  
-Na última ​figurapodem ser identificados o **sinal analógico**,​ proveniente de um microfone ou outro dispositivo de captura, e as **amostras**,​ que correspondem ao valor do sinal medido em intervalos regulares ​de tempo. O sinal analógico acima seria então representado de forma aproximada pelo seguinte vetor de amostras:+Nessa figura podem ser identificados o **sinal analógico**,​ proveniente de um microfone ou outro dispositivo de captura, e as **amostras**,​ que correspondem ao valor do sinal medido em intervalos regulares. O sinal analógico acima seria então representado de forma aproximada pelo seguinte vetor de amostras:
  
   [0, 10, 15, 9, -5, -9, -10, 0, 10, 14, 15, 5, 0, -5, ... ]   [0, 10, 15, 9, -5, -9, -10, 0, 10, 14, 15, 5, 0, -5, ... ]
  
-O padrão PCM ([[https://​en.wikipedia.org/​wiki/​Pulse-code_modulation|Pulse-Code Modulation]]) é um dos padrões mais simples para representar ​sinais analógicos ​em meios digitais. Duas informações caracterizam um sinal codificado em PCM:+O padrão PCM ([[https://​en.wikipedia.org/​wiki/​Pulse-code_modulation|Pulse-Code Modulation]]) é um dos padrões mais simples para representar ​áudio ​em meio digital. Duas informações caracterizam um sinal codificado em PCM:
  
   * **Taxa de amostragem**:​ é o número de amostras do sinal analógico feitas por segundo. Quanto maior a taxa de amostragem, melhor é a representação digital do som, sobretudo nas frequências mais elevadas (agudos). Por outro lado, taxas de amostragem elevadas implicam em arquivos maiores. Valores típicos de taxas de amostragem são 48 kHz em DVDs e 44,1 KHz em CDs de música ([[https://​en.wikipedia.org/​wiki/​Sampling_(signal_processing)|exemplos]]).   * **Taxa de amostragem**:​ é o número de amostras do sinal analógico feitas por segundo. Quanto maior a taxa de amostragem, melhor é a representação digital do som, sobretudo nas frequências mais elevadas (agudos). Por outro lado, taxas de amostragem elevadas implicam em arquivos maiores. Valores típicos de taxas de amostragem são 48 kHz em DVDs e 44,1 KHz em CDs de música ([[https://​en.wikipedia.org/​wiki/​Sampling_(signal_processing)|exemplos]]).
Linha 82: Linha 86:
 Alguns exemplos de arquivos de áudio WAV para usar no projeto: Alguns exemplos de arquivos de áudio WAV para usar no projeto:
  
-  * {{adele.wav|Trecho de música (estéreo)}} (clique em "​salvar como..."​)+  * {{music.wav?linkonly|Trecho de música (estéreo)}} ​"One and Only", de //Audio Idols// ​(clique em "​salvar como..."​)
   * {{numbers.zip|Numbers}} (mono, 22050 KHz)   * {{numbers.zip|Numbers}} (mono, 22050 KHz)
  
Linha 94: Linha 98:
 Lembre-se que o filtro deve atuar em todos os canais do áudio da entrada. Lembre-se que o filtro deve atuar em todos os canais do áudio da entrada.
 </​note>​ </​note>​
 +
 +----
  
 ==== Informações ==== ==== Informações ====
Linha 120: Linha 126:
   samples/​channel:​ 2015435   samples/​channel:​ 2015435
  
-==== Reversão ==== +----
- +
-Este filtro produz como saída um áudio invertido, ou seja, "de trás para a frente"​ em relação ao áudio de entrada. +
- +
-Forma de chamada: +
- +
-  wavrev ​-i input -o output+
  
 ==== Ajuste de volume ==== ==== Ajuste de volume ====
Linha 140: Linha 140:
   wavvol -l 2.0 -i musica1.wav -o musica2.wav   wavvol -l 2.0 -i musica1.wav -o musica2.wav
  
-==== Ajuste automático de volume ====+----
  
-Este filtro ​permite ​o ajuste automático de volume ​do arquivo de áudio. Para tal, é necessário encontrar o valor do maior pico no sinal de áudio (em todos os canais) e usá-lo para calcular um fator de ajuste, de modo que todas as amostras de todos os canais fiquem no intervalo de 16 bits com sinal [-32767 ... +32767].+==== Normalização ==== 
 + 
 +Este filtro ​faz a normalização do áudio, ou seja, o ajuste automático de volume. Para tal, é necessário encontrar o valor do maior pico no sinal de áudio (em todos os canais) e usá-lo para calcular um fator de ajuste, de modo que todas as amostras de todos os canais fiquem no intervalo de 16 bits com sinal [-32767 ... +32767].
  
 Forma de chamada: Forma de chamada:
  
-  ​wavautovol ​-i input -o output+  ​wavnorm ​-i input -o output 
 + 
 +---- 
 + 
 +==== Reversão ==== 
 + 
 +Este filtro produz como saída um áudio invertido, ou seja, "de trás para a frente"​ em relação ao áudio de entrada. 
 + 
 +Forma de chamada: 
 + 
 +  wavrev -i input -o output 
 + 
 +----
  
 ==== Eco ==== ==== Eco ====
Linha 161: Linha 175:
 Experimente aplicar este filtro a um arquivo de voz, com um atraso bem pequeno (< 10 ms) =) Experimente aplicar este filtro a um arquivo de voz, com um atraso bem pequeno (< 10 ms) =)
 </​note>​ </​note>​
 +
 +----
  
 ==== Estéreo ampliado ==== ==== Estéreo ampliado ====
  
-O filtro de estéreo ampliado permite aumentar a separação de canais em um sinal estéreo, gerando um som mais aberto ​e envolvente. Este filtro só pode ser aplicado a sinais estéreo (com 2 canais).+O filtro de estéreo ampliado permite aumentar a separação de canais em um sinal estéreo, gerando um som mais aberto. Este filtro só pode ser aplicado a sinais estéreo (com 2 canais).
  
 Sendo R(t) e L(t) as amostras de entrada do canal direito e esquerdo em um instante t, a saída R'(t), L'(t) é calculada da seguinte forma: Sendo R(t) e L(t) as amostras de entrada do canal direito e esquerdo em um instante t, a saída R'(t), L'(t) é calculada da seguinte forma:
Linha 177: Linha 193:
  
   wavwide -l k -i input -o output   wavwide -l k -i input -o output
 +
 +----
  
 ==== Concatenação ==== ==== Concatenação ====
Linha 189: Linha 207:
 A combinação de sinais de áudio com taxas de amostragem diferentes exige um procedimento chamado //​reamostragem//​ ([[https://​ccrma.stanford.edu/​~jos/​resample/​|resampling]]),​ que pode ser complexo. Por isso, restrinja seu programa a arquivos com a mesma taxa de amostragem. A combinação de sinais de áudio com taxas de amostragem diferentes exige um procedimento chamado //​reamostragem//​ ([[https://​ccrma.stanford.edu/​~jos/​resample/​|resampling]]),​ que pode ser complexo. Por isso, restrinja seu programa a arquivos com a mesma taxa de amostragem.
 </​note>​ </​note>​
 +
 +----
  
 ==== Mistura ==== ==== Mistura ====
Linha 201: Linha 221:
 Ao somar as amostras, cuide para não saturar a saída, o que pode gerar distorção ([[https://​en.wikipedia.org/​wiki/​Clipping_(audio)|clipping]]). Ao somar as amostras, cuide para não saturar a saída, o que pode gerar distorção ([[https://​en.wikipedia.org/​wiki/​Clipping_(audio)|clipping]]).
 </​note>​ </​note>​
 +
 +----
 +
 +==== Outros filtros (ideias) ====
 +
 +  * extrair um canal de um áudio stereo
 +  * juntar dois áudios mono em um áudio stereo ​
 +  * aplicar um atraso //t// a um áudio (t pode ser negativo)
 +  * efeito //phaser// e outros
 +  * ... (ideias são bem-vindas)
 +
 +----
  
 ===== Atividade ===== ===== Atividade =====
  
-  * Implementar ​os filtros acima definidos ​como arquivos e comandos separadosExemplo: ​o filtro de volume deve ser implementado em um arquivo ''​wavvol.c''​ que gera um executável ''​wavvol'',​ e assim por diante.+O projeto consiste em implementar ​os filtros acima definidos. 
 + 
 +==== Requisitos ==== 
 + 
 +  * Cada filtro é um comando separado. Por exemplo, ​o filtro de volume deve ser implementado em um arquivo ''​wavvol.c''​ que gera um executável ''​wavvol'',​ e assim por diante.
   * Os filtros devem aceitar como entrada sons no formato WAV PCM 16 bits com sinal e devem gerar como saída sons nesse mesmo formato.   * Os filtros devem aceitar como entrada sons no formato WAV PCM 16 bits com sinal e devem gerar como saída sons nesse mesmo formato.
   * As rotinas comuns (leitura/​escrita de arquivos, tratamento da linha de comando, etc) devem ser implementadas em arquivos separados, cujos cabeçalhos são incluídos nos arquivos de implementação dos filtros.   * As rotinas comuns (leitura/​escrita de arquivos, tratamento da linha de comando, etc) devem ser implementadas em arquivos separados, cujos cabeçalhos são incluídos nos arquivos de implementação dos filtros.
Linha 256: Linha 292:
 Caso a adição de eco provoque //​clipping//,​ pode-se atenuar o sinal antes de processá-lo:​ Caso a adição de eco provoque //​clipping//,​ pode-se atenuar o sinal antes de processá-lo:​
  
-  wavvol -l 0.5 -i input.wav | wavrev | wavecho -t 500 -l 0.5 | wavrev | wavautovol ​-o output.wav+  wavvol -l 0.5 -i input.wav | wavrev | wavecho -t 500 -l 0.5 | wavrev | wavnorm ​-o output.wav
  
 <note tip> <note tip>
prog2/processamento_de_audio.1564689720.txt.gz · Última modificação: 2019/08/01 17:02 por maziero