Skip to main content

ReSpeaker 麦克风阵列

产品描述

ReSpeaker 麦克风阵列可以直接堆叠(连接)到 ReSpeaker Core 的顶部,显著改善语音交互体验。它基于 XMOS 的 XVSM-2000 智能麦克风开发。该板集成了 7 个 PDM 麦克风,有助于将 ReSpeaker 的声学 DSP 性能提升到更高水平。

主要特性

  • 远场语音捕获
  • 声源定位
  • 波束成形
  • 噪声抑制
  • 去混响
  • 声学回声消除

技术规格

  • XVSM-2000 内置 16 个核心:
    • 2 个 xCore 瓦片上的 16 个实时逻辑核心。
    • 核心在双发射模式下共享高达 2000 MIPS。
    • 512KB 内部单周期 SRAM 和 2MB 内置闪存。
    • 16KB 内部 OTP(每个瓦片最大 8KB)。
    • USB PHY,完全符合 USB 2.0 规范。
    • 可编程 I/O。
    • 支持 DFU 模式。
  • 7 个数字麦克风:
    • 用于远场语音识别或声音定位。
    • ST MP34DT01-M。
    • -26 dBFS 灵敏度。
    • 120 dBSPL 声学过载点。
    • 61 dB 信噪比。
    • 全向灵敏度。
    • PDM 输出。
  • 12 个 RGB LED:
    • 256 级亮度。
    • 800kHz 线路数据传输。
  • 音频输出:
    • 板载 3.5mm 音频输出。
    • WOLFSON WM8960。
    • 24 或 16 位 16kHz 立体声输出。
    • 在 3.3V 电压下向 16Ω 输出 40mW 功率。
  • 时钟同步:
    • 板载 PLL。
    • DAC、MIC 的可编程采样时钟。 (如果在 XVSM-2000 中使用 DSP 则禁用)。
  • 电源供应:
    • 通过 Micro USB 或扩展接头提供 5V 电源。
  • 尺寸:
    • 直径 70mm。
  • 重量:
    • 15.25g

ReSpeaker 麦克风阵列驱动程序

  • Windows 用户,点击这里安装驱动程序
  • Linux 或 Mac 用户,无需安装驱动程序

使用 ReSpeaker Core 提取语音

当麦克风阵列堆叠在 ReSpeaker Core 上时,它会被自动检测(使用 aplay -l 检查)。我们建议您使用我们的 respeaker_python_library 来开发您的语音交互应用程序,这样您就不需要关心麦克风阵列是否连接。我们的库会检查这一点,并在连接时选择麦克风阵列。

同样,在该库中,基于 Pyaudioclass Microphone 有一个名为 listen 的方法来提取语音。使用方法请参见我们的示例代码

在 PC 或 Mac 或 Linux 或 Raspberry Pi 上提取语音

这里是一个同样基于 Pyaudio 的示例:

首先,您需要运行以下脚本来获取麦克风阵列的设备索引号:

import pyaudio

p = pyaudio.PyAudio()
info = p.get_host_api_info_by_index(0)
numdevices = info.get('deviceCount')

for i in range(0, numdevices):
if (p.get_device_info_by_host_api_device_index(0, i).get('maxInputChannels')) > 0:
print "Input Device id ", i, " - ", p.get_device_info_by_host_api_device_index(0, i).get('name')

Then, change RESPEAKER_INDEX = 1 to your index number. Run the script to record a speech.

import pyaudio
import wave

RESPEAKER_RATE = 16000
RESPEAKER_CHANNELS = 2
RESPEAKER_WIDTH = 2
# run getDeviceInfo.py to get index
RESPEAKER_INDEX = 1
CHUNK = 1024
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"

p = 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,)

print("* recording")

frames = []

