BigTom

BigTom

Hi,

This is very early days in my Nerves journey. Does anyone know what route to take for getting good quality audio recording on Nerves (probably a Raspberry Pi)? Toying with the idea of building a long running bird song recorder for ecological research and wondered if this was at the “sure just use this library” end of the spectrum or at the “read these 8 specs then implement them as a C NIF” end?

Also, I have assumed “high end” is more than a jack/USB mike is capable of but maybe I am overthinking it?

Thanks

Showing Posts 1 to 6

gus

gus

Nerves Core Team

I would say that the problem greatly depends on the hardware you are using. There are many types of microphones and interfaces but you will likely want to use a HAT with an I2S interface or use a USB sound card.

For the quality of the recordings, I think the biggest factor will be the actual microphone, as the characteristics (such as directionality, frequency range, etc) can vary drastically. I suggest you go with whatever is easiest to acquire and get started with (especially some sort of kit from Adafruit or Sparkfun, as they have good docs)

From the software side, fortunately it all looks pretty similar. Audio is typically handled in the kernel, so you’ll have to customize the nerves system for the board you’re using to add the driver. You might also want to add the alsa package for interacting with the drivers such as recording audio files.

There’s lots of resources and help in the community if you get stuck on this part

al2o3cr

al2o3cr

What’s your power budget look like for this application? A lot of fancy audio capture stuff is going to assume you’re either plugged in (studio etc) or only want to use it for a couple hours (live performance and similar)

The simplest (but also probably biggest + most power-hungry) approach would be to use a USB audio capture device or a microphone with one integrated (usually called a “USB mic”).

Other options:

  • use any analog microphone with an I2S ADC, for instance the Teensy Audio Adapter. You’d need a driver for it to work with Nerves, though.
  • use I2S microphones directly, for instance using modules like this breakout board. Two of these can be used on a single I2S port for stereo operation

The other neat thing that can be done with the tiny I2S microphones is using a bunch of them and then applying post-processing (similar to techniques used in radar) to form directional “beams” that can be adjusted after recording. This would naturally involve a LOT more data (dozens of audio streams) but could produce results that are impossible with a mono or stereo signal.

D4no0

D4no0

Does RPI support I2S at hardware level?

lawik

lawik

Nerves Core Team

I have built membrane with the portaudio library for Nerves but never got to testing it. Should work fine for getting raw audio into Elixir for processing and media pipeline fun.

The challenge is almost certainly in getting a good microphone setup as mentioned above.

al2o3cr

al2o3cr

I believe so:

  • On the RPi4, there’s a 2-channel PCM peripheral available on GPIO18-21.
  • On the RPi5, there are 3 separate I2S peripherals provided by the RP1. (2-4 channels each)
BigTom

BigTom OP

Thanks for this, with current progress and solar and batteries I am pretty confident I can meet the power needs within my budget (unless I am orders of magnitude wrong).

I am starting from a VERY LOW level of knowledge here so I will be starting as simple as possible. OTOH - sounds very cool!

— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews