Existe um programa que pode determinar o tom mais alto dentro de um arquivo de áudio?

13

Existe um programa do Windows que pode determinar a "frequência de onda sonora mais alta" encontrada em um arquivo de áudio (por exemplo, arquivo mp3)?

Por exemplo, ele deve ser capaz de analisar o arquivo Dog-Whistle-0 e determinar que a frequência mais alta encontrado dentro do arquivo é aproximadamente ~ 12000 Hz.

Além disso, ele deve ser capaz de analisar Piano.mp3 e determinar a nota mais alta.

    
por Pacerier 13.06.2012 / 13:57

2 respostas

13
O

R é multiplataforma e gratuito / de código aberto.

Carregue e carregue as bibliotecas tuneR e seewave (instale-as a partir do gerenciador de pacotes, se ainda não estiver instalado).

library(tuneR)
library(seewave)

Em seguida, carregue seu arquivo MP3 ou WAV:

w = readMP3("dog-whistle-0.mp3")
w = readWave("dog-whistle-0.wav")

Agora, vamos traçar o espectro e seus picos:

fpeaks(meanspec(w), nmax=1)

Resultado:

Resultadonumérico:

fpeaks(meanspec(w),nmax=1,plot=FALSE)12.05859

Oacimasófuncionacomdadosnãomusicais.Quandovocêanalisafreqüênciasdemúsica,vocêveráqueasfreqüênciasmaisaltasestarãosempreemtornode12a20kHz,dependendodo(s)instrumento(s)envolvido(s).Noentanto,estafrequênciamaisaltanãolhedaráumaestimativadanotaqueestásendotocada,umavezqueumanotamusical,quandotocadaporuminstrumento,serácompostademúltiplasfreqüências.

Esteéochamado"timbre" de um instrumento, e você verá que um A em 440 Hz por uma flauta incluirá diferentes componentes de freqüência em comparação com um A tocado por uma guitarra elétrica.

Sua melhor aposta é executar uma análise de frequência dominante observando os picos de frequência nas janelas de tempo variável e verificar onde ocorre o mais alto.

Não existe algo como "frequência ao longo do tempo". Você só pode traçar a freqüência média (ou dominante) durante certo tempo de deslizamento janelas . A Seewave oferece algumas funções relacionadas à seleção de janelas de tempo, mas fica bastante complicada.

Você poderia usar

s = specprop(meanspec(w, from=10, to=11)) 

para obter as propriedades do espectro de 10 a 11 segundos e, em seguida, chamar s$centroid ou s$mean para obter o centróide ou as frequências médias dessa janela de tempo específica (embora 1 segundo seja muito grande para análise de áudio). >

Se o seu arquivo Wave usa amostragem de 44,1 kHz, você pode reduzir a amostragem para reduzir o esforço de computação, por exemplo, para 16 kHz.

w = downsample(w, 16000)

Mas lembre-se que, de acordo com o Teorema de Nyquist , a freqüência máxima que pode ser representada agora é de 8 kHz.

Você também pode procurar um software de detecção de pitch. Como este , que exige o MATLAB.

    
por 13.06.2012 / 14:17
8

Já experimentou o Audacity ? É uma ferramenta freeware que possui algumas ferramentas de análise bastante sofisticadas, incluindo um comando Espectro de plotagem acessado de Analisar - > Plotar espectro ... .

Observe que você obtém resultados diferentes com a versão MP3 do arquivo em comparação com a versão WAV, porque a compactação MP3 alterou a forma de onda e introduziu artefatos / aliasing.

Edit: Esses arquivos de som que você vincula não são bons exemplos para isso. Os arquivos de frequência mais alta são apenas amostrados em 44,1KHz, que é adaptado para a audição humana (em torno de 20KHz no máximo). Você não pode representar frequências de ultra-som sem aumentar a taxa de amostragem.

    
por 13.06.2012 / 14:12

Tags