Acusis Linear Microphone Array Users

jmbldwn
New User
Posts: 2
Joined: Sat Feb 24, 2018 3:45 am

Acusis Linear Microphone Array Users

Post by jmbldwn »

For people who backed the "Acusis" project on CrowdSupply and want to compare notes on developing their own firmware for the device.

https://www.crowdsupply.com/antimatter-research/acusis
wtip
Junior Member
Posts: 7
Joined: Wed Feb 28, 2018 2:21 am

Post by wtip »

Will you be sharing the firmware source code that the units shipped with? Can you put this up on github.com?
cgelinek
Newbie
Posts: 1
Joined: Mon Mar 05, 2018 12:15 am

Post by cgelinek »

wtip wrote:Will you be sharing the firmware source code that the units shipped with? Can you put this up on github.com?
I asked a very similar question back in December 2017. The response was rather short:
For the source code, we are still figuring it out.
Hopefully they'll stick to Free Software principles and publish the source code for what's running on the XMOS device.
peterm
Junior Member
Posts: 5
Joined: Mon Mar 05, 2018 10:42 pm

Post by peterm »

While we wait to see if we can get the source code in Github for everyone, I put together some quick instructions that should be able to get you started.

# ACUSIS firmware setup
These are instructions for getting your firmware to a similar starting state as the firmware that shipped on the Acusis microphone.

