Moira C1 - Open Source Hardware (OSH) design for Mycroft

Thanks! Honestly I’m thinking about returning the 6 microphone array and going for the Mic Array v2.0. The software support for the 6 mic array is not acceptable in my book. The drivers don’t support the latest kernel, and the “solution” requires downgrading kernels, not something I’m open to.

For the Mic Array V2.0, how would you recommend positioning it? For some reason they designed it with the USB plug and 3.5mm jack on the top, increasing the distance from the surface for a mount. Any idea if those can be removed from the board?

Yea, I’ve also been looking at how the latest Echo handles this, with the curved panel between a tweeter and woofer that pushes the wavelengths outward. I may try a few things like that and measure frequency response. I’m not really sure how to test for mic interference, though.

Perfect, good insight into requirements and will certainly be helpful.

@StuartIanNaylor wow that is a lot of info, thanks! I’ll digest most of it but a few thoughts/questions:

That’s an interesting idea. I had not considered disassembling something like this, however I only see reviews that it has problems in linux.

First off, hah! And secondly, this seems like a similar method to using the Adafruit module. I will investigate this as well.

I’ve actually run into this as an amp, and it’s on my “list of potential parts.” Have you had good experiences with it (assuming this is what you are using)?

Ahh yes, this is similar to a structure I am/was considering, however instead of firing down onto the surface, having it fire down onto a curved plate similar to how the Echo works.

Now this is something I hadn’t considered, either. I’ve just been using a Pi3 because that’s what I had on hand. I guess there’s no reason I couldn’t improve my form factor with something smaller.

Stay away from the Anker as with linux its a proper Anker and does have problems.
I think its just the keep alive that is the problem as it cuts the first few secs of each output which is something they firmware fixed recently with Windows are the update I downloaded fixed.
Its a new product so calling it a proper Linux Anker is a bit unfair but currently yeah stay away.
But as in your other post the respeaker drivers are in my opinion terrible and so is support the USB is prob the only option with those after a 2, 4 & 4 linear mic board.

Its actually a xmos chip something along the lines of the respeaker with bluetooth, speaker, amp and huge battery for less than they do boards.

