Beispiel #1
0
        public void SetSound(byte[] data, WaveFormat sourceFormat)
        {
            MemoryStream dataStream = new MemoryStream(data);
            RawSourceWaveStream wavStream = new RawSourceWaveStream(dataStream, sourceFormat);
            WaveStream wavConvertStream = null;

            try
            {
                wavConvertStream = WaveFormatConversionStream.CreatePcmStream(wavStream);

                // using a mux, we force all sounds to be 2 channels
                MultiplexingWaveProvider sourceProvider = new MultiplexingWaveProvider(new IWaveProvider[] { wavConvertStream }, 2);
                int bytesToRead = (int)((wavConvertStream.Length * 2) / wavConvertStream.WaveFormat.Channels);
                byte[] rawWaveData = new byte[bytesToRead];
                int bytesRead = sourceProvider.Read(rawWaveData, 0, bytesToRead);

                Data = rawWaveData;
                Format = sourceProvider.WaveFormat;

                // clean up
                sourceProvider = null;
            }
            catch
            {
                Data = data;
                Format = sourceFormat;
            }
            finally
            {
                if (wavConvertStream != null)
                    wavConvertStream.Dispose();
                wavConvertStream = null;
                wavStream.Dispose();
                wavStream = null;
                dataStream.Dispose();
                dataStream = null;
            }
        }