Adafruit I2S MEMS microphone and Raspberry Pi Zero W

Breakout boards, sensors, other Adafruit kits, etc.

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
User avatar
burnt_orange_
 
Posts: 3
Joined: Sun Jun 23, 2024 9:28 pm

Adafruit I2S MEMS microphone and Raspberry Pi Zero W

Post by burnt_orange_ »

Hi there,
I'm running Bullseye 32 bit on a Pi Zero W with the MEMS microphone. I'm using Bullseye because the scripts I am using for this project were developed on Bullseye and it's just faster for me to use that version (though I am willing to go to Bookworm if necessary). The install was working until lately.

I have tried the fixes in this post but I'm still getting the following errors:

Code: Select all

make[1]: Entering directory '/usr/src/linux-headers-6.1.21+'
CC [M]  /home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.o
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:59:15: error: variable ‘default_card_info’ has initializer but incomplete type
   59 | static struct simple_card_info default_card_info = {
      |               ^~~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:60:4: error: ‘struct simple_card_info’ has no member named ‘card’
   60 |   .card = "snd_rpi_i2s_card",       // -> snd_soc_card.name
      |    ^~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:60:11: warning: excess elements in struct initializer
   60 |   .card = "snd_rpi_i2s_card",       // -> snd_soc_card.name
      |           ^~~~~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:60:11: note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:61:4: error: ‘struct simple_card_info’ has no member named ‘name’
   61 |   .name = "simple-card_codec_link", // -> snd_soc_dai_link.name
      |    ^~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:61:11: warning: excess elements in struct initializer
   61 |   .name = "simple-card_codec_link", // -> snd_soc_dai_link.name
      |           ^~~~~~~~~~~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:61:11: note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:62:4: error: ‘struct simple_card_info’ has no member named ‘codec’
   62 |   .codec = "snd-soc-dummy",         // "dmic-codec", // -> snd_soc_dai_link.codec_name
      |    ^~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:62:12: warning: excess elements in struct initializer
   62 |   .codec = "snd-soc-dummy",         // "dmic-codec", // -> snd_soc_dai_link.codec_name
      |            ^~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:62:12: note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:63:4: error: ‘struct simple_card_info’ has no member named ‘platform’
   63 |   .platform = "not-set.i2s",
      |    ^~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:63:15: warning: excess elements in struct initializer
   63 |   .platform = "not-set.i2s",
      |               ^~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:63:15: note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:64:4: error: ‘struct simple_card_info’ has no member named ‘daifmt’
   64 |   .daifmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS,
      |    ^~~~~~
In file included from ./include/sound/soc-topology.h:15,
                 from ./include/sound/soc-dapm.h:15,
                 from ./include/sound/soc.h:417,
                 from ./include/sound/simple_card.h:12,
                 from /home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:23:
./include/uapi/sound/asoc.h:150:41: warning: excess elements in struct initializer
  150 | #define SND_SOC_DAI_FORMAT_I2S          1 /* I2S mode */
      |                                         ^
./include/sound/soc-dai.h:27:29: note: in expansion of macro ‘SND_SOC_DAI_FORMAT_I2S’
   27 | #define SND_SOC_DAIFMT_I2S  SND_SOC_DAI_FORMAT_I2S
      |                             ^~~~~~~~~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:64:13: note: in expansion of macro ‘SND_SOC_DAIFMT_I2S’
   64 |   .daifmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS,
      |             ^~~~~~~~~~~~~~~~~~
./include/uapi/sound/asoc.h:150:41: note: (near initialization for ‘default_card_info’)
  150 | #define SND_SOC_DAI_FORMAT_I2S          1 /* I2S mode */
      |                                         ^
./include/sound/soc-dai.h:27:29: note: in expansion of macro ‘SND_SOC_DAI_FORMAT_I2S’
   27 | #define SND_SOC_DAIFMT_I2S  SND_SOC_DAI_FORMAT_I2S
      |                             ^~~~~~~~~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:64:13: note: in expansion of macro ‘SND_SOC_DAIFMT_I2S’
   64 |   .daifmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS,
      |             ^~~~~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:65:4: error: ‘struct simple_card_info’ has no member named ‘cpu_dai’
   65 |   .cpu_dai = {
      |    ^~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:65:14: error: extra brace group at end of initializer
   65 |   .cpu_dai = {
      |              ^
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:65:14: note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:65:14: warning: excess elements in struct initializer
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:65:14: note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:69:4: error: ‘struct simple_card_info’ has no member named ‘codec_dai’
   69 |   .codec_dai = {
      |    ^~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:69:16: error: extra brace group at end of initializer
   69 |   .codec_dai = {
      |                ^
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:69:16: note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:69:16: warning: excess elements in struct initializer
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:69:16: note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c: In function ‘i2s_mic_rpi_init’:
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:123:15: error: ‘default_card_info’ has an incomplete type ‘struct simple_card_info’
  123 |   card_info = default_card_info;
      |               ^~~~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:123:13: error: ‘card_info’ has an incomplete type ‘struct simple_card_info’
  123 |   card_info = default_card_info;
      |             ^
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:124:12: error: invalid use of undefined type ‘struct simple_card_info’
  124 |   card_info.platform = card_platform;
      |            ^
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:125:12: error: invalid use of undefined type ‘struct simple_card_info’
  125 |   card_info.cpu_dai.name = card_platform;
      |            ^
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c: At top level:
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:41:32: error: storage size of ‘card_info’ isn’t known
   41 | static struct simple_card_info card_info;
      |                                ^~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:59:32: error: storage size of ‘default_card_info’ isn’t known
   59 | static struct simple_card_info default_card_info = {
      |                                ^~~~~~~~~~~~~~~~~
DONE.
Has anyone used the MEMS mic on a Pi Zero W and if so, how did you get it to work? Thanks in advance!

User avatar
mikeysklar
 
Posts: 17729
Joined: Mon Aug 01, 2016 8:10 pm

Re: Adafruit I2S MEMS microphone and Raspberry Pi Zero W

Post by mikeysklar »

I ordered a sensor so I can help smooth out the process.

It looks like the main resolution was to add these two lines to the /boot/config.txt:

Code: Select all

dtoverlay=googlevoicehat-soundcard
dtparam=i2s=on
It is not clear that a custom build of the modules is necessary to get up and running.

User avatar
burnt_orange_
 
Posts: 3
Joined: Sun Jun 23, 2024 9:28 pm

Re: Adafruit I2S MEMS microphone and Raspberry Pi Zero W

Post by burnt_orange_ »

Thanks for the help! I put both of those in the /boot/config.txt and rebooted first, then followed directions on the product page. I am still getting the following errors:

Code: Select all

make -C /lib/modules/6.1.21+/build M=/home/pi/Raspberry-Pi-Installer-Scripts/i2                                                                                               s_mic_module modules
make[1]: Entering directory '/usr/src/linux-headers-6.1.21+'
CC [M]  /home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.o
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:59:15:                                                                                                error: variable ‘default_card_info’ has initializer but incomplete type
   59 | static struct simple_card_info default_card_info = {
      |               ^~~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:60:4: e                                                                                               rror: ‘struct simple_card_info’ has no member named ‘card’
   60 |   .card = "snd_rpi_i2s_card",       // -> snd_soc_card.name
      |    ^~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:60:11:                                                                                                warning: excess elements in struct initializer
   60 |   .card = "snd_rpi_i2s_card",       // -> snd_soc_card.name
      |           ^~~~~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:60:11:                                                                                                note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:61:4: e                                                                                               rror: ‘struct simple_card_info’ has no member named ‘name’
   61 |   .name = "simple-card_codec_link", // -> snd_soc_dai_link.name
      |    ^~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:61:11:                                                                                                warning: excess elements in struct initializer
   61 |   .name = "simple-card_codec_link", // -> snd_soc_dai_link.name
      |           ^~~~~~~~~~~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:61:11:                                                                                                note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:62:4: e                                                                                               rror: ‘struct simple_card_info’ has no member named ‘codec’
   62 |   .codec = "snd-soc-dummy",         // "dmic-codec", // -> snd_soc_dai_                                                                                               link.codec_name
      |    ^~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:62:12:                                                                                                warning: excess elements in struct initializer
   62 |   .codec = "snd-soc-dummy",         // "dmic-codec", // -> snd_soc_dai_                                                                                               link.codec_name
      |            ^~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:62:12:                                                                                                note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:63:4: e                                                                                               rror: ‘struct simple_card_info’ has no member named ‘platform’
   63 |   .platform = "not-set.i2s",
      |    ^~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:63:15:                                                                                                warning: excess elements in struct initializer
   63 |   .platform = "not-set.i2s",
      |               ^~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:63:15:                                                                                                note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:64:4: e                                                                                               rror: ‘struct simple_card_info’ has no member named ‘daifmt’
   64 |   .daifmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_                                                                                               CBS_CFS,
      |    ^~~~~~
In file included from ./include/sound/soc-topology.h:15,
                 from ./include/sound/soc-dapm.h:15,
                 from ./include/sound/soc.h:417,
                 from ./include/sound/simple_card.h:12,
                 from /home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/sn                                                                                               d-i2smic-rpi.c:23:
./include/uapi/sound/asoc.h:150:41: warning: excess elements in struct initiali                                                                                               zer
  150 | #define SND_SOC_DAI_FORMAT_I2S          1 /* I2S mode */
      |                                         ^
./include/sound/soc-dai.h:27:29: note: in expansion of macro ‘SND_SOC_DAI_FORMA                                                                                               T_I2S’
   27 | #define SND_SOC_DAIFMT_I2S  SND_SOC_DAI_FORMAT_I2S
      |                             ^~~~~~~~~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:64:13:                                                                                                note: in expansion of macro ‘SND_SOC_DAIFMT_I2S’
   64 |   .daifmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_                                                                                               CBS_CFS,
      |             ^~~~~~~~~~~~~~~~~~
./include/uapi/sound/asoc.h:150:41: note: (near initialization for ‘default_car                                                                                               d_info’)
  150 | #define SND_SOC_DAI_FORMAT_I2S          1 /* I2S mode */
      |                                         ^
./include/sound/soc-dai.h:27:29: note: in expansion of macro ‘SND_SOC_DAI_FORMA                                                                                               T_I2S’
   27 | #define SND_SOC_DAIFMT_I2S  SND_SOC_DAI_FORMAT_I2S
      |                             ^~~~~~~~~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:64:13:                                                                                                note: in expansion of macro ‘SND_SOC_DAIFMT_I2S’
   64 |   .daifmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_                                                                                               CBS_CFS,
      |             ^~~~~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:65:4: e                                                                                               rror: ‘struct simple_card_info’ has no member named ‘cpu_dai’
   65 |   .cpu_dai = {
      |    ^~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:65:14:                                                                                                error: extra brace group at end of initializer
   65 |   .cpu_dai = {
      |              ^
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:65:14:                                                                                                note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:65:14:                                                                                                warning: excess elements in struct initializer
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:65:14:                                                                                                note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:69:4: e                                                                                               rror: ‘struct simple_card_info’ has no member named ‘codec_dai’
   69 |   .codec_dai = {
      |    ^~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:69:16:                                                                                                error: extra brace group at end of initializer
   69 |   .codec_dai = {
      |                ^
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:69:16:                                                                                                note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:69:16:                                                                                                warning: excess elements in struct initializer
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:69:16:                                                                                                note: (near initialization for ‘default_card_info’)
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c: In fun                                                                                               ction ‘i2s_mic_rpi_init’:
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:123:15:                                                                                                error: ‘default_card_info’ has an incomplete type ‘struct simple_card_info’
  123 |   card_info = default_card_info;
      |               ^~~~~~~~~~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:123:13:                                                                                                error: ‘card_info’ has an incomplete type ‘struct simple_card_info’
  123 |   card_info = default_card_info;
      |             ^
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:124:12:                                                                                                error: invalid use of undefined type ‘struct simple_card_info’
  124 |   card_info.platform = card_platform;
      |            ^
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:125:12:                                                                                                error: invalid use of undefined type ‘struct simple_card_info’
  125 |   card_info.cpu_dai.name = card_platform;
      |            ^
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c: At top                                                                                                level:
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:41:32:                                                                                                error: storage size of ‘card_info’ isn’t known
   41 | static struct simple_card_info card_info;
      |                                ^~~~~~~~~
/home/pi/Raspberry-Pi-Installer-Scripts/i2s_mic_module/snd-i2smic-rpi.c:59:32:                                                                                                error: storage size of ‘default_card_info’ isn’t known
   59 | static struct simple_card_info default_card_info = {
      |                                ^~~~~~~~~~~~~~~~~

User avatar
mikeysklar
 
Posts: 17729
Joined: Mon Aug 01, 2016 8:10 pm

Re: Adafruit I2S MEMS microphone and Raspberry Pi Zero W

Post by mikeysklar »

These are the necessary settings based on the last group thread. I think the necessary modules are present already and it is just this bit of configuration that needs to be in place.

I'll confirm in a few days when the MEMS mic arrives, but might be all that is necessary:

config.txt :

Code: Select all

dtparam=i2s=on
dtoverlay=googlevoicehat-soundcard
arm_64bit=0 
/etc/asound.conf :

Code: Select all

pcm.dmic_hw {
    type hw
    card sndrpii2scard
    channels 2
    format S32_LE
}

pcm.dmic_sv {
    type softvol
    slave.pcm dmic_hw
    control {
        name "Mic Capture Volume"
        card sndrpii2scard
    }
}

pcm.!default {
    type asym
    playback.pcm "plughw:0"
    capture.pcm "dmic_sv"
}

ctl.!default {
    type hw
    card 0
}
skip the installer and see if your I2S device is visible.

Code: Select all

arecord -l

User avatar
mikeysklar
 
Posts: 17729
Joined: Mon Aug 01, 2016 8:10 pm

Re: Adafruit I2S MEMS microphone and Raspberry Pi Zero W

Post by mikeysklar »

The SPH0645 mic arrived and upon reboot I was able to see the device and produce a recording just by adding a single line to the /boot/config.txt:

Code: Select all

dtoverlay=googlevoicehat-soundcard

Code: Select all

arecord -D plughw:1 -c1 -r 48000 -f S32_LE -t wav -V mono -v file1.wav
The audio file recorded fine and played back well.

This setup was on a Pi 4B running Bullseye 64-bit Legacy Lite (2024-03-12). No updates applied and I did not run the adafruit i2smic.py script.

I'll setup the same now with a 32-bit Pi Zero W to match your setup.

User avatar
mikeysklar
 
Posts: 17729
Joined: Mon Aug 01, 2016 8:10 pm

Re: Adafruit I2S MEMS microphone and Raspberry Pi Zero W

Post by mikeysklar »

Platform: Pi Zero W
OS: Bullseye Legacy 32-bit Lite (2024-03-12)

Setup:

/boot/config.txt:

Code: Select all

dtoverlay=googlevoicehat-soundcard
reboot

Code: Select all

pi@zero:~ $ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: sndrpigooglevoi [snd_rpi_googlevoicehat_soundcar], device 0: Google voiceHAT SoundCard HiFi voicehat-hifi-0 [Google voiceHAT SoundCard HiFi voicehat-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
I got a usable audio file with the following command:

Code: Select all

pi@zero:~ $ arecord -D plughw:0 -c1 -r 48000 -f S32_LE -t wav -V mono -v file1.wav
Recording WAVE 'file1.wav' : Signed 32 bit Little Endian, Rate 48000 Hz, Mono
Plug PCM: Route conversion PCM (sformat=S32_LE)
  Transformation table:
    0 <- 0*0.5 + 1*0.5
Its setup is:
  stream       : CAPTURE
  access       : RW_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 1
  rate         : 48000
  exact rate   : 48000 (48000/1)
  msbits       : 32
  buffer_size  : 24000
  period_size  : 6000
  period_time  : 125000
  tstamp_mode  : NONE
  tstamp_type  : MONOTONIC
  period_step  : 1
  avail_min    : 6000
  period_event : 0
  start_threshold  : 1
  stop_threshold   : 24000
  silence_threshold: 0
  silence_size : 0
  boundary     : 1572864000
Slave: Hardware PCM card 0 'snd_rpi_googlevoicehat_soundcar' device 0 subdevice 0
Its setup is:
  stream       : CAPTURE
  access       : MMAP_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 2
  rate         : 48000
  exact rate   : 48000 (48000/1)
  msbits       : 32
  buffer_size  : 24000
  period_size  : 6000
  period_time  : 125000
  tstamp_mode  : NONE
  tstamp_type  : MONOTONIC
  period_step  : 1
  avail_min    : 6000
  period_event : 0
  start_threshold  : 1
  stop_threshold   : 24000
  silence_threshold: 0
  silence_size : 0
  boundary     : 1572864000
  appl_ptr     : 0
  hw_ptr       : 0

User avatar
burnt_orange_
 
Posts: 3
Joined: Sun Jun 23, 2024 9:28 pm

Re: Adafruit I2S MEMS microphone and Raspberry Pi Zero W

Post by burnt_orange_ »

This worked for me, thanks so much for your help!

User avatar
mikeysklar
 
Posts: 17729
Joined: Mon Aug 01, 2016 8:10 pm

Re: Adafruit I2S MEMS microphone and Raspberry Pi Zero W

Post by mikeysklar »

I was approved to update the guide to use this one-line modification. I'll post an update when that is complete tomorrow.

User avatar
mikeysklar
 
Posts: 17729
Joined: Mon Aug 01, 2016 8:10 pm

Re: Adafruit I2S MEMS microphone and Raspberry Pi Zero W

Post by mikeysklar »

I updated the guide page to no longer go through the i2smic.py installer method and use the one line googlevoicehat driver. Repair discussion in Raspberry-Pi-Installer-Scripts #320.

My testing shows it worked on these setups.

i2s-pi-test.png
i2s-pi-test.png (108.18 KiB) Viewed 425 times

Locked
Please be positive and constructive with your questions and comments.

Return to “Other Products from Adafruit”