Bus 001 Device 007: ID 10d6:2048 Actions Semiconductor Co., Ltd
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x10d6 Actions Semiconductor Co., Ltd
  idProduct          0x2048
  bcdDevice            0.00
  iManufacturer           1
  iProduct                2
  iSerial                 3
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x00e5
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0
      bInterfaceProtocol      0
      iInterface              0
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      33
         Report Descriptors:
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               9
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      1 Control Device
      bInterfaceProtocol      0
      iInterface              0
      AudioControl Interface Descriptor:
        bLength                10
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdADC               1.00
        wTotalLength       0x004e
        bInCollection           2
        baInterfaceNr(0)        2
        baInterfaceNr(1)        3
      AudioControl Interface Descriptor:
        bLength                12
        bDescriptorType        36
        bDescriptorSubtype      2 (INPUT_TERMINAL)
        bTerminalID             1
        wTerminalType      0x0101 USB Streaming
        bAssocTerminal          0
        bNrChannels             2
        wChannelConfig     0x0003
          Left Front (L)
          Right Front (R)
        iChannelNames           0
        iTerminal               0
      AudioControl Interface Descriptor:
        bLength                12
        bDescriptorType        36
        bDescriptorSubtype      2 (INPUT_TERMINAL)
        bTerminalID             2
        wTerminalType      0x0203 Personal Microphone
        bAssocTerminal          0
        bNrChannels             1
        wChannelConfig     0x0000
        iChannelNames           0
        iTerminal               0
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (OUTPUT_TERMINAL)
        bTerminalID             3
        wTerminalType      0x0301 Speaker
        bAssocTerminal          0
        bSourceID               9
        iTerminal               0
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      3 (OUTPUT_TERMINAL)
        bTerminalID             4
        wTerminalType      0x0101 USB Streaming
        bAssocTerminal          0
        bSourceID              11
        iTerminal               0
      AudioControl Interface Descriptor:
        bLength                 7
        bDescriptorType        36
        bDescriptorSubtype      5 (SELECTOR_UNIT)
        bUnitID                11
        bNrInPins               1
        baSourceID(0)          10
        iSelector               0
      AudioControl Interface Descriptor:
        bLength                13
        bDescriptorType        36
        bDescriptorSubtype      6 (FEATURE_UNIT)
        bUnitID                 9
        bSourceID               1
        bControlSize            2
        bmaControls(0)     0x0001
          Mute Control
        bmaControls(1)     0x0002
          Volume Control
        bmaControls(2)     0x0002
          Volume Control
        iFeature                0
      AudioControl Interface Descriptor:
        bLength                11
        bDescriptorType        36
        bDescriptorSubtype      6 (FEATURE_UNIT)
        bUnitID                10
        bSourceID               2
        bControlSize            2
        bmaControls(0)     0x0003
          Mute Control
          Volume Control
        bmaControls(1)     0x0000
        iFeature                0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol      0
      iInterface              0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol      0
      iInterface              0
      AudioStreaming Interface Descriptor:
        bLength                 7
        bDescriptorType        36
        bDescriptorSubtype      1 (AS_GENERAL)
        bTerminalLink           1
        bDelay                  1 frames
        wFormatTag         0x0001 PCM
      AudioStreaming Interface Descriptor:
        bLength                14
        bDescriptorType        36
        bDescriptorSubtype      2 (FORMAT_TYPE)
        bFormatType             1 (FORMAT_TYPE_I)
        bNrChannels             2
        bSubframeSize           2
        bBitResolution         16
        bSamFreqType            1 Discrete
        tSamFreq[ 0]        48000
        junk at descriptor end: 00 00 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            9
          Transfer Type            Isochronous
          Synch Type               Adaptive
          Usage Type               Data
        wMaxPacketSize     0x00c0  1x 192 bytes
        bInterval               1
        AudioStreaming Endpoint Descriptor:
          bLength                 7
          bDescriptorType        37
          bDescriptorSubtype      1 (EP_GENERAL)
          bmAttributes         0x01
            Sampling Frequency
          bLockDelayUnits         1 Milliseconds
          wLockDelay         0x0001
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol      0
      iInterface              0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol      0
      iInterface              0
      AudioStreaming Interface Descriptor:
        bLength                 7
        bDescriptorType        36
        bDescriptorSubtype      1 (AS_GENERAL)
        bTerminalLink           4
        bDelay                  1 frames
        wFormatTag         0x0001 PCM
      AudioStreaming Interface Descriptor:
        bLength                11
        bDescriptorType        36
        bDescriptorSubtype      2 (FORMAT_TYPE)
        bFormatType             1 (FORMAT_TYPE_I)
        bNrChannels             2
        bSubframeSize           2
        bBitResolution         16
        bSamFreqType            1 Discrete
        tSamFreq[ 0]        16000
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
        AudioStreaming Endpoint Descriptor:
          bLength                 7
          bDescriptorType        37
          bDescriptorSubtype      1 (EP_GENERAL)
          bmAttributes         0x00
          bLockDelayUnits         0 Undefined
          wLockDelay         0x0000

The is the output of lsusb if it makes any sense, but again I was trying to help a section who don’t want to do any building or making and just buy off the shelf ready made.
Its looking currently Jabra510 but I purchased this and that is enough and also returning to Amazon as with the person I was trying to help in selection I was trying to explain for recognition the operating parameters for a conference mike are not the same.
A computer doesn’t care about noise as long as it doesn’t effect the signal of interest…

So to be honest all the Jabra/Anker/Respeaker high tech supposedly wonderful units bemuse me and thought what the hell out of interest I will buy one and expected it would work and that after a play I would sell it.

So the Anker had problems with Linux but the Edimax USB has no Linux problems as doesn’t cut audio start.
Its just the housing I don’t like but the stereo ADC I do but any even cheap $3 usb audio with active powered mics which running Vcc/Gnd from the Pi to a mic module is means they suddenly become really sensitive.
There is a Syba stereo ADC USB but after purchasing x2 cmedia fakes that is it to them.
I am having another punt recently on a AXAGON ADA-17 USB HQ Mini Audio which like the last 2 I think is a Via Envy chipset also, when not fake (Actually CM6533) .

