电子音乐教室是一个基于 Qt/C++ 开发的一对多音乐教学系统,由一台教师 PC 连接最多 112 个学生终端,底层是 FPGA 硬件,PC 与 FPGA 之间通过自定义 UDP 帧协议走局域网通信。
核心流程:教师端通过 QAudioSource 采集麦克风音频,经 FFmpeg AudioFilterProcessor 滤波处理后,SupervisionSingleTask 根据当前授课模式(讲解、互动、分组教学、自习、分组练习、考试评测共 6 种)动态调度 MixSingleTask 完成实时混音,再交由 SenderTask 按 1024 字节定长帧打包(帧头 0xAA55、22 字节设备地址、命令类型/码、990 字节数据区、CRC16-CCITT 校验、帧尾 0x55AA),通过 6 个 WaitAndSendTask 子线程按地址段分组轮发到各学生终端的 FPGA 上播放。
学生端回传的数据——音频流、MIDI 键盘、NFC 刷卡、举手信号等——经 FPGA 同样按定长帧打包,通过 UDP 上报到 PC 端端口 6102,9 个 OperationTask 线程并发解析,分派到对应业务模块处理。
整个系统的线程模型采用生产者-消费者架构:全局消息队列 messages[112] 配合 std::mutex 和 QWaitCondition 实现线程安全的数据入队与消费,SenderTask 作为主调度协调所有发送子线程,ReceiverTask 绑定端口接收数据并推入队列唤醒解析线程。