Click here to Skip to main content
15,881,870 members
Articles / Programming Languages / C#
Tip/Trick

C# MP3 Compressor

Rate me:
Please Sign up or sign in to vote.
0.00/5 (No votes)
15 Oct 2012CPOL2 min read 21.4K   1.8K   15   2
This is a bug fix to "C# MP3 Compressor".

Introduction

Please note - this tip is merely an update to the code published in the article C# MP3 Compressor. I did not write any of this original code, but I've found it very useful so I created this tip to fix a couple of bugs and provide a little more background on the RIFF format. 

The original project is a very useful example of MP3 compression and WAV to MP3 conversion, but I was experiencing problems with WAV files that contain additional chunks (e.g., BWAV format, stuff from ProTools, etc.). The WaveStream class made some unsafe assumptions about the structure of the RIFF data, so here is my fix for the problems I encountered.

As with the original, there is code from the article: A low level audio player in C# by Ianier Munoz. In fact, this is the only code I've changed.

The project has also been upgraded to VS2010.

Background

Here are a couple of useful articles about the RIFF file format:

Using the Code

The only changes are in the WaveStream.cs file, in the yeti.mmedia project.

There are two main bug fixes:

  1. It is no longer assumed that the "fmt" chunk will be the first data chunk after the RIFF header. It might well not be.
  2. The old code assumed that all the chunk headers would be DWORD (4 byte) aligned. This is not at all guaranteed, the RIFF format only mandates word (2 byte) alignment. In some cases, this would cause the chunks to be missed, and the file would fail to read.

The code now also accounts for cases where a chunk's data is an odd number of bytes long, in which case there should be a padding byte which is not counted in the chunk length field. Apparently. I've never seen this in a real life file, but if it occurs the code should handle it.

Additional Resources

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
United Kingdom United Kingdom
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Questionnot for windows 8 metro Pin
atmonline10-Oct-12 6:06
atmonline10-Oct-12 6:06 
AnswerRe: not for windows 8 metro Pin
Beercolhol15-Oct-12 6:59
Beercolhol15-Oct-12 6:59 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.