라즈베리파이 파이썬2 FFT연산 도와 주세요ㅠㅠ
글쓴이: matty10 / 작성시간: 월, 2016/11/28 - 9:24오전
특정 음원의 주파수를 수치화 하고 싶어서 FFT연산을 이용한 코드를 찾게 되었는데 실행은 되지만 'data'에 값이 안들어가는거 같네요ㅠㅠ Python을 사용해 본 적이 없어서 잘 모르겠습니다 도와주세요ㅠㅠ
# Read in a WAV and find the freq's import pyaudio import wave import numpy as np chunk = 2048 # open up a wave wf = wave.open('/home/pi/Desktop/piproject/Korg-Trition-Slow-Choir-ST-C4.wav', 'rb') swidth = wf.getsampwidth() RATE = wf.getframerate() # use a Blackman window window = np.blackman(chunk) # open stream p = pyaudio.PyAudio() stream = p.open(format = p.get_format_from_width(wf.getsampwidth()), channels = wf.getnchannels(), rate = RATE, output = True) # read some data data = wf.readframes(chunk) # play stream and find the frequency of each chunk while len(data) == chunk*swidth: # write data out to the audio stream stream.write(data) # unpack the data and times by the hamming window indata = np.array(wave.struct.unpack("%dh"%(len(data)/swidth),\ data))*window # Take the fft and square each value fftData=abs(np.fft.rfft(indata))**2 # find the maximum which = fftData[1:].argmax() + 1 # use quadratic interpolation around the max if which != len(fftData)-1: y0,y1,y2 = np.log(fftData[which-1:which+2:]) x1 = (y2 - y0) * .5 / (2 * y1 - y2 - y0) # find the frequency and output it thefreq = (which+x1)*RATE/chunk print "The freq is %f Hz." % (thefreq) else: thefreq = which*RATE/chunk print "The freq is %f Hz." % (thefreq) # read some more data data = wf.readframes(chunk) if data: stream.write(data) stream.close() p.terminate()
Forums:
실행시 이런 오류가 나타나네요
ALSA lib pcm_dsnoop.c:606:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dmix.c:1029:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_dmix.c:1029:(snd_pcm_dmix_open) unable to open slave
파이썬 버전은 2.7.12입니다
해당 코드에는 wav 파일을 play 하는 부분도
해당 코드에는 wav 파일을 play 하는 부분도 포함되어있네요
이부분 관련된 오류로 보입니다.
play하는 것이 필요없다면 pyaudio, p, stream 이 포함된 라인을
모두 주석처리하면 동작할 것입니다.
예를 들어 아래와 같이 되겠네요.
감사합니다! 오류 해결 되었네요!
더 이상 ALSA 오류는 출력 안되네요 ㅎㅎ
혹시 실례가 되지 않는다면 data에 값은 입력 되지만 while 문이 동작하지 않는 이유를 여쭤봐도 될까요??ㅠㅠ
코드 가져온 곳에 mono(1channel),
코드 가져온 곳에 mono(1channel), 16bit signed little-endian, PCM wav 만 된다고 써있지 않던가요 ?
제가 찾은 곳에서는 그런 말은 없더라고요ㅠㅠ
제가 찾은 곳에서는 그런 말은 없더라고요ㅠㅠ
댓글 달기