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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? adpcm.c

?? 由HawK提供的語音壓縮軟件
?? C
字號:
/***********************************************************
Copyright 1992 by Stichting Mathematisch Centrum, Amsterdam, The
Netherlands.

                        All Rights Reserved

Permission to use, copy, modify, and distribute this software and its 
documentation for any purpose and without fee is hereby granted, 
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in 
supporting documentation, and that the names of Stichting Mathematisch
Centrum or CWI not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior permission.

STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

******************************************************************/

/*
*  Cleaned up by Phil Frisbie for use in HawkVoice
*/

/*
** Intel/DVI ADPCM coder/decoder.
**
** The algorithm for this coder was taken from the IMA Compatability Project
** proceedings, Vol 2, Number 2; May 1992.
**
** Version 1.2, 18-Dec-92.
**
** Change log:
** - Fixed a stupid bug, where the delta was computed as
**   stepsize*code/4 in stead of stepsize*(code+0.5)/4.
** - There was an off-by-one error causing it to pick
**   an incorrect delta once in a blue moon.
** - The NODIVMUL define has been removed. Computations are now always done
**   using shifts, adds and subtracts. It turned out that, because the standard
**   is defined using shift/add/subtract, you needed bits of fixup code
**   (because the div/mul simulation using shift/add/sub made some rounding
**   errors that real div/mul don't make) and all together the resultant code
**   ran slower than just using the shifts all the time.
** - Changed some of the variable names to be more meaningful.
*/

#include "adpcm.h"

/* Intel ADPCM step variation table */
static int indexTable[16] = {
    -1, -1, -1, -1, 2, 4, 6, 8,
    -1, -1, -1, -1, 2, 4, 6, 8,
};

static int stepsizeTable[89] = {
    7, 8, 9, 10, 11, 12, 13, 14, 16, 17,
    19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
    50, 55, 60, 66, 73, 80, 88, 97, 107, 118,
    130, 143, 157, 173, 190, 209, 230, 253, 279, 307,
    337, 371, 408, 449, 494, 544, 598, 658, 724, 796,
    876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066,
    2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358,
    5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,
    15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767
};

