Hi there, welcome to the Concentus package. You're about to ask me for sample code, so I'll get straight to it: If you're already using something like P/Opus then your code probably looks like this: [DllImport(OPUS_TARGET_DLL, CallingConvention = CallingConvention.Cdecl)] private static extern IntPtr opus_encoder_create(int Fs, int channels, int application, out IntPtr error); [DllImport(OPUS_TARGET_DLL, CallingConvention = CallingConvention.Cdecl)] private static extern int opus_encode(IntPtr st, byte[] pcm, int frame_size, IntPtr data, int max_data_bytes); // Initialize IntPtr error; IntPtr _encoder = opus_encoder_create(48000, 1, OPUS_APPLICATION_AUDIO, out error); opus_encoder_ctl(_encoder, OPUS_SET_BITRATE_REQUEST, 12000); // Encoding loop byte[] inputAudioSamplesInterleaved; // 16-bit pcm data interleaved into a byte array byte[] outputBuffer[1000]; int frameSize = 960; unsafe { fixed (byte* benc = outputBuffer) { IntPtr encodedPtr = new IntPtr(benc); int thisPacketSizeOrSometimesAnErrorCode = opus_encode(_encoder, inputAudioSamplesInterleaved, frameSize, encodedPtr, outputBuffer.Length); } } Here is what you can replace it with: // Initialize OpusEncoder encoder = OpusEncoder.Create(48000, 1, OpusApplication.OPUS_APPLICATION_AUDIO); encoder.Bitrate = 12000; // Encoding loop short[] inputAudioSamples byte[] outputBuffer[1000]; int frameSize = 960; int thisPacketSize = encoder.Encode(inputAudioSamples, 0, frameSize, outputBuffer, 0, outputBuffer.Length); // this throws OpusException on a failure, rather than returning a negative number And here is the decoder path: OpusDecoder decoder = OpusDecoder.Create(48000, 1); // Decoding loop byte[] compressedPacket; int frameSize = 960; // must be same as framesize used in input, you can use OpusPacketInfo.GetNumSamples() to determine this dynamically short[] outputBuffer = new short[frameSize]; int thisFrameSize = _decoder.Decode(compressedPacket, 0, compressedPacket.Length, outputBuffer, 0, frameSize, false);