Como extrair informações de frequência a partir de um fluxo de entrada de áudio (usando PortAudio)?

StackOverflow https://stackoverflow.com/questions/259451

Pergunta

Eu quero gravar som (voz) usando PortAudio (PyAudio) ea saída correspondente onda de som na tela. Desesperada como eu sou, eu sou incapaz de extrair a informação de frequência do fluxo de áudio para que eu possa desenhá-lo em forma Hz / tempo.


Aqui está um exemplo de código trecho que grava e reproduz áudio gravado durante cinco segundos, em caso de ajuda qualquer:

p = pyaudio.PyAudio()

chunk = 1024
seconds = 5

stream = p.open(format=pyaudio.paInt16,
                channels=1,
                rate=44100,
                input=True,
                output=True)

for i in range(0, 44100 / chunk * seconds):
    data = stream.read(chunk)
    stream.write(data, chunk)

Eu gostaria de extrair a informação necessária a partir da variável acima "dados". (Ou use alguma outra abordagem de alto nível com PortAudio ou outra biblioteca com ligações Python.)


Eu ficaria muito grato por qualquer ajuda! petiscos mesmo vagamente relacionados de sabedoria audio-análise são apreciados. :)

Foi útil?

Solução

O que você quer é, provavelmente, a transformada de Fourier dos dados de áudio. Há vários pacotes que podem calcular isso para você. scipy e numpy é dois deles. É muitas vezes chamado de "Rápida de Fourier Transform" (FFT), mas isso é apenas o nome do algoritmo.

Aqui está um exemplo disso do uso: https : //svn.enthought.com/enthought/browser/Chaco/trunk/examples/advanced/spectrum.py

Outras dicas

A Transformada de Fourier não vai ajudá-lo muito se você quer a análise a ser realizada tanto na frequência e no domínio do tempo. Você pode querer ter um olhar para "Wavelet transformações". Há um pacote chamado pywavelets ... http://www.pybytes.com/pywavelets/#discrete-wavelet- transformar-dwt

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top