void InitWinMm( AudioChunk chunk )
 {
     handle = IntPtr.Zero;
     WaveFormatEx format = new WaveFormatEx();
     format.Channels = (ushort)chunk.Channels;
     format.ExtraSize = 0;
     format.FormatTag = WaveFormatTag.Pcm;
     format.BitsPerSample = (ushort)chunk.BitsPerSample;
     format.BlockAlign = (ushort)( format.Channels * format.BitsPerSample / 8 );
     format.SampleRate = (uint)chunk.Frequency;
     format.AverageBytesPerSecond = chunk.Frequency * format.BlockAlign;
     WaveOpenFlags flags = WaveOpenFlags.CallbackFunction;
     callback = ProcessWaveOutCallback;
     uint result = Open( out handle, new UIntPtr( (uint)0xFFFF ), ref format, callback, UIntPtr.Zero, flags );
     CheckError( result );
 }
 static extern uint Open( out IntPtr handle, UIntPtr deviceID, ref WaveFormatEx format,
     WaveOutCallback callback, UIntPtr callbackInstance, WaveOpenFlags flags);