12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import pyaudio
- import numpy as np
- from maix import camera, image, display
- import time
- CHUNK = 1024
- FORMAT = pyaudio.paInt16
- CHANNELS = 2
- RATE = 44100
- p = pyaudio.PyAudio()
- img = image.new(size=(320, 240), color=(0, 0, 0), mode="RGB") # 创建一张背景图
- stream = p.open(format=FORMAT,
- channels=CHANNELS,
- rate=RATE,
- input=True,
- frames_per_buffer=CHUNK)
- intensity_recorder = []
- intensity_show = [0]*40
- print(len(intensity_show))
- # 循环读取音频数据
- f_t = np.fft.fftfreq(CHUNK, 1 / RATE) # 传入信号长度及采样率,返回对应频率
- while True:
- stream.start_stream()
- str_data = stream.read(CHUNK) # 从麦克风获取一帧音频数据
- stream.stop_stream()
- print("type str_data:",type(str_data))
- print("str_data:",str_data)
- # 将音频数据转换为NumPy数组
- arr = np.frombuffer(str_data, dtype=np.int16) #在这里用numpy.frombuffer与
- #numpy.fromstring效果相同
- print("arr:",arr)
- print("type arr1:",type(arr))
- arr.shape = -1,2
- # 将数组转置
- arr = arr.T
- print("arr2:",arr)
- print("3",len(arr[0].tolist()))
- f_signal = np.fft.fft(arr[0])
- #f_signal=np.abs(f_signal)
- #print("ft:",f_t)
-
- #print("ft len:",len(f_t.tolist()))
- #print("f_signal:",f_signal)
- #print("f_signal len:",len(f_signal.tolist()))
- # 取前512个数据,即正频率部分
- fft_data = f_signal[:512]
- # 将前512个数据分成32组,每组包含16个数据
- fft_data = np.split(fft_data, 32)
- # 对每组数据进行平均,得到每组的平均幅值
- avg_data = np.abs(fft_data).mean(axis=1)
- print(avg_data)
- img.clear()
- for i in range(0,32):
- height=int(avg_data.tolist()[i]/500)
- intensity_show[i] = image.new(size=(7, height), color=(40, 144, 152), mode="RGB")
- img.draw_image(intensity_show[i], i*8, 240-height)
- #img.draw_string(30, 20, "intensity"+str(intensity), scale=1.0,color=(255, 255, 255), thickness=1)
- display.show(img)
- print("main_thread_time:", time.time())
- # 关闭流和PyAudio对象
- stream.stop_stream()
- stream.close()
- p.terminate()
|