Leo's Audio DSP project

Friday, September 21, 2007

My Current Projects

Recently completed projects:
  • Simple Windows UI for a C++ console application I wrote.

Current projects:

  • Various experiments on my new Altera DE1 FPGA dev board. The board has a Cyclone II FPGA chip and lets me experiment with its NIOS II soft processor as well as various audio/video capabilities. After experimenting with basic functions I will look into DMA optimization and possibly implement an audio synthesizer.
Side projects:
  • Various implementations with my TI-430 low power microprocessor. It is a dev board on a USB stick with some pin access to the micro controller chip. It came with some sample C code I vaguely understand.

Potential projects:

  • A basic embedded system on an A/D BlackFin dev board. This comes with the VisualDSP++ dev platform I'm already familiar with.

Friday, August 17, 2007

My first Mac AU plug-in is implemented

I implemented the Mac AU plug-in version of the chorus effect. I didn't change the DSP parameters to turn in into a flanger effect but I could do that easily. My main goal was to finish the software plug-in version.

The plug-in was based on a tremolo AU plug-in C++ source code provided by Apple, Inc. I replaced the DSP algorithm with my own and created Dry/Wet and Depth controls for my own effect.

The plug-in was tested on the latest GarageBand and sounds great with no artifacts.

The plug-in file is available upon request.

Friday, May 11, 2007

The future of the project: Software plug-in

I decided to write a Mac Audio Unit (AU) plug-in and convert the implemented effect to a flanger since chorus and flanger are really similar. The plug-in will be launchable in GarageBand and will have 2-3 adjustable parameters that can be controlled on-the-fly.

I'm using the codebase of a sample AU that came with the Xcode developer package.

My first milestone is to get the DSP running through the Mac with no controls.

The second milestone is to implement the first controllable parameter and move on to the second and third.

Thursday, March 29, 2007

Presentation at U of U Technical Open House

Gave a 15 minute presentation at the U of U Technical Open House. Finished the presentation with a 3 minute audio demo. Presentation was great success. Got positive feedback from the judges and attendees. Presentation video is avaialble on DVD upon request.

Find presentation here:
http://www.eng.utah.edu/~aksu/LeoSP.ppt

Final report:
http://www.eng.utah.edu/~aksu/FinalReport.pdf

Wednesday, March 28, 2007

fixed click bug

fixed a subtle but periodic click. It was caused by adding a constant to a circular index to access circular memory. Lesson learned: never add a constant to a circular index.

Wednesday, March 21, 2007

C code reviewed by Chris Belcher

Harman DSP Engineer Chris Belcher reviewed my code and gave tips on simplifying the code. Now I can see where I can avoid unnecessary loops and calculations. We also found out the cause of the 1 Hz click in the interpolated algorithm. Now all I need to do is to think about how to optimize and make the changes in the code. After this, my chorus will be professional grade.

Implemented interpolated chorus

I improved the existing chorus algorithm by interpolating between two samples and constructing an intermediate sample. The effect sounded better but the changes caused minor clicks @ about 1 Hz. This will be debugged shortly.

Friday, March 09, 2007

Final C code review by Michael Carnes

I adjusted all parameters to create a pleasant sounding chorus with no artifacts. This was a single voice chorus. I created the desired sound. I showed my code to Principal Engineer Michael Carnes to get some feedback. He made the following points:

* The way I am seperating my left and right channels is putting the processor through unnecessary loops which causes inefficiency.

* I am calculating 32-bit sine values for each sample, this is unnecessary and the precise sine values can be replaced by an LUT or by using a triangle modulator which can be generated by doing some simple addition.

None of this came as a surprise since my purpose was to create the effect as quickly as possible. Now I have insights on how to improve efficiency.

We also covered the concept of interpolation to make the chorus sound 'professional grade'. It wouldn't require a lot of time to implement.

At this point, the chorus is sounding good for the purposes of the project. However, I want to branch the code off and try for another week to implement the desired interpolated version.