亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? codecs.cs

?? 著名的開源動態(tài)庫speex的動態(tài)庫C++二次封裝
?? CS
字號:
using System.Collections;
using System.Data;
using System.Text;
using System.Runtime.InteropServices;
using System;

namespace RtpAudio
{

    #region//編解碼動態(tài)庫引用
    public static class Codec
    {
        /// <summary>
        /// 語音編碼初始化操作
        /// </summary>
        /// <param name="quality"></param>
        [DllImport("speexCodec.dll", EntryPoint = "encoder_init")]
        public extern static void encoder_init(int quality);

        /// <summary>
        ///語音編碼的釋放
        /// </summary>
        [DllImport("speexCodec.dll", EntryPoint = "encoder_dispose")]
        public extern static void encoder_dispose();

        /// <summary>
        ///語音編碼的執(zhí)行過程
        /// </summary>
        /// <param name="data">要進行編碼的數(shù)據(jù)</param>
        /// <param name="output">編碼之后的數(shù)據(jù)</param>
        /// <returns></returns>
        [DllImport("speexCodec.dll", EntryPoint = "encoder_encode")]
        public extern static int encoder_encode(short[] data, byte[] output);

        /// <summary>
        ///解碼初始化
        /// </summary>
        [DllImport("speexCodec.dll", EntryPoint = "decoder_init")]
        public extern static void decoder_init();

        /// <summary>
        ///語音解碼釋放 
        /// </summary>
        [DllImport("speexCodec.dll", EntryPoint = "decoder_dispose")]
        public extern static void decoder_dispose();

        /// <summary>
        ///語音解碼
        /// </summary>
        /// <param name="nbBytes">解碼的字節(jié)數(shù)</param>
        /// <param name="data">要進行解碼的語音數(shù)據(jù)</param>
        /// <param name="output">解碼后輸出的語音數(shù)據(jù)</param>
        [DllImport("speexCodec.dll", EntryPoint = "decoder_decode")]
        public extern static void decoder_decode(int nbBytes, byte[] data, short[] output);
    }
    #endregion

    #region// 編碼
    public class SpeexEncoder : IDisposable
    {
        const int FrameSize = 160;

        private bool _init = false;

        public void Dispose()
        {
            Codec.encoder_dispose();
            _init = false;
        }

        /// <summary>
        /// 初始化結構保存數(shù)據(jù),quality的值可以取 8表示 15kbps
        /// </summary>
        /// <param name="quality"></param>
        public void SetQuality(int quality)
        {
            if (_init)
                Codec.encoder_dispose();
            Codec.encoder_init(quality);
            _init = true;
        }

        //在開始捕獲后,每隔 1 秒(緩沖區(qū)設置為可以保存最長 10 秒的音頻,超過的話最早的內容會被覆蓋)讀出當前的音頻流,
        //然后送給 SpeexEncoder 編碼
        /// <summary>
        ///數(shù)據(jù)編碼
        /// </summary>
        /// <param name="data">要進行編碼的數(shù)據(jù)</param>
        /// <returns></returns>
        public byte[] Encode(byte[] data)
        {
            if (!_init)
                throw new NotSupportedException("尚未設置編碼器比特率。");
            //data的長度必須為 160 *2 的整數(shù)倍
            if (data.Length % (FrameSize * 2) != 0)  //將要進行 語音編碼的數(shù)據(jù) 切分為多個 320字節(jié)的單元
                throw new ArgumentException("數(shù)據(jù)無效。", "data");
            int nbBytes;
            short[] input = new short[FrameSize]; //一會要進行語音編碼數(shù)據(jù)
            byte[] buffer = new byte[200];
            byte[] output = new byte[0];

            for (int i = 0; i < data.Length / (FrameSize * 2); i++) //將 data數(shù)組 劃分為 多個 320 單元
            {
                for (int j = 0; j < input.Length; j++)
                    input[j] = (short)(data[i * FrameSize * 2 + j * 2] + data[i * FrameSize * 2 + j * 2 + 1] * 0x100);

                nbBytes = Codec.encoder_encode(input, buffer); //針對 每 320 字節(jié)即編碼, 編碼之后的數(shù)據(jù)長度

                Array.Resize<byte>(ref output, output.Length + nbBytes + sizeof(int));
                Array.Copy(buffer, 0, output, output.Length - nbBytes, nbBytes);
                for (int j = 0; j < sizeof(int); j++)
                {
                    output[output.Length - nbBytes - sizeof(int) + j] = (byte)(nbBytes % 0x100);
                    nbBytes /= 0x100;
                }
            }
            return output;
        }
    }
    #endregion