https://www.ebay.co.uk/itm/DC-12V-24V-TPA3116-Dual-Channel-Stereo-2x50W-BTL-Mono-100W-Audio-Amplifier-Board/272406367754

Yeah liked it and purchased 2 more to use in bridged 100watt mode as the wattage ratings we get are like old PPO car stereo ratings. Bridged it will never do 100watt but should do over 40 with a 24vdc supply.
A 60-120 watt decent enough PSU usually a cctv psu can be got for about £10 and its quite easy to get a 3amp buck and set at 5.1v for a Pi. Its almost impossible to get a 5.1v PSU that supplies anything more than 3amp.
Also again the true max output is over 40watt but I am never going to force near the wattage ceiling where THD can be up 10% and likely will run at 25-30 watt max.
I like the above because they have a standby input as all the ClassD amps to me hiss whilst idle and depending how close you are can be annoying.

The ratings of amps are usually with 10%THD into 2ohms at max voltage and the adafruit amp for me in reality for audio purposes is little more than a toy module.

To invest so much spend in certain items of a voiceai / wireless audio device and then skimp so much on audio that its more cognitive disconnect than bad choice.

Even the low end Google & Amazon devices have had huge design and product importance in the mic and audio setup and the structures that house and isolate.
Its hugely important otherwise you will get something that does sound like a cheap plastic toy.

I don’t have access to any of the fancy beaming forming DSP algs the big 2 have so being planar in mic array isn’t a requirement but like you say the isolation and housing can give different parameters. In fact you can use those to your advantage and create a directional array of individual mics of differing angle of acceptance and just paralel onto a mono input.

Adafruit do an Electret Microphone Amplifier - MAX9814 with tri states for AGC and Gain which if powered from 3.3v can go direct to GPIO.
That is quite interesting for those stuck with a mono usb input as you have 20db gain to play in 2 steps of 10db.
Only shame about that module is that tC the AGC timing cap they plumbed for 100nf and prob on the low side and to reactive for voice. On the top setting for voice its OK but a soldering iron and a 680nf or 1uf will fix that.

I have also been using analogue mems and can not make my mind up which I prefer as starting to wonder if mems are really worth it.
https://www.aliexpress.com/item/32966959737.html

Not being SMD and just two short wires and round electrets are wonderfully easy to house and create isolation for as a drill bit and a rubber grommet is exceptionally easy and very effective.
Then you get these mems boards and your left scratching your head on how you are going to mount and implement.
I know electrets lose charge over time, but its a long time but unless your a mobile phone or amazon and google mems are not the be all and end all they are portrayed to be unless you have gone digital.

Also digital vs analogue especially the analogues with relatively high gain modules can be on the end of quite a long cable run and whilst we are all wondering how to enclose a voice AI the only thing that needs to be 1-2 meters from voice source is a tiny mic module on a very thin gauge cable that can be extended to huge lengths if used in conjunction with a balanced line driver.

Its sort of weird as we are blind sighted by Google and Amazon consumer goods whilst lateral systems that are likely better have no correlation.

The Rockpi-S wasn’t about form factor really just price for multiple satellite installs as its a quad A35 at zero price with built in stereo Dac, 8 channel ADC and DSP interrupt based VAD.
Its a soc designed for voiceai that is zero priced.

Sadly the ADC probably board is noisey and onboard gain amplifies the onboard noise that with high gain such as electrets its unacceptable.
Analogue wise maybe due to the high output of the MAX9814 for recognition its acceptable and you can use the onboard stereo dac.

Otherwise you need to use $2 I2S mems mics and a $5 Dac as enabling I2S will enable the I2S interface and disconnect the built in codec.
Its a Pi3 perf $13 soc that unlike a Pi3A+ can run Dac & I2S mics concurrently and runs off the same master clk so should have no problem with software EC with clock drift or cpu perf.
Its a jaw dropping $13 piece of kit and such a shame about the ADC noise and maybe a revision might fix, but maybe high gain inputs are acceptable or I2S as said.

@Fmstrat I wonder if you have an update / making some progress.

@Fmstrat do you have a design to support a display, and is your current submission free for anyone to use ?