Exemple #1
0
        public async Task PlayWave(RiffCodec riff)
        {
            uint   WAVE_MAPPER   = uint.MaxValue;
            int    CALLBACK_NULL = 0;
            IntPtr handle        = IntPtr.Zero;

            var header   = riff.FormatHeader as WaveFormatHeader;
            int duration = Convert.ToInt32(header.AvgBytesPerSec / header.SampleRate);

            var waveFormat = new WAVEFORMAT
            {
                wFormatTag      = header.FormatTag,
                nChannels       = header.ChannelsCount,
                nSamplesPerSec  = header.SampleRate,
                nAvgBytesPerSec = header.AvgBytesPerSec,
                nBlockAlign     = header.BlockAlign,
                wBitsPerSample  = header.BitsPerSample,
                cbSize          = header.ExtraInfoSize
            };

            var waveHdr = new WAVEHDR
            {
                dwBufferLength  = riff.DataSize,
                dwBytesRecorded = riff.DataSize,
                dwUser          = 0,
                dwFlags         = 0,
                dwLoops         = 0
            };

            using var buffer = new UnamanagedMemory((int)riff.DataSize);
            Marshal.Copy(riff.Data, 0, buffer.Pointer, riff.Data.Length);
            waveHdr.lpData = buffer.Pointer;

            uint res = uint.MaxValue;

            res = WindowsMultimedia.waveOutOpen(ref handle, WAVE_MAPPER, ref waveFormat, 0, 0, CALLBACK_NULL);
            CheckMethodResult(nameof(WindowsMultimedia.waveOutOpen), res);

            res = WindowsMultimedia.waveOutPrepareHeader(handle, ref waveHdr, Marshal.SizeOf(waveHdr));
            CheckMethodResult(nameof(WindowsMultimedia.waveOutPrepareHeader), res);

            res = WindowsMultimedia.waveOutWrite(handle, ref waveHdr, Marshal.SizeOf(waveHdr));
            CheckMethodResult(nameof(WindowsMultimedia.waveOutWrite), res);
            await Task.Delay(duration * 1000);

            res = WindowsMultimedia.waveOutClose(handle);
            CheckMethodResult(nameof(WindowsMultimedia.waveOutClose), res);
        }
Exemple #2
0
 public static extern int waveOutOpen(ref IntPtr t, uint id, ref WAVEFORMAT pwfx, IntPtr dwCallback, int dwInstance, int fdwOpen);
 public static extern int waveInOpen(out IntPtr phwi, int uDeviceID, WAVEFORMAT lpFormat, int dwCallback, int dwInstance, int dwFlags);
        public static extern int waveOutOpen(
		ref   int lphWaveOut,
		int uDeviceID,
		ref   WAVEFORMAT lpFormat,
		int dwCallback,
		int dwInstance,
		int dwFlags
		);
Exemple #5
0
 public static extern int mmioRead(IntPtr hmmio, ref WAVEFORMAT pch, int cch);
Exemple #6
0
 public static extern uint waveOutOpen(ref IntPtr phwo, uint uDeviceID, ref WAVEFORMAT pwfx, int dwCallback, int dwInstance, int fdwOpen);