public void Destroy()
 {
     try
     {
         OpusLibrary.Java_aopus_OpusLibrary_decoderDestroy(JNIEnv.Handle, IntPtr.Zero, State);
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex);
     }
 }
 public Decoder(int clockRate, int channels, int packetTime)
 {
     try
     {
         State = OpusLibrary.Java_aopus_OpusLibrary_decoderCreate(JNIEnv.Handle, IntPtr.Zero, clockRate, channels, packetTime);
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex);
     }
 }
        public byte[] Decode(byte[] encodedData, bool fec)
        {
            IntPtr encodedDataPtr = (encodedData == null ? IntPtr.Zero : JNIEnv.NewArray(encodedData));

            try
            {
                return((byte[])JNIEnv.GetArray(OpusLibrary.Java_aopus_OpusLibrary_decoderDecode2(JNIEnv.Handle, IntPtr.Zero, State, encodedDataPtr, fec), (encodedData == null ? JniHandleOwnership.TransferLocalRef : JniHandleOwnership.DoNotTransfer), typeof(byte)));
            }
            finally
            {
                JNIEnv.DeleteLocalRef(encodedDataPtr);
            }
        }
        public byte[] Encode(byte[] data, int index, int length)
        {
            IntPtr dataPtr = JNIEnv.NewArray(data);

            try
            {
                return((byte[])JNIEnv.GetArray(OpusLibrary.Java_aopus_OpusLibrary_encoderEncode(JNIEnv.Handle, IntPtr.Zero, State, dataPtr, index, length), JniHandleOwnership.TransferLocalRef, typeof(byte)));
            }
            finally
            {
                JNIEnv.DeleteLocalRef(dataPtr);
            }
        }
 public void DeactivateFEC()
 {
     OpusLibrary.Java_aopus_OpusLibrary_encoderDeactivateFEC(JNIEnv.Handle, IntPtr.Zero, State);
 }
 public void ActivateFEC(int packetLossPercent)
 {
     OpusLibrary.Java_aopus_OpusLibrary_encoderActivateFEC(JNIEnv.Handle, IntPtr.Zero, State, packetLossPercent);
 }