【发布时间】:2019-03-07 18:57:34
【问题描述】:
我正在尝试在 python 中创建一个程序,它可以从现场音频(通过麦克风)创建一个示波器
与普通示波器的不同之处在于它只会显示一个波长,例如(期望的输出):
这显示了三种不同的波长,以及它们在程序中的显示方式。
我目前的进展:
- 我创建了一个程序来显示图表并清除和重绘它
- 然后我创建了一个可以实时显示声音的程序(虽然它很慢,如果可能的话最好修复一下)
代码 #1:
import matplotlib.pyplot as plt
import time
plt.ion()
#y1 is the data
y1 = [0,0.309,0.587,0.809,0.951,1,0.951,0.809,0.587,0.309,0, -0.309, -0.587, -0.809, -0.951, -1, -0.951, -0.809, -0.587, -0.309, 0]
plt.plot(y1, 'r.-') #Graph with data
plt.plot([0 for _ in y1]) #Straight line at y=0
while True:
#Update data to new data
#y1 = new data
plt.plot(y1, 'r.-') #Graph with data
plt.plot([0 for _ in y1]) #Straight line at y=0
plt.draw()
plt.pause(0.5) #Time for one wave? Need some way to find this...
plt.clf()
代码 #2:
import pyaudio
import numpy as np
import matplotlib.pyplot as plt
import time
RATE = 44100
CHUNK = int(RATE/20) # RATE / number of updates per second
def soundplot(stream):
t1=time.time()
data = np.fromstring(stream.read(CHUNK),dtype=np.int16)
plt.pause(0.1) #To draw graph!
plt.clf()
plt.plot(data)
plt.draw()
plt.axis([0,len(data),-2**16/2,2**16/2])
print("took %.02f ms"%((time.time()-t1)*1000))
if __name__=="__main__":
p=pyaudio.PyAudio()
stream=p.open(format=pyaudio.paInt16,channels=1,rate=RATE,input=True,
frames_per_buffer=CHUNK)
for i in range(int(20*RATE/CHUNK)): #do this for 10 seconds
soundplot(stream)
stream.stop_stream()
stream.close()
p.terminate()
编辑:为了清楚起见,我想要的结果是如图所示显示一个波长,而不是第二个代码产生的多个波长
【问题讨论】:
-
这很酷,但是您有问题或需要帮助吗?如果是这样,您应该更新您的帖子以包含您需要的内容。
-
谢谢!是的,我只需要显示一个波长,如图所示,而不是同时显示多个@RandomDavis
-
@RandomDavis 我进行了编辑以使其更清晰
标签: python python-3.x audio microphone oscilloscope