Skip to main content

reSpeaker XVF3800 USB Mic Array with XIAO ESP32S3 UDP Audio Streaming

概要

このプロジェクトでは、ReSpeaker XVF3800マイクロフォンアレイとXIAO ESP32S3ボードを使用したリアルタイム音声ストリーミングを実演します。音声はI2S経由でキャプチャされ、UDP経由でローカルマシン上で動作するサーバーに送信され、そこで.wavファイルとして保存・処理されます。

pir

機能概要

このスケッチは以下のタスクを実行します:

  • 指定されたWi-Fiネットワークに接続します。
  • UDPサーバー(例:ホストPC上で動作するPythonスクリプト)に接続します。
  • XIAO ESP32S3を使用してReSpeaker XVF3800からI2S経由でリアルタイム音声をキャプチャします。
  • キャプチャした音声を生データとして送信します。

Arduinoコード

アップロード前に以下のフィールドを更新してください:

// WiFi credentials
const char* ssid = "Your-SSID";
const char* password = "WIFI-PASSWORD";
// UDP target
const char* udpAddress = "192.168.X.X"; // Change to PC/server IP
const int udpPort = 12345; // Port to send audio

完全なコード(約5秒間の音声をストリーミング)

#include "WiFi.h"
#include "WiFiUdp.h"
#include "AudioTools.h"

// WiFi credentials
const char* ssid = "Your-SSID";
const char* password = "WIFI-PASSWORD";

// UDP target
const char* udpAddress = "192.168.X.X"; // Change to PC/server IP
const int udpPort = 12345; // Port to send audio

WiFiUDP udp;

// Audio: 16kHz, stereo, 32-bit
AudioInfo info(16000, 2, 32);
I2SStream i2s_in;
I2SConfig i2s_config;

// 5 sec of audio = 128kB/s × 5 = 640 kB
#define PACKET_SIZE 1024
#define NUM_PACKETS 625 // 5 seconds worth

// Encoded WAV output to UDP
EncodedAudioStream out_stream(&udp, new WAVEncoder());
StreamCopy copier(out_stream, i2s_in, PACKET_SIZE);

void connectWiFi() {
Serial.printf("Connecting to WiFi: %s\n", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("\nConnected!");
}

void setupI2SInput() {
i2s_config = i2s_in.defaultConfig(RX_MODE);
i2s_config.copyFrom(info);

// XVF3800 pins
i2s_config.pin_bck = 8;
i2s_config.pin_ws = 7;
i2s_config.pin_data = 44;
i2s_config.pin_data_rx = 43;
i2s_config.is_master = true;

i2s_in.begin(i2s_config);
Serial.println("I2S input started.");
}

void setup() {
Serial.begin(115200);
AudioLogger::instance().begin(Serial, AudioLogger::Info);

connectWiFi();
setupI2SInput();

// Begin UDP
udp.begin(WiFi.localIP(), udpPort);
out_stream.begin(info);

// Start UDP transmission
Serial.printf("Sending 5 seconds of audio via UDP to %s:%d\n", udpAddress, udpPort);

udp.beginPacket(udpAddress, udpPort);
copier.copyN(NUM_PACKETS); // Copy exactly 5 sec of audio
udp.endPacket();

Serial.println("Finished sending 5 seconds of audio!");
}

void loop() {
// Nothing else, only runs once
}

シリアルモニター(115200ボー)を使用して接続とストリーミングの状態を確認してください。

pir

Pythonスクリプト(音声の受信と保存用)

import socket

udp_ip = "0.0.0.0"
udp_port = 12345
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((udp_ip, udp_port))

with open("output.wav", "wb") as f:
print("Listening for audio...")
while True:
data, addr = sock.recvfrom(4096)
f.write(data)

音声の再生

ファイルが保存されたら(output.wav)、以下のような任意の音声プレーヤーで開くだけです:

  • VLC
  • Windows Media Player
  • Audacity(検査用)

技術サポート & 製品ディスカッション

弊社製品をお選びいただきありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供しています。さまざまな好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。

Loading Comments...