datasheets.com EBN.com EDN.com EETimes.com Embedded.com PlanetAnalog.com TechOnline.com  
Events
UBM Tech
UBM Tech

Message Board

Frank Eory

Audio simulations that will knock your SoX off!

Frank Eory

10/21/2010 8:23 PM EDT

If you work in audio hardware design, I'm sure there are times when you've wanted to actually hear the results of a particular signal processing task -- to hear the output of your simulation -- to make sure the algorithm or filter achieved the effect you wanted. Sometimes examining the FFT of the simulation output just doesn't cut it...you really want to HEAR it.

Now you're probably thinking, why not just use the wavread & wavwrite functions in Matlab? After all, if you're working in audio, you probably have access to Matlab.

But even if you do have Matlab, when you're working on a hardware design, at some point you're simulating Verilog or VHDL RTL, or a combination of RTL and SPICE in a mixed-signal simulation. Perhaps your simulation environment has all the analysis capability you need, except for the ability to read & write .wav files -- files you could actually play and hear -- and as much as you love Matlab, it's a pain to go back & forth between tools, maybe even between computers, just to be able to hear the results of your fabulous signal processing.

To the rescue comes Sox, a multi-platform utility that does audio format conversions and a whole bunch of other stuff.

Sox is one of the few programs that can read a plain text file of numeric values and turn it into a .wav file. Likewise, it can read a .wav file and turn it into a text file of numeric values, so you can make more interesting stimuli for your simulations that just the usual sine waves!

Take for example a hypothetical Verilog RTL simulation in which you have captured the audio sample times and audio sample values for an output channel in a text file as floating point numbers, like this:

2.26757E-05 4.76E-01
4.53515E-05 5.25E-01
...

Just add a one line comment at the top of the file that indicates the sampling rate in Hz, as follows:

; Sample Rate 44100

Make sure your text file name ends in .dat and sox will understand exactly how to convert it in a simple one line shell command:

sox -V outfile.dat outfile.wav

sox can also play the resulting .wav file on most platforms.

And again, for more interesting stimuli to run through those Verilog or mixed-signal simulations, you can run:

sox -V piece_of_music.wav piece_of_music.dat

and you will get a text file of sample times and audio sample values that, with minor massaging, can be applied as stimulus to just about any simulator you might be using.

I recently had a need to do just such a text-to-wav conversion and despite my best search efforts, found it difficult to find a clear example of using sox for this conversion.

So if anyone else has a similar need, I hope you find this helpful.






Robotics Developer

10/23/2010 11:33 PM EDT

That sounds really neat! Is SoX free? I do not do much analog but the opportunity to test out and try various filters (using spice or matlab) and hearing the result would be very helpful (not to mention cool)! Thanks for the heads up.

Sign in to Reply



Frank Eory

10/26/2010 7:28 PM EDT

Yes, sox is open source and is commonly included in Linux distributions. Chances are you probably already have it under /usr/bin.

Sign in to Reply



goafrit

5/6/2011 4:47 PM EDT

Congrats on the award

Sign in to Reply



ReneCardenas

10/27/2010 8:09 PM EDT

Frank,

Thanks for this pointer, it sure comes timely for me (since I wasn't aware of it), and I am working some personal project to synthesize couple simple sounds, such as: Heartbeat at rest, active, whistle, etc

Sign in to Reply



Mark Wehrmeister

10/29/2010 2:54 AM EDT

SoX sounds like a great open source tool. Does anyone know of other open source tools that can do the same (or similar) things?

Sign in to Reply



Soundfac

2/5/2011 2:42 PM EST

Thanks for the pointer Frank. If you are designing hardware you can also use Linear Technology's LTSpice to play and record wav files from a schematic. You can use any wav file as an input voltage source and save the output result as a wav file. It's very nice to 'listen' to your design before you build it. LTSpice is free from http://www.linear.com/designtools/software/

Sign in to Reply



Please sign in to post comment

Navigate to related information

Datasheets.com Parts Search

185 million searchable parts
(please enter a part number or hit search to begin)