2013-10-28 49 views
3

由於我目前正在構建基於Raspberry Pi的設備,用於測量從聲卡錄製的噪音(例如方差)中的某些內容,並嘗試在內部執行此操作蟒蛇,我搞不明白如何獲得audiosample作爲浮點數進一步計算。從pyaudio-stream獲取音頻採樣作爲浮點數

我做了什麼:
取了一條線對齊的適配器,並觸摸插頭以產生某種測試信號。
錄製到例如Audacity的或Matlab顯示似是而非的結果,如

enter image description here

我想:
在理想的,我想例如5幀從聲卡1024個樣本,並將它們轉換爲列表,元組或numpy數組作爲浮點數進行進一步計算。

當試圖用在這篇文章的末尾代碼蟒蛇/ pyaudio實現這一目標,我有這樣的事情:

enter image description here

由於這樣的事實,我與蟒蛇得到了價值觀似乎在Matlab(和其他)中與他們有大約兩倍的差異,我想我已經監督了一些事情或做了錯誤的事情。 我想我在struct.unpack區域的某個地方犯了一個錯誤,但無法弄清楚究竟在哪裏或爲什麼。 我想請你幫忙,指出錯誤在哪裏,我做錯了什麼。

用於獲取一些樣本,繪製他們小testcode:

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」 功能,以取代 「struct.unpack」:

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

我改變了這段代碼,只是打印出數組。任何想法如何將這些值轉換爲頻率? –