private OpusDecoder(double frameSize, int sampleRate, int channels, bool frameSizeWasSpecified) { switch (frameSize) { case 2.5: case 5: case 10: case 20: case 40: case 60: break; default: throw new ArgumentException("Value must be one of the following: 2.5, 5, 10, 20, 40 or 60.", nameof(frameSize)); } switch (sampleRate) { case 8000: case 12000: case 16000: case 24000: case 48000: break; default: throw new ArgumentException("Value must be one of the following: 8000, 12000, 16000, 24000 or 48000.", nameof(sampleRate)); } if (channels < 1 || channels > 2) { throw new ArgumentOutOfRangeException(nameof(channels), "Value must be between 1 and 2."); } if (frameSizeWasSpecified) { FrameSize = frameSize; } SampleRate = sampleRate; Channels = channels; _samples = API.GetSampleCount(frameSize, sampleRate); _pcmLength = API.GetPCMLength(_samples, channels); _handle = API.opus_decoder_create(sampleRate, channels, out int error); API.ThrowIfError(error); }
public static extern int opus_decode(SafeDecoderHandle st, IntPtr data, int len, IntPtr pcm, int frame_size, int decode_fec);