2013-10-28 16 views
3

사운드 카드 (예 : 분산)로 녹음 된 잡음을 측정하기 위해 Raspberry Pi를 기반으로하는 장치를 현재 만들고 있습니다. python, 나는 더 많은 계산을 위해 float-number로 audiosample을 얻는 방법을 알아 냈습니다.pyaudio-stream에서 오디오 샘플을 float 번호로 가져 오기

내가 무엇을 했는가 :
어떤 종류의 테스트 신호를 생성하기 위해 Line-In-To-Chinch-Adapter를 사용하고 플러그를 만진다. , 나는 사운드 카드에서 1024 개 샘플 5 프레임 예를 들어 얻고 싶은 이상적인에서
을 : 예를 들어 대담 또는 matlab에 대한에 기록
은 내가 싶어

enter image description here

처럼 그럴듯한 결과를 보여줍니다 추가 계산을 위해 부동 소수점 숫자로 목록, 튜플 또는 숫자 배열로 변환합니다.

이 게시물의 끝 부분에있는 코드를 파이썬/pyaudio와이를 달성하려고 할 때, 나는 이런 식으로 뭔가있어

: 때문에 나는 파이썬으로 얻은 값을 보인다는 사실을

enter image description here

을 Matlab (및 다른 사람들)에서 약 2의 요소로 그것들과 다르다면, 나는 무언가를 감시했거나 틀린 것을했다고 생각합니다. struct.unpack 지역의 어딘가에서 실수를 저질렀다고 생각합니다. 그러나 정확히 어디에서 그랬는지 알 수는 없습니다. 나는 오류가 어디에 있고 내가 잘못했는지 지적하면서 도움을 요청하고 싶습니다.

몇 가지 샘플을 받고 그들에게 플로팅

리틀 testcode "struct.unpack"를 대체 할

import pyaudio 
import struct 
import matplotlib.pyplot as plt 

FORMAT = pyaudio.paFloat32 
SAMPLEFREQ = 44100 
FRAMESIZE = 1024 
NOFFRAMES = 220 
p = pyaudio.PyAudio() 
print('running') 

stream = p.open(format=FORMAT,channels=1,rate=SAMPLEFREQ,input=True,frames_per_buffer=FRAMESIZE) 
data = stream.read(NOFFRAMES*FRAMESIZE) 
decoded = struct.unpack(str(NOFFRAMES*FRAMESIZE)+'f',data) 

stream.stop_stream() 
stream.close() 
p.terminate() 
print('done') 
plt.plot(decoded) 
plt.show() 

답변

9

에 한번 사용 "numpy.fromstring"기능을 :

import numpy 
stream = p.open(format=FORMAT,channels=1,rate=SAMPLEFREQ,input=True,frames_per_buffer=FRAMESIZE) 
data = stream.read(NOFFRAMES*FRAMESIZE) 
decoded = numpy.fromstring(data, 'Float32'); 

이 알려이 작동하는지 확인 당신

+0

누군가가 여기에 답변을 게시 할 때 어떤 종류의 메일 통지가 있다고 생각했기 때문에 나는 조금 늦게 읽었습니다. 그러나 실제로, numpy.fromstring는 트릭을했습니다! 고맙습니다. –

+1

간단히 배열을 출력하기 위해이 코드를 변경했습니다. 이 값을 주파수로 변환하는 방법에 대한 아이디어가 있습니까? –