// This file is automatically generated.
using System;
using System.Text;
using System.Runtime.InteropServices;

namespace Steam4NET
{

	[StructLayout(LayoutKind.Sequential,Pack=4)]
	public class IClientAudioVTable
	{
		public IntPtr StartVoiceRecording0;
		public IntPtr StopVoiceRecording1;
		public IntPtr ResetVoiceRecording2;
		public IntPtr GetAvailableVoice3;
		public IntPtr GetVoice4;
		public IntPtr GetCompressedVoice5;
		public IntPtr DecompressVoice6;
		public IntPtr GetVoiceOptimalSampleRate7;
		private IntPtr DTorIClientAudio8;
	};
	
	[InteropHelp.InterfaceVersion("CLIENTAUDIO_INTERFACE_VERSION001")]
	public class IClientAudio : InteropHelp.NativeWrapper<IClientAudioVTable>
	{
		[UnmanagedFunctionPointer(CallingConvention.ThisCall)] private delegate void NativeStartVoiceRecording( IntPtr thisptr );
		public void StartVoiceRecording(  ) 
		{
			this.GetFunction<NativeStartVoiceRecording>( this.Functions.StartVoiceRecording0 )( this.ObjectAddress ); 
		}
		
		[UnmanagedFunctionPointer(CallingConvention.ThisCall)] private delegate void NativeStopVoiceRecording( IntPtr thisptr );
		public void StopVoiceRecording(  ) 
		{
			this.GetFunction<NativeStopVoiceRecording>( this.Functions.StopVoiceRecording1 )( this.ObjectAddress ); 
		}
		
		[UnmanagedFunctionPointer(CallingConvention.ThisCall)] private delegate void NativeResetVoiceRecording( IntPtr thisptr );
		public void ResetVoiceRecording(  ) 
		{
			this.GetFunction<NativeResetVoiceRecording>( this.Functions.ResetVoiceRecording2 )( this.ObjectAddress ); 
		}
		
		[UnmanagedFunctionPointer(CallingConvention.ThisCall)] private delegate EVoiceResult NativeGetAvailableVoiceUUU( IntPtr thisptr, ref UInt32 pcbCompressed, ref UInt32 pcbUncompressed, UInt32 nUncompressedVoiceDesiredSampleRate );
		public EVoiceResult GetAvailableVoice( ref UInt32 pcbCompressed, ref UInt32 pcbUncompressed, UInt32 nUncompressedVoiceDesiredSampleRate ) 
		{
			return this.GetFunction<NativeGetAvailableVoiceUUU>( this.Functions.GetAvailableVoice3 )( this.ObjectAddress, ref pcbCompressed, ref pcbUncompressed, nUncompressedVoiceDesiredSampleRate ); 
		}
		
		[UnmanagedFunctionPointer(CallingConvention.ThisCall)] private delegate EVoiceResult NativeGetVoiceBBUUBBUUU( IntPtr thisptr, [MarshalAs(UnmanagedType.I1)] bool bWantCompressed, Byte[] pDestBuffer, UInt32 cbDestBufferSize, ref UInt32 nBytesWritten, [MarshalAs(UnmanagedType.I1)] bool bWantUncompressed, Byte[] pUncompressedDestBuffer, UInt32 cbUncompressedDestBufferSize, ref UInt32 nUncompressBytesWritten, UInt32 nUncompressedVoiceDesiredSampleRate );
		public EVoiceResult GetVoice( bool bWantCompressed, Byte[] pDestBuffer, ref UInt32 nBytesWritten, bool bWantUncompressed, Byte[] pUncompressedDestBuffer, ref UInt32 nUncompressBytesWritten, UInt32 nUncompressedVoiceDesiredSampleRate ) 
		{
			return this.GetFunction<NativeGetVoiceBBUUBBUUU>( this.Functions.GetVoice4 )( this.ObjectAddress, bWantCompressed, pDestBuffer, (UInt32) pDestBuffer.Length, ref nBytesWritten, bWantUncompressed, pUncompressedDestBuffer, (UInt32) pUncompressedDestBuffer.Length, ref nUncompressBytesWritten, nUncompressedVoiceDesiredSampleRate ); 
		}
		
		[UnmanagedFunctionPointer(CallingConvention.ThisCall)] private delegate EVoiceResult NativeGetCompressedVoiceBUU( IntPtr thisptr, Byte[] pDestBuffer, UInt32 cbDestBufferSize, ref UInt32 nBytesWritten );
		public EVoiceResult GetCompressedVoice( Byte[] pDestBuffer, ref UInt32 nBytesWritten ) 
		{
			return this.GetFunction<NativeGetCompressedVoiceBUU>( this.Functions.GetCompressedVoice5 )( this.ObjectAddress, pDestBuffer, (UInt32) pDestBuffer.Length, ref nBytesWritten ); 
		}
		
		[UnmanagedFunctionPointer(CallingConvention.ThisCall)] private delegate EVoiceResult NativeDecompressVoiceBUBUUU( IntPtr thisptr, Byte[] pCompressed, UInt32 cbCompressed, Byte[] pDestBuffer, UInt32 cbDestBufferSize, ref UInt32 nBytesWritten, UInt32 nDesiredSampleRate );
		public EVoiceResult DecompressVoice( Byte[] pCompressed, Byte[] pDestBuffer, ref UInt32 nBytesWritten, UInt32 nDesiredSampleRate ) 
		{
			return this.GetFunction<NativeDecompressVoiceBUBUUU>( this.Functions.DecompressVoice6 )( this.ObjectAddress, pCompressed, (UInt32) pCompressed.Length, pDestBuffer, (UInt32) pDestBuffer.Length, ref nBytesWritten, nDesiredSampleRate ); 
		}
		
		[UnmanagedFunctionPointer(CallingConvention.ThisCall)] private delegate UInt32 NativeGetVoiceOptimalSampleRate( IntPtr thisptr );
		public UInt32 GetVoiceOptimalSampleRate(  ) 
		{
			return this.GetFunction<NativeGetVoiceOptimalSampleRate>( this.Functions.GetVoiceOptimalSampleRate7 )( this.ObjectAddress ); 
		}
		
	};
}
