2008-11-03 5 views
2

PortAudio (PyAudio)를 사용하여 소리 (음성)를 녹음하고 해당 음파를 화면에 출력하고 싶습니다. 절망적입니다. 오디오 스트림에서 주파수 정보를 추출 할 수 없으므로 Hz/시간 형식으로 그릴 수 있습니다.(PortAudio를 사용하여) 입력 오디오 스트림에서 주파수 정보를 추출하는 방법은 무엇입니까?

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) 

나는 위의 변수 "데이터"에서 필요한 정보를 추출 할 :


여기가 어떤 도움이 경우 예제 코드는, 기록 및 재생이 5 초 동안 오디오를 기록 니펫입니다. (또는 파이썬 바인딩 PortAudio와 다른 높은 수준의 접근 방식 또는 다른 라이브러리를 사용합니다.)


내가 어떤 도움을 매우 감사하게 될 거라고! 심지어 오디오 분석의 지혜에 관한 막연한 관련 자료도 인정됩니다. :)

+0

스펙트럼 분석기를 만들고 싶습니까? – endolith

답변

4

원하는 것은 아마도 오디오 데이터의 푸리에 변환입니다. 당신을 위해 그것을 계산할 수있는 몇 가지 패키지가 있습니다. scipynumpy은 그 중 두 가지입니다. 종종 "FFT (Fast Fourier Transform)"라는 이름이 있지만 알고리즘의 이름 일뿐입니다. 당신이 분석은 주파수 및 시간 영역 모두에서 실시하려는 경우 https://svn.enthought.com/enthought/browser/Chaco/trunk/examples/advanced/spectrum.py

1

푸리에는 당신에게 많은 도움이되지 않습니다 변환 : 그것은 사용의의 여기

은 예입니다. "Wavelet Transforms"에 대해 살펴볼 수 있습니다. pywavelets라는 패키지가 있습니다 ... http://www.pybytes.com/pywavelets/#discrete-wavelet-transform-dwt

+0

들어오는대로 각 청크의 푸리에 변환을 수행하는 것은 웨이블릿 변환과 동일한 종류의 STFT와 같습니다. – endolith

관련 문제