int adpcm_coder(short *indata, unsigned char *outdata, int len, struct adpcm_state *state)
{
    int val;			/* Current input sample value */
    unsigned int delta;	/* Current adpcm output value */
    int diff;			/* Difference between val and valprev */
    int step;	        /* Stepsize */
    int valpred;		/* Predicted output value */
    int vpdiff;         /* Current change to valpred */
    int index;			/* Current step change index */
    unsigned int outputbuffer = 0;/* place to keep previous 4-bit value */
    int count = 0;      /* the number of bytes encoded */
    
    valpred = state->valprev;
    index = (int)state->index;
    step = stepsizeTable[index];
    
    while (len > 0 ) {
        /* Step 1 - compute difference with previous value */
        val = *indata++;
        diff = val - valpred;
        if(diff < 0)
        {
            delta = 8;
            diff = (-diff);
        }
        else
        {
            delta = 0;
        }
        
        /* Step 2 - Divide and clamp */
        /* Note:
        ** This code *approximately* computes:
        **    delta = diff*4/step;
        **    vpdiff = (delta+0.5)*step/4;
        ** but in shift step bits are dropped. The net result of this is
        ** that even if you have fast mul/div hardware you cannot put it to
        ** good use since the fixup would be too expensive.
        */
        vpdiff = (step >> 3);
        
        if ( diff >= step ) {
            delta |= 4;
            diff -= step;
            vpdiff += step;
        }
        step >>= 1;
        if ( diff >= step  ) {
            delta |= 2;
            diff -= step;
            vpdiff += step;
        }
        step >>= 1;
        if ( diff >= step ) {
            delta |= 1;
            vpdiff += step;
        }

        /* Phil Frisbie combined steps 3 and 4 */
        /* Step 3 - Update previous value */
        /* Step 4 - Clamp previous value to 16 bits */
        if ( (delta&8) != 0 )
        {
            valpred -= vpdiff;
            if ( valpred < -32768 )
                valpred = -32768;
        }
        else
        {
            valpred += vpdiff;
            if ( valpred > 32767 )
                valpred = 32767;
        }

        /* Step 5 - Assemble value, update index and step values */
        index += indexTable[delta];
        if ( index < 0 ) index = 0;
        else if ( index > 88 ) index = 88;
        step = stepsizeTable[index];
        
        /* Step 6 - Output value */
        outputbuffer = (delta << 4);

        /* Step 1 - compute difference with previous value */
        val = *indata++;
        diff = val - valpred;
        if(diff < 0)
        {
            delta = 8;
            diff = (-diff);
        }
        else
        {
            delta = 0;
        }
        
        /* Step 2 - Divide and clamp */
        /* Note:
        ** This code *approximately* computes:
        **    delta = diff*4/step;
        **    vpdiff = (delta+0.5)*step/4;
        ** but in shift step bits are dropped. The net result of this is
        ** that even if you have fast mul/div hardware you cannot put it to
        ** good use since the fixup would be too expensive.
        */
        vpdiff = (step >> 3);
        
        if ( diff >= step ) {
            delta |= 4;
            diff -= step;
            vpdiff += step;
        }
        step >>= 1;
        if ( diff >= step  ) {
            delta |= 2;
            diff -= step;
            vpdiff += step;
        }
        step >>= 1;
        if ( diff >= step ) {
            delta |= 1;
            vpdiff += step;
        }

        /* Phil Frisbie combined steps 3 and 4 */
        /* Step 3 - Update previous value */
        /* Step 4 - Clamp previous value to 16 bits */
        if ( (delta&8) != 0 )
        {
            valpred -= vpdiff;
            if ( valpred < -32768 )
                valpred = -32768;
        }
        else
        {
            valpred += vpdiff;
            if ( valpred > 32767 )
                valpred = 32767;
        }

        /* Step 5 - Assemble value, update index and step values */
        index += indexTable[delta];
        if ( index < 0 ) index = 0;
        else if ( index > 88 ) index = 88;
        step = stepsizeTable[index];
        
        /* Step 6 - Output value */
        *outdata++ = (unsigned char)(delta | outputbuffer);
        count++;
        len -= 2;
    }
    
    state->valprev = (short)valpred;
    state->index = (char)index;
    
    return count;
}

