segunda-feira, maio 27, 2013

Histogram de Áudio em Processing


Histograma é uma representação gráfica de uma distribuição de classes de frequência de alguma medição. Abordaremos aqui a representação de um histograma de áudio, onde o eixo x representa a amplitude da frequência de áudio e o eixo y, a quantidade de vezes que aquela frequência foi expressa no arquivo de um determinado áudio.


Em processing criamos a função histogram(float[] arrayAudio), onde ela recebe o array do arquivo de áudio. Após isso, cria-se um array auxiliar onde será armazenado a quantidade de vezes que uma determinada frequência é usada. Por tratar-se de uma amostra de elementos contínuo e que tende a um número muito elevado, a frequência será representada em inteiros, sendo este o próprio index do array.

Assim sendo, a função ficará descrita:

float[] histogram(float[] arrayIn) {
  float[] histog = new float[];

  for(int i = 0; i < arrayIn.length; i++) {
      for(int j = (int) arrayIn[i] * 10000; j >=0; j--){
        histog[j]++;
  }}
  return histog;
}

No exemplo de áudio, as frequências ficam sempre próximas a 0, em potência 10E-4, sendo assim, ajustamos o código para "dar um zoom" na frequência, onde [linha 5...] int j = (int) arrayIn[i] * 10000.

Código completo