I spent quite a while fiddling with ndspChnWaveBufAdd to get audio to play and noticed that the examples allocate a buffer with linearAlloc (which aligns to a multiple of 0x80) and then store that in the ndspWaveBuf struct. Apparently, it does not function properly if the buffer is not aligned, but this is not mentioned anywhere.