OK, I've got it all working now. Turned out my original code was accidentally overwriting the header, which presumably prevented the AudioPlayMemory object from recognizing the array as legitimate.
In case it's useful to anyone else, here's a quick (and inelegant) sketch which populates an...