Ejemplo n.º 1
0
 /// <summary>
 /// 初始化Speex编解码器实例
 /// </summary>
 /// <param name="quality">压缩质量,值越大压缩比越小,音质越清晰,有效范围 1-10</param>
 /// <param name="modelType">编码器类型</param>
 public SpeexBase(ModelType modelType, int quality)
 {
     _encodeStateIntptr = SpeexEncodeApi.Speex_encoder_init(SpeexCommon.Speex_lib_get_mode((int)modelType)); //初始化模式结构体 拿到state指针
     _decodeStateIntptr = SpeexDecodeApi.Speex_decoder_init(SpeexCommon.Speex_lib_get_mode((int)modelType)); //初始化模式结构体 拿到state指针
     SpeexBitsApi.Speex_bits_init(ref _encodeSpeexBits);                                                     //初始化数据结构体
     SpeexBitsApi.Speex_bits_init(ref _decodeSpeexBits);                                                     //初始化数据结构体
     this.SetEncode(SetCoderState.Quality, quality);
 }
Ejemplo n.º 2
0
 /// <summary>
 /// 对Speex编解码器进行后续的清理工作
 /// </summary>
 public void Dispose()
 {
     SpeexEncodeApi.Speex_encoder_destroy(_encodeStateIntptr);
     SpeexDecodeApi.Speex_decoder_destroy(_decodeStateIntptr);
     SpeexBitsApi.Speex_bits_destroy(ref _encodeSpeexBits);
     SpeexBitsApi.Speex_bits_destroy(ref _decodeSpeexBits);
     GC.Collect();
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 解压Speex音频数据流
        /// </summary>
        /// <param name="input">需要解压的数据流</param>
        /// <returns>解压后的正常音频数据</returns>
        public byte[] DecodeBase(byte[] input)
        {
            SpeexBitsApi.Speex_bits_reset(ref _decodeSpeexBits);
            SpeexBitsApi.Speex_bits_read_from(ref _decodeSpeexBits, input, input.Length);
            //int i = SpeexBitsApi.Speex_bits_nbytes(ref _decodeSpeexBits);
            short[] buffer = new short[160];
            int     len    = SpeexDecodeApi.Speex_decode_int(_decodeStateIntptr, ref _decodeSpeexBits, buffer);

            return(SpeexHelper.ShortsToBytes(buffer));
        }