입력 오디오 스트림에서 주파수 정보를 추출하는 방법 (Portaudio 사용)?

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

문제

Portaudio (Pyaudio)를 사용하여 사운드 (음성)를 녹음하고 화면의 해당 사운드 웨이브를 출력하고 싶습니다. 희망이없는 것처럼, 나는 오디오 스트림에서 주파수 정보를 추출하여 HZ/시간 형식으로 그릴 수 있습니다.


다음은 도움이되는 경우 5 초 동안 녹음 된 오디오를 기록하고 재생하는 예제 코드 스 니펫입니다.

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)

위의 변수 "데이터"에서 필요한 정보를 추출하고 싶습니다. (또는 Portaudio 또는 Python 바인딩이있는 다른 라이브러리와 함께 다른 높은 수준의 접근 방식을 사용하십시오.)


도움을 주셔서 감사합니다! 오디오 분석 지혜의 모호하게 관련된 욕조조차도 감사합니다. :)

도움이 되었습니까?

해결책

당신이 원하는 것은 아마도 오디오 데이터의 푸리에 변환 일 것입니다. 이를 계산할 수있는 몇 가지 패키지가 있습니다. scipy 그리고 numpy 그들 중 두 명입니다. 그것은 종종 "Fast Fourier Transform"(FFT)이라고 불립니다. 그러나 그것은 단지 알고리즘의 이름 일뿐입니다.

다음은 사용법의 예입니다. https://svn.enthliet.com/enthliet/browser/chaco/trunk/examples/advanced/spectrum.py

다른 팁

푸리에 변환은 주파수와 시간 영역 모두에서 분석을 수행하려면 많은 도움이되지 않습니다. "Wavelet Transforms"를보고 싶을 수도 있습니다. Pywavelets라는 패키지가 있습니다 ...http://www.pybytes.com/pywavelets/#discrete wavelet-transform-dwt

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top