internal static extern bool StreamEncoderFinish(NativeStreamEncoderHandle handle);
internal static extern EncoderState StreamEncoderGetState(NativeStreamEncoderHandle handle);
internal static extern bool StreamEncoderProcessInterleaved(NativeStreamEncoderHandle handle, int[] buffer, uint samples);
internal static extern bool StreamEncoderSetMetadata(NativeStreamEncoderHandle handle, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] IntPtr[] metaData, uint blocks);
internal static extern EncoderInitStatus StreamEncoderInitialize(NativeStreamEncoderHandle handle, StreamEncoderWriteCallback writeCallback, StreamEncoderSeekCallback seekCallback, StreamEncoderTellCallback tellCallback, StreamEncoderMetadataCallback metadataCallback, IntPtr userData);
internal static extern void StreamEncoderSetCompressionLevel(NativeStreamEncoderHandle handle, uint compressionLevel);
internal static extern void StreamEncoderSetTotalSamplesEstimate(NativeStreamEncoderHandle handle, ulong totalSamples);
internal static extern void StreamEncoderSetSampleRate(NativeStreamEncoderHandle handle, uint sampleRate);
internal static extern void StreamEncoderSetBitsPerSample(NativeStreamEncoderHandle handle, uint bitsPerSample);
internal static extern void StreamEncoderSetChannels(NativeStreamEncoderHandle handle, uint channels);