Да не стиль программирования был целью, я попытался написать так чтобы даже новичок понял суть написанного. Поэтому и раскладывал числа на много строк использовал страшноватый BitConverter с foreach вместо чего то подобного stream.WriteByte((byte)(data[i] & 0xff)); stream.WriteByte(unchecked ((byte)(data[i] >> 8)));.
Стандартными средствами. Да проигрываем wav-файл (он отличается на 44 байта от нашего массива) впрочем читать его можно из MemoryStream. Теоретически можно доработать поддержку скажем DirectSound.
stream.WriteByte((byte)(data[i] & 0xff)); stream.WriteByte(unchecked ((byte)(data[i] >> 8)));.