for i in range(0, int(RESPEAKER_RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)

print("* done recording")

stream.stop_stream()
stream.close()
p.terminate()

wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(RESPEAKER_CHANNELS)
wf.setsampwidth(p.get_sample_size(p.get_format_from_width(RESPEAKER_WIDTH)))
wf.setframerate(RESPEAKER_RATE)
wf.writeframes(b''.join(frames))
wf.close()

ReSpeaker 麦克风阵列固件

您可以在这里下载用于 DFU 的 ReSpeaker 麦克风阵列固件。我们提供了两个版本:

  • xvsm 版本:初始版本,输出 2 通道数据并支持 dsp。
  • raw 版本:输出 8 通道麦克风原始数据,此固件不支持 xvsm dsp,因此不支持 DOA、AEC 等功能。

请参阅这里了解在 Linux 上更新固件。 请参阅这里了解在 Mac 上更新固件

用于控制 ReSpeaker 麦克风阵列的 HID

用户可以通过 USB HID 控制 ReSpeaker 麦克风阵列。请参阅我们的通信协议

请注意,如果您使用的是最新的 raw 版本,您只能控制 LED。

这里是一个 python 示例:

#!/usr/bin/env python

import respeaker.usb_hid as usb_hid

class MicArray:
def __init__(self):
self.hid = usb_hid.get()

def write(self, address, data):
data = self.to_bytearray(data)
length = len(data)
if self.hid:
packet = bytearray([address & 0xFF, (address >> 8) & 0x7F, length & 0xFF, (length >> 8) & 0xFF]) + data
packet = list(packet)
self.hid.write(packet)

def read(self, address, length):
self.hid.write(list(bytearray([address & 0xFF, (address >> 8) & 0xFF | 0x80, length & 0xFF, (length >> 8) & 0xFF])))
for _ in range(6):
data = self.hid.read()
# print [int(x) for x in data]
# skip VAD data
if int(data[0]) != 0xFF and int(data[1]) != 0xFF:
return data[4:(4 + length)]

@staticmethod
def to_bytearray(data):
if type(data) is int:
array = bytearray([data & 0xFF])
elif type(data) is bytearray:
array = data
elif type(data) is str:
array = bytearray(data)
elif type(data) is list:
array = bytearray(data)
else:
raise TypeError('%s is not supported' % type(data))
return array

def main():
import sys
import struct

mic = MicArray()

print("Using: %s" % usb_hid.usb_backend)

if len(sys.argv) < 3:
print('Usage: python {} w 0x0 0x000003'.format(sys.argv[0]))
sys.exit(1)

try:
if sys.argv[2].startswith('0x'):
address = int(sys.argv[2], 16)
else:
address = int(sys.argv[2])

if sys.argv[1] == 'w':
if sys.argv[3].startswith('0x'):
data = int(sys.argv[3], 16)
else:
data = int(sys.argv[3])

if data > 0xFFFF:
data = struct.pack('<I', data)
elif data > 0xFF:
data = struct.pack('<H', data)

mic.write(address, data)
else:
print [int(x) for x in mic.read(address, 4)]
except Exception as e:
print(e.message)

if __name__ == '__main__':
main()

常见问题

Q1: 如何从使用 xvsm 版本 固件的麦克风阵列获取音频源方向?

在 Windows 上使用时,请遵循指南或使用我们的 HID 工具

Python 和 C hidapi 示例在这里

Q2: 如何在 Windows 上使用 audacity 提取 8 通道原始数据?

请选择 Windows WASA,这里是图片。如果您想将固件版本从 0x032 切换到 0x082,在执行此操作之前,请先在设备管理中卸载您的设备。卸载后,通过 DFU 更新固件并重新安装设备。

Q3: 麦克风阵列如何与 Respeaker Core 通信?

麦克风阵列通过 USB 与 Respeaker Core 通信。

Q4: ReSpeaker-Microphone-Array-HID-tool 中的 VAD 代表什么?

数据角度
1e, 030
e, 1270
d2,0210
96,0150

原理图在线查看器

资源

项目

在树莓派上使用 ReSpeaker 麦克风阵列构建 Google Assistant:有了 ReSpeaker 麦克风阵列,现在我们可以在树莓派上构建 Google Assistant!

技术支持与产品讨论

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...