5
\$\begingroup\$

Generally, I wish to build an embedded system that is capable of playing back multiple high quality audio samples simultaneously, with a very low latency (eg. from trigger to audio). There may be over 4000 individual samples using 2GB of storage space and at any one time 50 of those samples may be playing. Specifically, I want to build the internals of a sample-based digital piano instrument.

What is the easiest (ie. ease of implementation) chip/board combination that could accomplish this (including the method for storing the samples)?

\$\endgroup\$
1
  • \$\begingroup\$ i'd like to point out that ti has many DSPs on their sample program, so you could request one based on the specs and if it doesn't meet your needs, no harm done. \$\endgroup\$
    – user11613
    Commented Aug 18, 2012 at 18:56

1 Answer 1

2
\$\begingroup\$

Sounds like an STM32F4 (or perhaps another Cortex-M4F MCU) with an appropriate I2S codec could do the job. It runs at 168MHz and has an SDIO interface for microSD cards, I2S interfaces, DSP instructions, DMA, FSMC for interfacing external RAM and flash, etc. It certainly doesn't have enough internal RAM to hold 50 samples at the same time, though, so you'll likely need external RAM. If you don't need to do a lot of DSP in real time it should have enough power to do the job.

The STM32F4Discovery board has an I2S audio codec but not a microSD slot (or any kind of external memory) onboard.

If however a Cortex-M4 turns out to be not enough, you'll probably have to start looking at some "serious" hardware such as:

  • an FPGA with a control CPU and hardware mixing and I2S engines,

  • or a "real" DSP from TI or AD (probably the most expensive solution as far as development tools go),

  • or maybe an ARM CPU such as ARM9, ARM11 or Cortex-A, as found in Beagleboard, Raspberry Pi etc., some of which have DSP extensions or separate DSP cores.

There's also the issue of loading samples into the RAM from the main storage. If your latency requirements include loading all 50 samples every time, you may be in trouble. If they can be preloaded, much better. In fact you might even get away with streaming samples directly from flash storage if it (and the bus) is fast enough, but you'll need to be careful about jitter. You need to do careful calculations taking into accound your timing budget and latency/throughoutput of each stage of your system before you commit to any design decisions.

\$\endgroup\$
2
  • \$\begingroup\$ The samples can definitely be preloaded so that shouldn't be a problem. Having spare power for additional features like reverb etc. would actually be somewhat useful, so I think the more powerful recommendations might be the way to go, despite the extra expense. Thanks for this detailed answer. \$\endgroup\$ Commented Jun 24, 2012 at 21:44
  • \$\begingroup\$ It may be possible to stream the samples from the SD card. If the individual samples are small, you could actually only pull them from the storage medium into system RAM right when they are needed. \$\endgroup\$ Commented Aug 19, 2012 at 0:53

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.