## Step 1: Get needed software
- Download and install [XTimeComposer][https://www.xmos.com/support/tools] from the XMOS website
- Download [VocalFusion][http://www.xmos.com/support/software/vfspeaker] from the XMOS website and move it to a folder of your choice

## Step 2: Launch XTimeComposer and import
Launch XTimeComposer. If this is your first time launching, log in using your tools key found in your MyXMOS area of the XMOS website

Go to File->Import, General->Existing project into workspace.
Select the donwloaded VocalFusion folder as the root folder, then select all of the projects.
Click Finish.

## Step 3: Modify the project for Acusis
Go to the Edit section.

Right-click on app_vf_spk_base, go to Build Configurations->Manage.
Click on "New". Make a configuration called 1i1o2_Acusis_lin, and base it on the existing 1i1o2_lin33.

Right-clickon app_vf_spk_base, go to *Properties*, then *C/C++ Build*.
Change Build command to read

Code: Select all

    xmake CONFIG=1i1o2_Acusis_lin
Open *app_vf_spk_base/Makefile*.

Add the following line right after the comment #L33 Builds (or anywhere in the XCC_FLAGS section):

Code: Select all

    XCC_FLAGS_1i1o2_Acusis_lin = $(COMBINED_BUILD_FLAGS) $(I1O2) $(FREQ48K) -DBECLEAR_SMARTTV=1 -DBECLEAR_OUTPUT_ASR=1 -DMIC_GEO_ACUSIS=1
In module_beclear_conf/includes/beclear_conf.h, add the following code:

Code: Select all

    #if (MIC_GEO_ACUSIS == 1)
    #define XBECLEAR_MIC_GEO 175, 0, 0,\
                            125, 0, 0,\
                            25, 0, 0,\
                            0, 0, 0
                        
    #define XBECLEAR_AGC_DESIREDLEVEL 0.98F //override default 0.005
    #define XBECLEAR_AGC_MAXGAIN 200 //override default 31.6
    #endif
In app_vf_spk_base/src/core/cusomdefines.h, change:

Code: Select all

    #if (BECLEAR_SMARTHOME == 1)
    #define MIC_ARRAY_CH0      PIN6
    #define MIC_ARRAY_CH1      PIN1
    #define MIC_ARRAY_CH2      PIN3
    #define MIC_ARRAY_CH3      PIN4
    #elif (BECLEAR_SMARTTV == 1 ) && (MIC_GEO_L33 ==1)
    #define MIC_ARRAY_CH0      PIN0
    #define MIC_ARRAY_CH1      PIN3
    #define MIC_ARRAY_CH2      PIN1
    #define MIC_ARRAY_CH3      PIN2
    #endif
to read:

Code: Select all

    #if (BECLEAR_SMARTHOME == 1)
    #define MIC_ARRAY_CH0      PIN6
    #define MIC_ARRAY_CH1      PIN1
    #define MIC_ARRAY_CH2      PIN3
    #define MIC_ARRAY_CH3      PIN4
    #elif (BECLEAR_SMARTTV == 1 ) && (MIC_GEO_L33 == 1)
    #define MIC_ARRAY_CH0      PIN0
    #define MIC_ARRAY_CH1      PIN3
    #define MIC_ARRAY_CH2      PIN1
    #define MIC_ARRAY_CH3      PIN2
    #elif (MIC_GEO_ACUSIS == 1)
    #define MIC_ARRAY_CH0      PIN0
    #define MIC_ARRAY_CH1      PIN3
    #define MIC_ARRAY_CH2      PIN2
    #define MIC_ARRAY_CH3      PIN1
    #endif
In the file app_vs_spk_core/src/extentions/ledctrl.xc, in the function SetLed at the beginning, add the following code:

Code: Select all

        
        switch (ledNo)
        {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5: break;
            case 6:
                ledNo = 5; break;
            case 7:
                ledNo = 4; break;
            case 8:
                ledNo = 3; break;
            case 9:
                ledNo = 2; break;
            case 10:
                ledNo = 1; break;
            case 11:
                ledNo = 0; break;
            case 12:
                break;
        }
wtip
Junior Member
Posts: 7
Joined: Wed Feb 28, 2018 2:21 am

Post by wtip »

There may be some restrictions on redistributing the xcore firmware.
If you create an account on https://www.xmos.com/ you can download the source and binaries for the "xCORE VocalFusion Speaker: Linear Array".
I'm wondering if this is basically the same thing that's running on the Acusis?

In the block diagram here http://www.xmos.com/products/silicon/xcore-voice/xvf it shows that the XVF3000 has two output configurations. I'm wondering how the Acusis is configured?

My intended application for the Acusis is for a video conferencing system but after testing the board out I'm not sure it's suitable without adjustments to the microphone gain. I'm perceiving what I would call audio clipping on the input when I talk at a normal volume from a few feet away. I adjusted the UAC volume control down on Windows which reduces the volume but still produces clipping. I also tried it on an Ubuntu system with the same results.
Before I ordered my board I heard this in the Bil Herd demo video starting at 3:15 but I assumed that the level matching between all of the different recording devices was screwed up. https://www.crowdsupply.com/antimatter- ... m-bil-herd
wtip
Junior Member
Posts: 7
Joined: Wed Feb 28, 2018 2:21 am

Post by wtip »

I didn't order my Acusis with an xtag programmer.
I'm guessing you don't have any more available for sale?
Is this what I would want to order? https://www.digikey.com/product-detail/ ... ND/2183686
jmbldwn
New User
Posts: 2
Joined: Sat Feb 24, 2018 3:45 am

Post by jmbldwn »

@wtip yes, that's the correct part. Unfortunately we don't have any extras.
peterm
Junior Member
Posts: 5
Joined: Mon Mar 05, 2018 10:42 pm

Post by peterm »

@wtip there is also a usb DFU bootloader on board you may find helpful. It doesn't have debug and you need to build the binaries and use the command line to use it, but it might be good to start out. Disclaimer: I haven't used it much personally

You can use xflash to generate the .bin file, and then upload it with your built tool. In the sw_vocalfusion package, under sc_usb_audio/module_dfu/host/xmosdfu there are some makefiles for building the host application.
Creating the binary image can be done from the .xe image XTimeComposer produces, the command should look something like:
xflash -v --upgrade 1 output.xe -o new_firmware.bin --factory-version 14.0

And then the upload would look something like:
./xmosdfu 0x11 --download new_firmware.bin

Also, useful note: if you do get the XTAG programmer, use the --no-compression flag for command-line programming. It's faster!
wtip
Junior Member
Posts: 7
Joined: Wed Feb 28, 2018 2:21 am

Post by wtip »

Reading through some of the source and documentation in the vocalfusion sw zip archive it looks like the chip has the option for USB control of configuration parameters if the loaded firmware has this enabled.
It looks like the

Code: Select all

-DBECLEAR_CONTROL_USB=1 -DUSB_CONTROL_DESCS=1
flags would control this.
Based on the setup instructions posted earlier I'm guessing this was not enabled on the shipped firmware.
Is this correct?
Just want to verify that this is correct before I order an xtag.
wtip
Junior Member
Posts: 7
Joined: Wed Feb 28, 2018 2:21 am

Post by wtip »

@peterm thanks for the tip.