int adpcm_decoder(unsigned char *indata, short *outdata, int len, struct adpcm_state *state)
{
    unsigned int delta;	/* Current adpcm output value */
    int step;	        /* Stepsize */
    int valpred;		/* Predicted value */
    int vpdiff;         /* Current change to valpred */
    int index;			/* Current step change index */
    unsigned int inputbuffer = 0;/* place to keep next 4-bit value */
    int count = 0;
    
    valpred = state->valprev;
    index = (int)state->index;
    step = stepsizeTable[index];
    
    /* Loop unrolling by Phil Frisbie */
    /* This assumes there are ALWAYS an even number of samples */
    while ( len-- > 0 ) {
        
        /* Step 1 - get the delta value */
        inputbuffer = (unsigned int)*indata++;
        delta = (inputbuffer >> 4);
        
        /* Step 2 - Find new index value (for later) */
        index += indexTable[delta];
        if ( index < 0 ) index = 0;
        else if ( index > 88 ) index = 88;
        
        
        /* Phil Frisbie combined steps 3, 4, and 5 */
        /* Step 3 - Separate sign and magnitude */
        /* Step 4 - Compute difference and new predicted value */
        /* Step 5 - clamp output value */
        /*
        ** Computes 'vpdiff = (delta+0.5)*step/4', but see comment
        ** in adpcm_coder.
        */
        vpdiff = step >> 3;
        if ( (delta & 4) != 0 ) vpdiff += step;
        if ( (delta & 2) != 0 ) vpdiff += step>>1;
        if ( (delta & 1) != 0 ) vpdiff += step>>2;
        
        if ( (delta & 8) != 0 )
        {
            valpred -= vpdiff;
            if ( valpred < -32768 )
                valpred = -32768;
        }
        else
        {
            valpred += vpdiff;
            if ( valpred > 32767 )
                valpred = 32767;
        }
        
        /* Step 6 - Update step value */
        step = stepsizeTable[index];
        
        /* Step 7 - Output value */
        *outdata++ = (short)valpred;

        /* Step 1 - get the delta value */
        delta = inputbuffer & 0xf;
        
        /* Step 2 - Find new index value (for later) */
        index += indexTable[delta];
        if ( index < 0 ) index = 0;
        else if ( index > 88 ) index = 88;
        
        
        /* Phil Frisbie combined steps 3, 4, and 5 */
        /* Step 3 - Separate sign and magnitude */
        /* Step 4 - Compute difference and new predicted value */
        /* Step 5 - clamp output value */
        /*
        ** Computes 'vpdiff = (delta+0.5)*step/4', but see comment
        ** in adpcm_coder.
        */
        vpdiff = step >> 3;
        if ( (delta & 4) != 0 ) vpdiff += step;
        if ( (delta & 2) != 0 ) vpdiff += step>>1;
        if ( (delta & 1) != 0 ) vpdiff += step>>2;
        
        if ( (delta & 8) != 0 )
        {
            valpred -= vpdiff;
            if ( valpred < -32768 )
                valpred = -32768;
        }
        else
        {
            valpred += vpdiff;
            if ( valpred > 32767 )
                valpred = 32767;
        }
        
        /* Step 6 - Update step value */
        step = stepsizeTable[index];
        
        /* Step 7 - Output value */
        *outdata++ = (short)valpred;
        count += 2;
    }
    
    state->valprev = (short)valpred;
    state->index = (char)index;
    
    return count;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷精品久久二区二区蜜臀av | 91精品国产黑色紧身裤美女| 日本视频一区二区三区| 国产三级欧美三级| 欧美乱妇15p| 91麻豆精品一区二区三区| 九一久久久久久| 亚洲一区在线免费观看| 欧美无乱码久久久免费午夜一区| 亚洲欧美色一区| 精品一区中文字幕| 欧美一区二区三区在线| 男人操女人的视频在线观看欧美| 欧美视频日韩视频在线观看| 亚洲一区二区三区中文字幕在线| 色综合天天视频在线观看 | 一区二区三区四区在线播放 | 久久精品72免费观看| 欧美色综合久久| 亚洲成av人片| 欧美一区二区在线视频| 国产在线播放一区三区四| 欧美videos大乳护士334| 国内精品伊人久久久久av影院| 2024国产精品视频| 国产精品一区二区久久不卡| 国产视频911| 成人小视频免费观看| 日韩理论片中文av| 911精品国产一区二区在线| 亚洲高清视频在线| 成人黄色av网站在线| 欧美成人精精品一区二区频| 极品销魂美女一区二区三区| 亚洲乱码国产乱码精品精小说 | 亚洲国产精品ⅴa在线观看| 欧美一区二区三区免费视频| 欧美日韩国产系列| 欧美日韩一二区| 91啪亚洲精品| 91丨九色丨尤物| 99国产精品视频免费观看| 精品日韩一区二区三区| 另类小说图片综合网| 亚洲欧洲精品一区二区三区不卡| 欧美乱妇15p| caoporen国产精品视频| 一区二区三区波多野结衣在线观看| 91麻豆成人久久精品二区三区| 日本不卡视频在线观看| 国产拍揄自揄精品视频麻豆 | 日韩一区二区三区观看| 伊人色综合久久天天人手人婷| 亚洲欧洲另类国产综合| 精品在线播放免费| 狂野欧美性猛交blacked| 久久激情五月激情| 顶级嫩模精品视频在线看| 成人a级免费电影| 日本高清成人免费播放| 欧美人与z0zoxxxx视频| 日韩久久免费av| 国产精品色在线观看| 一区二区在线观看免费视频播放| 亚洲与欧洲av电影| 久久激五月天综合精品| 成人永久aaa| 欧美色图片你懂的| 久久亚洲精华国产精华液| 自拍偷拍国产亚洲| 丝袜亚洲另类欧美综合| 国产盗摄一区二区三区| 91色乱码一区二区三区| 欧美一区午夜精品| 中文字幕不卡在线观看| 午夜伊人狠狠久久| 国产一区二区精品久久91| 99riav一区二区三区| 91麻豆精品国产91久久久久| 国产日产欧美精品一区二区三区| 亚洲另类色综合网站| 免费人成在线不卡| 99视频一区二区| 日韩一二三区视频| 亚洲女人小视频在线观看| 日本美女一区二区| 91在线你懂得| 26uuu国产一区二区三区| 亚洲精品视频观看| 国产精品69毛片高清亚洲| 欧美在线free| 国产亚洲精品中文字幕| 日日夜夜一区二区| 95精品视频在线| 精品对白一区国产伦| 亚洲最大的成人av| 高清不卡一区二区| 欧美mv日韩mv国产网站| 亚洲国产成人porn| 99久久综合国产精品| 亚洲精品一区二区三区福利 | 亚洲国产乱码最新视频| 国内精品伊人久久久久av影院| 欧美在线免费观看亚洲| 国产欧美日韩卡一| 国内精品视频666| 91麻豆精品国产91久久久使用方法| 中文字幕一区在线| 国内欧美视频一区二区| 欧美一级理论片| 男人的天堂久久精品| 5566中文字幕一区二区电影| 亚洲乱码中文字幕综合| 91丨九色丨国产丨porny| 中文字幕在线观看不卡视频| 国产主播一区二区| 久久婷婷成人综合色| 狂野欧美性猛交blacked| 日韩欧美国产不卡| 极品美女销魂一区二区三区| 久久综合给合久久狠狠狠97色69| 一区二区三区av电影| 国产 欧美在线| 欧美久久久久久久久中文字幕| 综合欧美亚洲日本| 日本精品裸体写真集在线观看 | 蜜臀av一区二区| bt7086福利一区国产| 欧美欧美欧美欧美首页| 亚洲一线二线三线久久久| 一本色道久久综合狠狠躁的推荐| 中文一区二区完整视频在线观看| 国产精品亚洲第一| 国产欧美精品区一区二区三区| 一本一道久久a久久精品| 亚洲猫色日本管| 色综合久久99| 色系网站成人免费| 五月综合激情日本mⅴ| 欧美精品一区二区三区在线| jvid福利写真一区二区三区| 日韩电影在线观看网站| 欧美精品久久99| 久久99在线观看| 亚洲v中文字幕| 欧美极品美女视频| 精品国产一二三区| 欧美唯美清纯偷拍| 中文字幕av一区二区三区高 | 不卡的电视剧免费网站有什么| 国产精品少妇自拍| 色综合久久精品| 首页亚洲欧美制服丝腿| 欧美一区二区在线播放| 激情成人综合网| 国产精品白丝在线| 在线免费观看日本一区| 午夜精品在线视频一区| 日韩精品一区二区三区在线观看| 国产成人在线色| 亚洲日本成人在线观看| 在线不卡一区二区| 国产精品一区免费在线观看| 亚洲人妖av一区二区| 欧美日韩dvd在线观看| 精品一二三四区| 1区2区3区国产精品| 在线成人免费观看| 粉嫩av亚洲一区二区图片| 亚洲精品成人悠悠色影视| 日韩一级免费观看| av高清不卡在线| 美日韩一区二区三区| 中文字幕一区二区三区在线播放| 欧美视频在线一区| 国产精品亚洲一区二区三区在线 | 精品国产伦一区二区三区免费| 国产精品一区在线| 一区二区三区欧美亚洲| 欧美一区二区三区视频免费| 高潮精品一区videoshd| 亚洲va欧美va人人爽午夜| 国产日本欧美一区二区| 777午夜精品视频在线播放| 国产99久久精品| 日本一区中文字幕 | 美女一区二区久久| 亚洲欧美日韩在线| 亚洲在线免费播放| 久久久青草青青国产亚洲免观| 欧美私人免费视频| 成人午夜av在线| 欧美aaaaaa午夜精品| 亚洲欧美日韩系列| 国产亚洲短视频| 欧美不卡123| 在线播放91灌醉迷j高跟美女| 99久久综合色| 国产suv精品一区二区883| 免费在线观看一区二区三区|