In general, having people read through reams of code to find your problem doesn't get a lot of takers.
I would suggest putting a breakpoint right where you create the voice. Make sure to inspect all the variable and data structure values after each step, to look for problems. Then step through your program, one line at a time, from that point, until it crashes. You should see which line it crashes on. At that point, you should have a better idea why it crashes.
If it crashes inside the XAudio code itself, then chances are good that you gave it a bad pointer, or de-allocated a buffer before XAudio was done with the data, or something like that. If you link with the debug version of XAudio, it will check a number of problems for you, and break with an int 3 instruction and some output to the debugger console when you use it wrong (for many possible wrongs, but not all).
--
Jon Watte, Direct3D MVP
kW X-port 3ds Max .X exporter
14 days after getting my RROD box back, it's going back for service again. Grr.