    #region//解碼
    public class SpeexDecoder : IDisposable
    {
        public const int FrameSize = 160;

        private bool _init = false;

        /// <summary>
        ///解碼釋放
        /// </summary>
        public void Dispose()
        {
            if (_init)
                Codec.decoder_dispose();
        }

       
        
        /// <summary>
        ///解碼語音數(shù)據(jù)
        /// </summary>
        /// <param name="data">要解碼的語音數(shù)據(jù)</param>
        /// <returns>解碼之后的語音數(shù)組</returns>
        public byte[] Decode(byte[] data)
        {
            if (!_init)
                Codec.decoder_init(); //解碼初始化
            int nbBytes, index = 0;

            byte[] input; // input數(shù)組為一暫存數(shù)組
            short[] buffer = new short[FrameSize];
            byte[] output = new byte[0];

            while (index < data.Length)
            {
                nbBytes = 0;
                //每段的前四字節(jié)存儲的是 該段數(shù)據(jù)的長度值
                index += sizeof(int);
                for (int i = 1; i <= sizeof(int); i++)
                    nbBytes = nbBytes * 0x100 + data[index - i]; 

                input = new byte[nbBytes]; //讀出對應的解碼段的長度

                Array.Copy(data, index, input, 0, input.Length);// 將接收的編碼語音數(shù)據(jù)拷貝到  input數(shù)組中去

                index += input.Length;

                //解碼之后的數(shù)據(jù)在 buffer中
                Codec.decoder_decode(nbBytes, input, buffer); //對數(shù)據(jù)進行解碼,解碼后語音數(shù)據(jù)即還原了

                Array.Resize<byte>(ref output, output.Length + FrameSize * 2);

                for (int i = 0; i < FrameSize; i++)
                {
                    output[output.Length - FrameSize * 2 + i * 2] = (byte)(buffer[i] % 0x100);
                    output[output.Length - FrameSize * 2 + i * 2 + 1] = (byte)(buffer[i] / 0x100);
                }
            }
            return output;
        }
    }
    #endregion

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情图区综合网| 亚洲欧美日韩一区二区三区在线观看 | 午夜精品视频在线观看| 一本大道久久a久久精二百| 亚洲最新在线观看| 欧美精品自拍偷拍| 激情亚洲综合在线| 欧美激情中文字幕| 色婷婷激情综合| 日本aⅴ精品一区二区三区 | 日韩免费在线观看| 狠狠色丁香久久婷婷综| 国产情人综合久久777777| 成人的网站免费观看| 亚洲mv在线观看| 日韩精品中午字幕| 国产91丝袜在线播放九色| 亚洲人妖av一区二区| 欧美疯狂性受xxxxx喷水图片| 理论电影国产精品| 国产精品热久久久久夜色精品三区| 91在线播放网址| 日日夜夜一区二区| 国产精品午夜春色av| 欧美午夜一区二区| 国产乱码字幕精品高清av| 亚洲色图视频网| 日韩精品在线网站| 91在线观看高清| 精品一区二区三区视频| 18成人在线视频| 日韩免费视频一区二区| 91麻豆精品一区二区三区| 欧美96一区二区免费视频| 中文字幕一区二区三区在线观看| 欧美乱熟臀69xxxxxx| 国产大片一区二区| 亚洲18色成人| 中文字幕成人av| 91精品麻豆日日躁夜夜躁| 波多野洁衣一区| 国产综合色在线| 亚洲成av人片一区二区梦乃 | 成人视屏免费看| 人人狠狠综合久久亚洲| 亚洲精品中文在线影院| 久久看人人爽人人| 日韩一级片在线观看| 色婷婷av久久久久久久| 国产精品资源在线看| 日韩电影在线一区| 一区二区三区四区视频精品免费| 久久免费美女视频| 日韩欧美一卡二卡| 欧美日韩免费电影| 91一区二区在线| 国产不卡一区视频| 色中色一区二区| 国产成人精品亚洲日本在线桃色| 午夜a成v人精品| 亚洲一区二区三区四区不卡| 亚洲同性gay激情无套| 国产日韩视频一区二区三区| 欧美大胆一级视频| 欧美一区二区人人喊爽| 欧美日韩国产高清一区二区三区| 成人avav在线| 不卡的av网站| 成人免费观看视频| 国产精品18久久久久久久网站| 青青草原综合久久大伊人精品 | 91精品国产综合久久福利 | 国产激情视频一区二区三区欧美 | 亚洲自拍偷拍av| 亚洲男人电影天堂| 亚洲免费观看在线视频| 国产精品久久综合| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 久久精品一区蜜桃臀影院| 欧美电影免费观看高清完整版| 91精品欧美久久久久久动漫 | 色又黄又爽网站www久久| av毛片久久久久**hd| 99久久精品免费看| 91色综合久久久久婷婷| 一本到一区二区三区| 色94色欧美sute亚洲13| 在线免费av一区| 欧美日韩视频不卡| 日韩精品一区在线| 久久久久9999亚洲精品| 国产精品欧美经典| 夜夜嗨av一区二区三区| 午夜久久久影院| 另类调教123区| 国产成人av电影在线播放| jlzzjlzz欧美大全| 欧美日韩在线播| 精品少妇一区二区| 国产精品理论片| 亚洲成在人线免费| 国产自产高清不卡| 97se亚洲国产综合在线| 欧美午夜在线观看| 精品播放一区二区| 自拍av一区二区三区| 亚洲v日本v欧美v久久精品| 久久国产夜色精品鲁鲁99| 国产aⅴ综合色| 在线观看欧美精品| 精品国产伦一区二区三区观看体验| 国产三级三级三级精品8ⅰ区| 亚洲女子a中天字幕| 奇米在线7777在线精品| 成人午夜在线视频| 欧美日韩成人一区二区| 亚洲国产精品高清| 午夜免费久久看| caoporn国产一区二区| 一区二区三区四区不卡视频| 日本美女一区二区| 99久久精品99国产精品| 欧美一区二区三区系列电影| 日本一区二区三区视频视频| 亚洲国产精品麻豆| 国产91丝袜在线观看| 在线不卡中文字幕播放| 亚洲欧洲99久久| 麻豆国产欧美日韩综合精品二区| 99久久婷婷国产| 精品国产电影一区二区| 亚洲综合图片区| 国产jizzjizz一区二区| 7777精品伊人久久久大香线蕉经典版下载| 国产偷国产偷精品高清尤物| 午夜精品久久久| 色综合婷婷久久| 日本一区二区三区高清不卡| 蜜臀av性久久久久蜜臀aⅴ| 91麻豆精品视频| 国产精品美女久久久久aⅴ| 久久国产人妖系列| 3atv在线一区二区三区| 一区二区在线观看视频在线观看| 国产美女视频一区| 欧美一卡二卡三卡| 天天操天天综合网| 欧美图区在线视频| 亚洲欧美激情插| 99精品国产视频| 中文子幕无线码一区tr| 国产成人a级片| 久久这里都是精品| 精品中文字幕一区二区小辣椒| 欧美日韩电影在线| 亚洲国产欧美在线| 欧美性大战久久久| 玉米视频成人免费看| 久久综合资源网| 美脚の诱脚舐め脚责91| 4438x亚洲最大成人网| 午夜国产不卡在线观看视频| 欧美综合在线视频| 亚洲国产精品尤物yw在线观看| 色婷婷综合久久久中文一区二区 | 亚洲欧美日韩久久| 91丨国产丨九色丨pron| 中文字幕免费不卡| 不卡一卡二卡三乱码免费网站| 国产欧美精品一区| 波多野结衣在线一区| 国产精品嫩草99a| 99久久精品免费看| 亚洲男女一区二区三区| 91麻豆福利精品推荐| 一区二区三区美女| 欧美人与性动xxxx| 蜜桃av一区二区| 久久精品人人爽人人爽| 国产成人综合亚洲91猫咪| 国产精品蜜臀av| 在线一区二区三区| 天天综合日日夜夜精品| 日韩久久精品一区| 国产精品一卡二| 亚洲视频在线一区| 欧美日韩国产欧美日美国产精品| 日韩中文字幕一区二区三区| 欧美一区二区三区四区视频| 国产一区二区精品在线观看| 国产精品亲子乱子伦xxxx裸| 色综合色狠狠综合色| 日韩不卡一区二区| 久久久不卡网国产精品二区 | 色噜噜狠狠成人中文综合| 国产成人精品免费看| 亚洲人成网站在线| 欧美精品第1页| 国产成人高清在线| 亚洲高清不卡在线|