I'm looking to capture 4 channels of audio using small MEMS microphones like these, spaced less than a metre apart from each other in a grid to form a square microphone array.

[EDIT: This is so that I can develop a sound localization algorithm to find the relative position of the sound source wrt the mic array. As I'll be making use of time delay between the sound wave hitting each mic in turn, the relative latency needs to be controlled very tightly.

Latency-wise, for example if the distance is 0.5m between microphones, the delay between microphones will be about 1.46ms (best case, with the two mics orthogonal from the source). As the mics are likely to not be orthogonal the delay will be smaller than this. I'm guessing I'll need 0ms +/- 0.01ms relative latency]

Initially I'm just looking to develop the algorithm on a PC and need to capture the four audio streams to use as test data.

Initially I was planning to use an Arduino to interface with these little microphones and provide the data stream to a PC over USB however I've realised that it will not have enough memory or speed to capture and buffer / transmit this audio.

It is very important that the audio being recorded has close to zero relative latency between the four audio channels. I don't really care what the latency is overall, just the relative. It doesn't have to be CD quality as I'm expecting the audio quality to be bottlenecked by the small microphones.

USB audio interfaces seem like a good idea however I'm not certain of their relative latency performance for multichannel recording and not sure if they'd be compatible with a 3V3 signal.

  • Are you talking about literally no relative latency, as in 0 ms? I'm not sure of your application, but if you knew the relative latency among inputs, could you code in the compensation since playback latency is not a concern?
    – zeronyne
    Commented May 16, 2019 at 17:56
  • @zeronyne - I've added info in my edit above, reading again I realised it was a bit cryptic. Latency-wise, for example if the aperture is 0.5m between microphones, the delay between microphones will be about 1.46ms (best case, with the two mics in a line facing away from the source). This means we need the data to line up ideally within +/-0.01ms if we want decent angular accuracy.
    – BenAdamson
    Commented May 17, 2019 at 6:58

3 Answers 3


Well, I can't really say I am a hardware expert, but so far I have never met anyone having issues with inter-channel latency. I have worked on localization projects and everything seemed to work like a charm, latency-wise.

There are some things that, in my opinion, point to the fact that inter-channel latency will not be a problem to your application.

  1. Most modern Analog-to-Digital Converters (ADC) use some kind of Pulse Density Modulation (PDM), like Delta-Sigma technology. So most probably the inter-channel acquisition differences will be in the order of their sampling rates (in the MHz region most of the time). For reference you can check this and this ADCs. I do not have a way to prove that ADCs have zero latency difference between channels but this is what I believe to be the case (I do have trust in the hardware designers and manufacturing technology of today :)).
  2. Most probably the main problem you will encounter is the microphone spacing, which will limit you to the maximum usable frequency before you start introducing artifacts. I don't know what technique exactly you use, but as you mention you are going to implement some time domain technique (I guess either Beamforming or GCC with PHAT, SCOT or other processing). All these techniques have serious limitations to their maximum usable frequency, which is inter-element distance dependent.

I can say for sure that there are quite some applications that work very well and for their implementation they have used a single chip ADC. Like this work where those people used a standard PC. Quoting from the article (page 12):

The algorithm was implemented in software executed on a standard PC (Intel 2.40 GHz Core 2 CPU, 2GB RAM). We used eight Shure SM93 microphones (omnidirectional) with a TASCAM US2000 8- channel USB soundcard

You can see a working circular microphone array from a group with authors from the previous link here.

So to conclude, I would strongly encourage you to continue your project with a "normal" USB card like one Mark suggests (of course with enough input channels to accommodate your needs).


Most multichannel recording interfaces will have zero latency between adjacent recording channels. Overall latency between input and output might vary between devices, but as for adjacent recording channels, it's usually zero. There is always an expectation that within a multichannel interface all channels sample at exactly the same time. Therefore no compensation is required.

Note that at 48kHz sampling rate, the physical distance between samples is 7.15mm, so overall direction finding accuracy with only 500mm between capsules may be limited.

Your best bet for taking this project forward is to use a multichannel audio interface that supports at least 4 input channels. USB would be fine as it's not the overall latency that would be the deciding factor, only relative latency.


The simplest way to record 4 channels with near zero latency is with a 4 channel recorder. Either a 4 channel USB interface or a 4 channel recorder like the Tascam DR-70 or Zoom H6.

Two other approaches you might take are Arduino with GPS or what Zylia calls "external synchronization".

A standard GPS receiver supporting the 1 second pulse code will give you micro second accuracy. I am not sure if an Arduino has a fast enough CPU to accurately sync the track with the timestamp. One approach is to timestamp the start and end of a track. Another is to embed the timestamp in the track. Take a look at the new SMPTE ST 2110-20 and ST 2110-21 standards which use PTP timestamping. You may need something more powerful like a Raspberry Pi to keep the timing accurate.

Zylia make a microphone array that does what you are trying to do. Localize a sound source. Zylia uses a timing signal from a single source played back by a small piezo device on each microphone. This timing signal is used to synchronize the microphones. Their developer kit web page has a fairly good explanation of how their system works: http://www.zylia.co/zylia-6dof.html

BTW, using MEMS microphones is a good choice. They have remarkably flat frequency and phase response. Think Earthworks measurement microphones. Be careful about how you mount the microphone. The top of the microphone should be flush with the outside of the case to avoid subtle boundary reflections.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.