CoefficientX 2023-03-07 10:43 采纳率: 0%
浏览 195
已结题

如何将树莓派采集的音频信号实时传输给PC

问题:如何将树莓派采集的音频信号实时传输给PC
我是一个树莓派的初学者,原本尝试用matlab simulink,但是win能识别到sd卡但是matlab怎么也识别不到,因此没办法使用simulink。
于是我想学习新的方法,让树莓派直接与PC通信,最好是能通过有线连接让树莓派采集的音频信号实时传输给PC。
我在网上找了很久,都没有合适的解决方案。谢谢

  • 写回答

11条回答 默认 最新

  • 极客智能体-在线 2023-03-07 18:22
    关注

    以下答案由GPT-3.5大模型与博主波罗歌共同编写:
    可以通过网络连接的方式将树莓派采集的音频数据实时传输到 PC 上,具体步骤如下:

    1. 树莓派采集音频信号,并将其转换为数字信号。

    我们可以使用树莓派自带的音频输入口,或者通过 USB 音频采集设备连接到树莓派,再通过 Python 编程,使用 PyAudio 库实现音频数据采集和数字信号转换。

    下面是一个简单的示例代码:

    import pyaudio
    
    CHUNKSIZE = 1024
    RATE = 44100
    
    # 初始化 PyAudio
    p = pyaudio.PyAudio()
    stream = p.open(format=pyaudio.paInt16, channels=1, rate=RATE, input=True, frames_per_buffer=CHUNKSIZE)
    
    # 循环采集音频数据
    while True:
        # 从麦克风获取音频数据
        data = stream.read(CHUNKSIZE)
        
        # 处理音频数据,可以加入实时分析或者其它算法
        
        # 发送音频数据到 PC
        # 这里省略网络连接部分,后面会给出更详细的实现方式
    
    1. 将采集到的音频数据通过网络连接发送到 PC。

    可以使用 Python 的 socket 库实现网络连接和数据传输。具体步骤如下:

    在树莓派上创建一个服务器,等待 PC 连接,并将采集到的音频数据发送给 PC:

    import socket
    import struct
    import pyaudio
    
    CHUNKSIZE = 1024
    RATE = 44100
    
    # 初始化 PyAudio
    p = pyaudio.PyAudio()
    stream = p.open(format=pyaudio.paInt16, channels=1, rate=RATE, input=True, frames_per_buffer=CHUNKSIZE)
    
    # 创建一个 TCP 服务器
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('0.0.0.0', 9999))
    server_socket.listen(5)
    
    # 等待 PC 连接
    print('等待 PC 连接...')
    client_socket, addr = server_socket.accept()
    print('PC 已经连接:', addr)
    
    # 循环采集音频数据,并发送给 PC
    while True:
        # 从麦克风获取音频数据
        data = stream.read(CHUNKSIZE)
        
        # 编码音频数据
        packed_data = struct.pack('h'*CHUNKSIZE, *struct.unpack('h'*CHUNKSIZE, data))
        
        # 发送音频数据到 PC
        client_socket.sendall(packed_data)
    

    在 PC 上创建一个客户端,连接到树莓派的服务器并接收音频数据:

    import socket
    import struct
    import pyaudio
    
    CHUNKSIZE = 1024
    RATE = 44100
    
    # 初始化 PyAudio
    p = pyaudio.PyAudio()
    stream = p.open(format=pyaudio.paInt16, channels=1, rate=RATE, output=True)
    
    # 连接到树莓派的服务器
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('192.168.0.100', 9999))
    
    # 循环接收音频数据
    while True:
        # 接收音频数据
        packed_data = client_socket.recv(CHUNKSIZE*2)
        
        # 解码音频数据
        data = struct.unpack('h'*CHUNKSIZE, packed_data)
        
        # 播放音频数据
        stream.write(data)
    

    需要注意的是,在客户端连接服务器时,需要将 IP 地址改成树莓派的实际 IP 地址。

    上面给出的示例代码只是一个简单的实现,如果需要更稳定和高效的方式,可以考虑使用 UDP 协议或者第三方框架,如 Flask 和 SocketIO 等。
    如果我的回答解决了您的问题,请采纳!

    评论

报告相同问题?

问题事件

  • 系统已结题 3月15日
  • 创建了问题 3月7日