Rugged Audio Shield for Arduino

Rugged Circuits is pleased to announce the new Rugged Audio Shield for Arduino

Features include:

  • 3.5mm stereo jacks for Line In, Mic In, Headphone Out
  • socket for microSD cards
  • shield has BUILT-IN FAT filesystem drivers! No drivers needed in your Arduino code!
  • supports WAV file playback from microSD card, WAV file recording to microSD card, real-time streaming from Arduino, pass through from Line In/Mic In to Headphone Out, or "Karaoke Mode": mix Line In+Mic In to Headphone Out
  • Open source Arduino Library with example sketches
  • Built-in Mic In microphone amplifier with 25X gain and software selectable additional 1X, 2X, 4X, or 8X gain
  • Software selectable 1X, 2X, 4X, or 8X gain on Line In
  • Software controlled volume control on Headphone Out
  • Undedicated analog potentiometer on pin A3
  • Uses only SPI pins and D8 for slave select -- cuttable-jumpers make it easy to rewire to other pins
  • Compatible with Arduino Uno/Duemilanove, Ruggeduino, Mega/Mega2560 and all compatible boards, including 5V/3.3V boards
  • 12-bit audio input/output resolution, with dedicated Atmel ATxmega32A4 processor to handle all audio and microSD card functions
  • ATxmega32A4 is reprogrammable: just put a PROGRAM.BIN file on the microSD card, reset the shield, and the shield reprograms itself using a built-in bootloader
  • Fully assembled -- not a kit!

Check out the product page for more information, or purchase from our on-line store.

Rugged indeed :wink:

12-bit audio input/output resolution,

Can I use that as a 12 bit ADC? e.g. and do some FFT or a more accurate read of some thermistor / sensor ...

Idem output as DAC?

Not really, it was designed for audio inputs so there are DC blocking capacitors that filter out DC offsets.

Same for the DAC: DC blocking capacitors prevent steady state values from persisting.

--
The Rugged Circuits Yellowjacket: 802.11 WiFi module with ATmega328P microcontroller, only 1.6" x 1.2", bootloader

Hi,

If there was a way to do a little text-to-speech, even just for numbers and etc. this could be very attractive for home automation, automated machinery etc.. Weather station?

For a limited vocabulary it's certainly easy enough to store pre-recorded words on the microSD card and just play them back in sequence as necessary:

...
RAS.PlayWAV("EIGHT.WAV"); RAS.WaitForIdle();
RAS.PlayWAV("SIX.WAV"); RAS.WaitForIdle();
RAS.PlayWAV("SEVEN.WAV"); RAS.WaitForIdle();
// etc.

--
The Gadget Shield: accelerometer, RGB LED, IR transmit/receive, speaker, microphone, light sensor, potentiometer, pushbuttons

and of course just generate the filename from the digit in question e.g. sprintf(fname,"%d.wav", number);

I've been able to sample a Mic on an analog pin at 20khz. Would your results be much different?
My problem is where to store the data. The SD card and XBee are plenty fast serially, but...
SD card loses data when it has to allocate a cluster.
XBee causes hum on Mic while it is transmitting.

How does your board overcome the SD lost data?
A much larger than 2k buffer?

I've been able to sample a Mic on an analog pin at 20khz. Would your results be much different?

You had some kind of amplification on the mic, right? The A/D on the analog pins is a 10-bit A/D, and the Rugged Audio Shield has 12-bit A/D's so you get (theoretically) 12dB improvement in SNR. Plus you can sample at higher frequencies on our shield.

How does your board overcome the SD lost data?

Several things help:

  • Don't record too fast for your SD card (and different cards from different manufacturers vary in write speeds) -- use an appropriate sampling rate
  • Record mono instead of stereo if that's acceptable
  • Format the card using the EraseFilesystem method which properly aligns sectors
  • Pre-size the recording file using the PresizeFile method which pre-allocates all the clusters if you know about how much time you'll be recording

--
The Flexible MIDI Shield: MIDI IN/OUT, stacking headers, your choice of I/O pins

Thank you for your accurate answers. Pre sizing is a great solution for me. I average every 2 samples giving me 10k sample rate. I assume my processor would be completely free to run in loop while it's recording with your hardware?

Correct, the Arduino is completely free to do whatever it wants while recording is in process since it all happens on the shield. To stop recording you just call the Stop method.

--
The Basic Motor Driver: simple, inexpensive motor driver for 1 stepper motor or 2 DC motors

wow just found this, looks very nice

Is it possible to edit, manage, save, read the files on the SD Card with a Linux computer?

How fast is the shield? How long does it take in-between the command RAS.PlayWAV("SOMEFILE.WAV"); until it's starting to play? is there a lag appreciable? Is there a gap in-between two sounds played?
Is there a possibility for a auto-rec function? To start the recording when a specified threshold is reached? Would the shield be fast enough for this?

To avoid clicks, is it possible and necessary to fade-in and fade-out sounds? I was reading about the void OutputVolumeSet(uint8_t volume); function.
Would this be possible to do very fast?
Is the your shield always faster than the Arduino because it runs with 32 MHz?

