Pular para o conteúdo principal

ReSpeaker Mic Array

Descrição

O ReSpeaker Mic Array pode ser empilhado (conectado) diretamente na parte superior do ReSpeaker Core para melhorar significativamente a experiência de interação por voz. Ele é desenvolvido com base no Smart Microphone XVSM-2000 da XMOS. A placa integra 7 microfones PDM para ajudar a aprimorar o desempenho de DSP acústico do ReSpeaker para um nível muito mais alto.

Principais Recursos

  • Captura de voz em campo distante
  • Localização da fonte acústica
  • Beamforming
  • Supressão de ruído
  • Desreverberação
  • Cancelamento de eco acústico

Especificações Técnicas

  • XVSM-2000 com 16 núcleos internos:
    • 16 núcleos lógicos em tempo real em 2 tiles xCore.
    • Os núcleos compartilham até 2000 MIPS em modo de dupla emissão.
    • 512KB de SRAM interna de ciclo único e 2MB de flash integrada.
    • 16KB de OTP interna (máx. 8KB por tile),
    • USB PHY, totalmente compatível com a especificação USB 2.0.
    • I/O programável.
    • Fornece modo DFU.
  • 7 microfones digitais:
    • úteis para reconhecimento de voz em campo distante ou localização de som.
    • ST MP34DT01-M.
    • Sensibilidade de -26 dBFS.
    • Ponto de sobrecarga acústica de 120 dBSPL.
    • Relação sinal-ruído de 61 dB.
    • Sensibilidade omnidirecional.
    • Saída PDM.
  • 12 LEDs RGB:
    • 256 níveis de brilho.
    • Transmissão de dados em linha de 800kHz.
  • Saída de áudio:
    • Saída auxiliar de 3,5 mm integrada.
    • WOLFSON WM8960.
    • Saída estéreo de 24 ou 16 bits a 16kHz.
    • Potência de saída de 40 mW em 16 Ω @ 3,3 V.
  • Sincronização de clock:
    • PLL integrado.
    • Clock de amostragem programável para DAC, MIC. (Desative se o DSP for usado no XVSM-2000).
  • Fonte de alimentação:
    • Alimentação de 5V via Micro USB ou conector de expansão.
  • Tamanho:
    • Diâmetro de 70mm.
  • Peso:
    • 15,25g

Driver para ReSpeaker Mic Array

  • Para usuários Windows, clique aqui para instalar o driver
  • Para usuários Linux ou Mac, não é necessário instalar o driver

Extrair voz com ReSpeaker Core

Quando o Mic Array é empilhado sobre o ReSpeaker Core, ele será detectado (verifique com aplay -l) automaticamente. E recomendamos que você use nossa respeaker_python_library para desenvolver sua aplicação de interação por voz, de modo que você não precise se preocupar se o Mic Array está conectado ou não. Nossa biblioteca verificará isso e escolherá o Mic Array quando ele estiver conectado.

Além disso, nessa biblioteca, a classe Microphone, que é baseada em Pyaudio, possui um método chamado listen, para extrair voz. Veja nosso código de exemplo aqui para uso.

Extrair voz em PC ou Mac ou Linux ou Raspberry Pi

Aqui está um exemplo também baseado em Pyaudio:

Primeiro, você precisa executar o seguinte script para obter o número de índice do dispositivo do Mic Array:

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')

Em seguida, altere RESPEAKER_INDEX = 1 para o número de índice do seu dispositivo. Execute o script para gravar uma fala.

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()

Firmwares para ReSpeaker Mic Array

Você pode baixar firmwares do ReSpeaker Mic Array para DFU aqui. Fornecemos duas versões:

  • versão xvsm : versão inicial, gera dados de 2 canais com suporte a DSP.
  • versão raw : gera dados brutos de microfone de 8 canais, este firmware não possui suporte a xvsm dsp, portanto não oferece suporte a algumas funções como DOA, AEC e assim por diante.

Consulte aqui para atualizar o firmware no Linux. Consulte aqui para atualizar o firmware no Mac.

HID para controlar o ReSpeaker Mic Array

Os usuários podem controlar o ReSpeaker Mic Array via USB HID. Consulte nosso protocolo de comunicação.

Observe que, se você estiver usando a versão raw mais recente, poderá controlar apenas os LEDs.

E aqui está um exemplo em 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()

FAQ

P1: Como obter a direção da fonte de áudio do Mic Array com o firmware xvsm version?

Ao usar Windows, siga o guia ou use nossa ferramenta HID.

Exemplos de hidapi em Python & C estão aqui

P2: Como usar o Audacity para extrair os dados brutos de 8 canais no Windows?

Selecione Windows WASA, aqui está a imagem. Se você quiser alternar a versão do firmware de 0x032 para 0x082, antes de fazer isso, desinstale primeiro o seu dispositivo no gerenciador de dispositivos. Após desinstalar, atualize o firmware via DFU e reinstale o dispositivo.

P3: Como o Mic Array se comunica com o Respeaker Core?

O Mic Array se comunica com o Respeaker Core via USB.

P4: O que significa VAD na ferramenta ReSpeaker-Microphone-Array-HID-tool?

DadosGrau
1e, 030
e, 1270
d2,0210
96,0150

Visualizador Online de Esquemático

Recursos

Projeto

Criar o Google Assistant em um RPi com ReSpeaker Mic Array: Com o ReSpeaker Mic Array, agora podemos criar o Google Assistant no Raspberry Pi!

Suporte Técnico e Discussão sobre o Produto

Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...