欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > [raspberrypi 0w and respeaker 2mic]实时音频波形

[raspberrypi 0w and respeaker 2mic]实时音频波形

2025/4/16 23:21:31 来源:https://blog.csdn.net/qq_27158179/article/details/147119150  浏览:    关键词:[raspberrypi 0w and respeaker 2mic]实时音频波形

0. 环境

ubuntu22主机,    192.168.8.162,
raspberry 0w,    192.168.8.220
路由器
 

1. 树莓派

# rpi - send.py
# 或者命令行:arecord -D plughw:1,0 -t wav -f cd -r 16000 -c 2 | nc 192.168.8.162 12345import socket
import pyaudios = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host = '192.168.8.162'
port = 12345s.connect((host, port)) RESPEAKER_RATE = 16000
RESPEAKER_CHANNELS = 2
RESPEAKER_WIDTH = 2
RESPEAKER_INDEX = 0  # refer to input device id
CHUNK = 4096p = pyaudio.PyAudio()stream = p.open(rate=RESPEAKER_RATE,format=p.get_format_from_width(RESPEAKER_WIDTH),channels=RESPEAKER_CHANNELS,input=True,input_device_index=RESPEAKER_INDEX,frames_per_buffer=CHUNK,)while True:data = stream.read(CHUNK, exception_on_overflow=False)s.sendall(data)#print("data.hex()", data.hex())print("len(data)", len(data))stream.stop_stream()
stream.close()
s.close()

2. 电脑端

# ubuntu22主机:client - recv2micfft.py
import threading
import time
import socket
import pyaudio
import numpy as np
import matplotlib.pyplot as plthost = '192.168.8.162'
port = 12345RESPEAKER_RATE = 16000
RESPEAKER_CHANNELS = 2
RESPEAKER_WIDTH = 2
RESPEAKER_INDEX = 0  # refer to input device id
CHUNK = 4096
RECORD_SECONDS = 2np_ch1 = None
np_ch2 = Nonedef audio_stream():global np_ch1global np_ch2s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind((host, port))print('server listening at',(host, (port)))s.listen(1)conn, addr = s.accept()p = pyaudio.PyAudio()stream = p.open(rate=RESPEAKER_RATE,format=p.get_format_from_width(RESPEAKER_WIDTH),channels=RESPEAKER_CHANNELS,output=True,input_device_index=RESPEAKER_INDEX,frames_per_buffer=CHUNK,)while True:data = conn.recv(CHUNK*RESPEAKER_CHANNELS*RESPEAKER_WIDTH)stream.write(data)np_data1 = np.fromstring(data, dtype=np.int16)[0::2]np_data2 = np.fromstring(data, dtype=np.int16)[1::2]if np_ch1 is None:np_ch1 = np_data1np_ch2 = np_data2elif np_ch1.shape[0] / RESPEAKER_RATE < RECORD_SECONDS:np_ch1 = np.append(np_ch1, np_data1)np_ch2 = np.append(np_ch2, np_data2)else:idx = []for i in range(len(np_data1)):idx.append(i)np_ch1 = np.delete(np_ch1, idx)np_ch2 = np.delete(np_ch2, idx)np_ch1 = np.append(np_ch1, np_data1)np_ch2 = np.append(np_ch2, np_data2)stream.stop_stream()stream.close()conn.close()s.close()def fft_show():global np_ch1global np_ch2plt.ion()# fig, ax = plt.subplots()# 创建两个子图f, (ax1, ax2) = plt.subplots(2, 1)try:while True:if np_ch1 is None:continue# 将音频数据转换为NumPy数组#np_data1 = np.frombuffer(data, dtype=np.int16)[0::2]#np_data2 = np.frombuffer(data, dtype=np.int16)[1::2]# 计算频谱# freq_data1 = np.fft.fft(np_data1)# freq_data1 = np.abs(freq_data1)# freq_data2 = np.fft.fft(np_data2)# freq_data2 = np.abs(freq_data2)# 更新绘图ax1.clear()ax1.plot(np_ch1)ax2.clear()ax2.plot(np_ch2)plt.draw()plt.pause(0.01)except KeyboardInterrupt:print("实时频谱分析结束。")# 关闭绘图窗口plt.ioff()plt.close()t1 = threading.Thread(target=audio_stream, args=())
t2 = threading.Thread(target=fft_show, args=())
t1.start()
t2.start()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词