コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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));
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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));
        }
コード例 #5
0
 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);
 }
コード例 #6
0
        public void Dispose()
        {
            if (_disposed)
            {
                return;
            }

            GC.SuppressFinalize(this);

            if (_decoder != IntPtr.Zero)
            {
                OpusApi.opus_decoder_destroy(_decoder);
                _decoder = IntPtr.Zero;
            }

            _disposed = true;
        }
コード例 #7
0
 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);
 }