Ok, you haven't forgotten to call Initialize
You should check (with the debugger or the console) the important values involved, to make sure everything is ok:
- mp3file.Channels
- mp3file.SampleRate
- readSamples everytime OnGetData is called
- if possible, a complete chunk of samples (in the middle of the music, to avoid silences that may occur at the beginning and end) to make sure the values are not weird
By the way, what is the "0" argument of ReadSamples? And shouldn't the array be passed with the "out" or "ref" keyword, if it is modified inside the function?