public unsafe byte[] Decode(byte *inputOpusData, int dataLength, out int decodedLength) { if (_disposed) { throw new ObjectDisposedException("OpusDecoder"); } byte[] decoded = new byte[MaxDataBytes]; int frameCount = FrameCount(MaxDataBytes); int length; fixed(byte *bdec = decoded) { var decodedPtr = new IntPtr(bdec); length = inputOpusData != null ? OpusApi.opus_decode(_decoder, inputOpusData, dataLength, decodedPtr, frameCount, 0) : OpusApi.opus_decode(_decoder, (byte[])null, 0, decodedPtr, frameCount, ForwardErrorCorrection ? 1 : 0); } decodedLength = length * 2; if (length < 0) { throw new Exception("Decoding failed - " + (Errors)length); } return(decoded); }
/// <summary> /// Creates a new Opus decoder. /// </summary> /// <param name="outputSampleRate">Sample rate to decode at (Hz). This must be one of 8000, 12000, 16000, 24000, or 48000.</param> /// <param name="outputChannels">Number of channels to decode.</param> /// <returns>A new <c>OpusDecoder</c>.</returns> public static OpusDecoder Create(int outputSampleRate, int outputChannels) { if (outputSampleRate != 8000 && outputSampleRate != 12000 && outputSampleRate != 16000 && outputSampleRate != 24000 && outputSampleRate != 48000) { throw new ArgumentOutOfRangeException(nameof(outputSampleRate)); } if (outputChannels != 1 && outputChannels != 2) { throw new ArgumentOutOfRangeException(nameof(outputChannels)); } OpusLoader.LoadOpus(); IntPtr error; IntPtr decoder = OpusApi.opus_decoder_create(outputSampleRate, outputChannels, out error); if ((Errors)error != Errors.OK) { throw new Exception("Exception occurred while creating decoder"); } return(new OpusDecoder(decoder, outputSampleRate, outputChannels)); }
/// <summary> /// Produces Opus encoded audio from PCM samples. /// </summary> /// <param name="inputPcmSamples">PCM samples to encode.</param> /// <param name="sampleLength">How many bytes to encode.</param> /// <param name="encodedLength">Set to length of encoded audio.</param> /// <returns>Opus encoded audio buffer.</returns> public unsafe byte[] Encode(byte *inputPcmSamples, int sampleLength, out int encodedLength) { if (_disposed) { throw new ObjectDisposedException("OpusEncoder"); } int frames = FrameCount(sampleLength); byte[] encoded = new byte[MaxDataBytes]; int length; fixed(byte *benc = encoded) { var encodedPtr = new IntPtr(benc); length = OpusApi.opus_encode(_encoder, inputPcmSamples, frames, encodedPtr, sampleLength); } encodedLength = length; if (length < 0) { throw new Exception("Encoding failed - " + (Errors)length); } return(encoded); }
/// <summary> /// Creates a new Opus encoder. /// </summary> /// <param name="inputSamplingRate"> /// Sampling rate of the input signal (Hz). This must be one of 8000, 12000, 16000, 24000, /// or 48000. /// </param> /// <param name="inputChannels">Number of channels (1 or 2) in input signal.</param> /// <param name="application">Coding mode.</param> /// <returns>A new <c>OpusEncoder</c></returns> public static OpusEncoder Create(int inputSamplingRate, int inputChannels, Application application) { if (inputSamplingRate != 8000 && inputSamplingRate != 12000 && inputSamplingRate != 16000 && inputSamplingRate != 24000 && inputSamplingRate != 48000) { throw new ArgumentOutOfRangeException(nameof(inputSamplingRate)); } if (inputChannels != 1 && inputChannels != 2) { throw new ArgumentOutOfRangeException(nameof(inputChannels)); } OpusLoader.LoadOpus(); IntPtr error; IntPtr encoder = OpusApi.opus_encoder_create(inputSamplingRate, inputChannels, (int)application, out error); if ((Errors)error != Errors.OK) { throw new Exception("Exception occurred while creating encoder"); } return(new OpusEncoder(encoder, inputSamplingRate, inputChannels, application)); }
public AudioApi(IBitmovinApiClientFactory apiClientFactory) { Aac = new AacApi(apiClientFactory); HeAacV1 = new HeAacV1Api(apiClientFactory); HeAacV2 = new HeAacV2Api(apiClientFactory); Vorbis = new VorbisApi(apiClientFactory); Opus = new OpusApi(apiClientFactory); Ac3 = new Ac3Api(apiClientFactory); Eac3 = new Eac3Api(apiClientFactory); Mp2 = new Mp2Api(apiClientFactory); Mp3 = new Mp3Api(apiClientFactory); }
public void Dispose() { if (_disposed) { return; } GC.SuppressFinalize(this); if (_decoder != IntPtr.Zero) { OpusApi.opus_decoder_destroy(_decoder); _decoder = IntPtr.Zero; } _disposed = true; }
public AudioApi(IBitmovinApiClientFactory apiClientFactory) { Aac = new AacApi(apiClientFactory); DtsPassthrough = new DtsPassthroughApi(apiClientFactory); Dts = new DtsApi(apiClientFactory); Dtsx = new DtsxApi(apiClientFactory); DolbyAtmos = new DolbyAtmosApi(apiClientFactory); HeAacV1 = new HeAacV1Api(apiClientFactory); HeAacV2 = new HeAacV2Api(apiClientFactory); Vorbis = new VorbisApi(apiClientFactory); Opus = new OpusApi(apiClientFactory); Pcm = new PcmApi(apiClientFactory); Ac3 = new Ac3Api(apiClientFactory); DolbyDigital = new DolbyDigitalApi(apiClientFactory); DolbyDigitalPlus = new DolbyDigitalPlusApi(apiClientFactory); Eac3 = new Eac3Api(apiClientFactory); Mp2 = new Mp2Api(apiClientFactory); Mp3 = new Mp3Api(apiClientFactory); }