Can you play only one or several files at the same time? I imagine only one, but what if they are very short and small?
And is it possible to run 2 or 3 Audio Shields with only one Arduino (Mega)?
Yes it should be possible as I can call different shields via SPI Slave Select. How long does it take to do void begin(uint8_t SSpin = 8); ? Can you switch fast in between multiple shields???

How does the Rugged Audio Shield sound? 12-bit? 16-bit? Something in-between? Hi-fi lo-fi?
Thank you!

Hello Guys, I am trying to use this board as a room sound recording activated by the change in the sound level. I have read the instruction but I haven't found something to allow to control the information entered through the mic input.

i appreciate your help...

Hi,

I'm also looking at being able to monitor the input for a certain threshold. The library doesn't include support for this I don't think so I'm looking into the firmware of the shield and writing my own code for the arduino.

hai.
I brought this shield last month ago and found that, the maximum file name that can be input is 12345678.WAV (8.3format).. How to modify the program to allow user enter large file name 1234567890.WAV (10.3 format).. I try to change RAS.ccp library but it gives nothing..

void RAS::_send_filename(uint8_t cmd, const char *str)
{
uint8_t buf[13]; ---------------->15

memset(buf, 0, sizeof(buf));
strncpy((char *)buf, str, 12);------------------>14
_send_cmd(cmd);
_spi_send_buf(buf, sizeof(buf));
_end_spi();
}

any idea?

What are you sending the longer names to? Just sending a longer name to the function is not sufficient. If the code that you are sending the name to expects a 8.3 format name, you will not be able to change that easily.

Hi Rugged Circuit,

I have some problem to solve and I need the sampling frequency at 22050Hz. Since we know that for Fs=22050 so meaning that 1s = 22050 data. So, I want to do some frame analysis and for the time being the recording is still runinng. For example:

While recording i want to frame the data to 1024 data only, then from x= 1024 i want to do a simple calculation, x.^2..

So, from the shield how can i start to program it? Any suggestion?

Thank You

Hi All

Recently I bought the Rugged Audio Shield, to combine it with my Arduino UNO.
I would like to load the file "RecordWAV.ino" which I found on

When I try to load the file using the Arduino software, I get a load of errors.

Rec_PlayBack:31: error: 'RAS' does not name a type
Rec_PlayBack.cpp: In function 'void setup()':
Rec_PlayBack:34: error: 'RAS' was not declared in this scope
Rec_PlayBack:43: error: 'SOURCE_MONO' was not declared in this scope
Rec_PlayBack:43: error: 'SOURCE_MIC' was not declared in this scope
Rec_PlayBack.cpp: In function 'void loop()':
Rec_PlayBack:53: error: 'RAS' was not declared in this scope

So I try to load it via the Arduino UNO. But the errors already pop up during compiling.
Do I need other software to load this file?
I feel pretty stupid. What do I do wrong? What should I read?

I don't have a lot of experience with Arduino, but I did make a nice 24Vdc/4KW bidirectional motor controller using a Arduino UNO.
So making a record and playback sampler shouldn't be so difficult I guess....

Any help is appreciated!
Cheer; nico.

At a guess, I would suspect you would need to install RAS.h and RAS.cpp into a RAS directory that is in your libraries directory. On my linux system that would be in ~/sketchpad/libraries.

Hi all,

I bought RC Audio Shield more then year ago and unfortunately have to say that I was rather disappointed about results.
I never used it since.

Here is a short excerpt from a mail I wrote to RC. just to say that the guys never updated their answer:

Hello guys! [...] I got big expectations about your Audio Shield. I just got hooked up by the very first line of your description: "playing audio files from a microSD card (16-bit mono/stereo WAV)". Now I realize that I was too euphoric about it. Because I marginalized the sentence 9 lines further: "12-bit audio input and output resolution". What is the use to put information about playback of 16-bit CD-quality files at the first, if the nominal 12-bit resolution will reduce the sound quality (by decreasing dynamic range / adding noise) anyway?.. Please don't say it is just about marketing. I like the build quality and features of your audio board. It feels sturdy and nice. But now I realize that the quality of audio playback just don't fit my needs. 16-bit audio? No way. So why to mention it at all?.. OK, let's assume it is all about noisy and cool 12-bit sound. Lo-Fi, so to say. Cool guys dig it. I started to put test WAVs on the micro SD. But even if I made neat fade-ins / fade-outs (means from- and to digital zero), the playback on RC Audio Shield always makes a loud, big and scary "bump" both at the beginning and at the end of respective audio file. Should it be like that?.. Please do say it should'nt. I was happy to think that RD Audio Shield will replace my cumbersome Akai S5000 Sampler for playback. But it seems I rather will be fine with Arduino / MIDI Shield (not tested it yet) + Sampler instead - too bad. :frowning: best, Girts
Hello Girts,
Thank you for your detailed feedback. We will use it to look into the "bumps" at the beginning and end of the sound, and to improve the design for the next revision.
Best regards,
--
Rugged Circuits Support
support@ruggedcircuits.com
http://www.ruggedcircuits.com

I fixed the "bump" at the beginning and end of playing a wav file by explicitly calling "stop" in the firmware. See pull request here: Stop the "pop" between audio tracks by jaredhobbs · Pull Request #1 · RuggedCircuits/Rugged-Audio-Shield-Firmware · GitHub