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

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

?? adpcm.cpp

?? 該源碼是對 *.wav語音波形文件做去直流電平
?? CPP
字號:
/***********************************************************
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.

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

/*
** 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"
#include <stdio.h> /*DBG*/

#ifndef __STDC__
#define signed
#endif

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

static short 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
};
    
  
   
void
adpcm_coder(short *indata, signed char *outdata,  int len,   struct adpcm_state state)
    //  short indata[];
    //  char outdata[];
    //  int len;
    //  adpcm_state *state;
   
{  


    short *inp;			/* Input buffer pointer */
    signed char *outp;		/* output buffer pointer */
    int val;			/* Current input sample value */
    int sign;			/* Current adpcm sign bit */
    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 */
    int outputbuffer;		/* place to keep previous 4-bit value */
    int bufferstep;		/* toggle between outputbuffer/output */

    outp = (signed char *)outdata;
    inp = indata;

    valpred = state.valprev;
    index = state.index;
    step = stepsizeTable[index];
    
    bufferstep = 1;

    for ( ; len > 0 ; len-- ) {
	val = *inp++;

	/* Step 1 - compute difference with previous value */
	 diff = val - valpred;
	sign = (diff < 0) ? 8 : 0;
	if ( sign ) diff = (-diff);

	/* 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.
	*/
	delta = 0;
	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;
		
	}

	/* Step 3 - Update previous value */
	if ( sign )
	  valpred -= vpdiff;
	else
	  valpred += vpdiff;

	/* Step 4 - Clamp previous value to 16 bits */
	if ( valpred > 32767 )
	  valpred = 32767;
	else if ( valpred < -32768 )
	  valpred = -32768;

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

	/* Step 6 - Output value */
	if ( bufferstep ) {
	    outputbuffer = (delta << 4) & 0xf0;
	} else {
	    *outp++ = (delta & 0x0f) | outputbuffer;
	}
	bufferstep = !bufferstep;
    }

    /* Output last step, if needed */
    if ( !bufferstep )
      *outp++ = outputbuffer;
    
    state.valprev = valpred;
    state.index = index;
}

void
adpcm_decoder(char *indata, short *outdata, int len, struct adpcm_state state)
   // char indata[];
   // short outdata[];
   // int len;
   // adpcm_state *state;
{



    signed char *inp;		/* Input buffer pointer */
    short *outp;		/* output buffer pointer */
    int sign;			/* Current adpcm sign bit */
    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 */
    int inputbuffer;		/* place to keep next 4-bit value */
    int bufferstep;		/* toggle between inputbuffer/input */

    outp = outdata;
    inp = (signed char *)indata;

    valpred = state.valprev;
    index = state.index;
    step = stepsizeTable[index];

    bufferstep = 0;
    
    for ( ; len > 0 ; len-- ) {
	
	/* Step 1 - get the delta value */
	if ( bufferstep ) {
	    delta = inputbuffer & 0xf;
	} else {
	    inputbuffer = *inp++;
	    delta = (inputbuffer >> 4) & 0xf;
	}
	bufferstep = !bufferstep;

	/* Step 2 - Find new index value (for later) */
	index += indexTable[delta];
	if ( index < 0 ) index = 0;
	if ( index > 88 ) index = 88;

	/* Step 3 - Separate sign and magnitude */
	sign = delta & 8;
	delta = delta & 7;

	/* Step 4 - Compute difference and new predicted value */
	/*
	** Computes 'vpdiff = (delta+0.5)*step/4', but see comment
	** in adpcm_coder.
	*/
	vpdiff = step >> 3;
	if ( delta & 4 ) vpdiff += step;
         	
	if ( delta & 2 ) vpdiff += step>>1;
	        
	if ( delta & 1 ) vpdiff += step>>2;
	        

	if ( sign )
	  valpred -= vpdiff;
	else
	  valpred += vpdiff;

	/* Step 5 - clamp output value */
	if ( valpred > 32767 )
	  valpred = 32767;
	else if ( valpred < -32768 )
	  valpred = -32768;

	/* Step 6 - Update step value */
	step = stepsizeTable[index];

	/* Step 7 - Output value */
	*outp++ = valpred;
    }

    state.valprev = valpred;
    state.index = index;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区在线免费观看| 欧美一区二区在线视频| 国产日韩欧美高清在线| 国产精品99久久久| 国产精品蜜臀在线观看| 色综合激情五月| 日日夜夜免费精品| 日韩一区二区三区视频在线观看| 麻豆成人久久精品二区三区红| 精品日韩在线观看| 99热精品国产| 日韩激情一区二区| 久久精品一区蜜桃臀影院| 99国产精品久久久久久久久久 | 国产亚洲一二三区| 91性感美女视频| 日韩国产成人精品| 国产欧美久久久精品影院| 日本高清不卡视频| 美国毛片一区二区| 亚洲欧洲www| 91精品国产乱| 99久久99久久精品免费观看| 亚洲成人激情av| 久久精品欧美一区二区三区不卡| 色综合色综合色综合色综合色综合| 日韩高清不卡一区| 国产精品私人影院| 日韩一区二区麻豆国产| 成人黄色软件下载| 蜜桃av噜噜一区| 亚洲精品视频在线观看网站| 精品免费国产二区三区| 99久精品国产| 国产一区二区福利视频| 一区二区三区高清在线| 久久夜色精品国产噜噜av| 在线观看国产91| 国产福利电影一区二区三区| 性欧美疯狂xxxxbbbb| 国产欧美日本一区视频| 日韩一区二区在线看片| 日本道色综合久久| 国产不卡在线视频| 毛片不卡一区二区| 亚洲一区二区三区四区在线观看 | 久久久国产精华| 欧美日本国产一区| 99久久精品99国产精品| 精品一区二区三区香蕉蜜桃 | 7777精品伊人久久久大香线蕉经典版下载| 国产精品正在播放| 日韩成人免费看| 亚洲一二三专区| 中文字幕在线观看不卡视频| 欧美大尺度电影在线| 欧美理论电影在线| 欧美图片一区二区三区| 一本一道综合狠狠老| 成人美女视频在线观看18| 国产在线播放一区| 国产在线一区二区| 美国欧美日韩国产在线播放 | 精品亚洲成a人| 亚洲6080在线| 亚洲成人动漫在线免费观看| 亚洲综合一区在线| 亚洲综合精品久久| 亚洲精品日日夜夜| 一个色妞综合视频在线观看| 最好看的中文字幕久久| 亚洲视频一二区| ...xxx性欧美| 亚洲精品中文在线观看| 亚洲日本在线天堂| 亚洲裸体在线观看| 亚洲一区二区不卡免费| 亚洲午夜国产一区99re久久| 亚洲五码中文字幕| 日本亚洲欧美天堂免费| 六月丁香婷婷久久| 国产真实乱子伦精品视频| 国产精品资源在线观看| 国产成人亚洲综合色影视| 国产麻豆视频一区| 成人avav在线| 日本精品一区二区三区高清 | 亚洲视频在线观看三级| 亚洲三级视频在线观看| 一区二区三区精品| 五月天激情综合| 日本va欧美va精品| 国产一区二区免费在线| 暴力调教一区二区三区| 欧洲国内综合视频| 欧美一区二区在线免费观看| 久久人人超碰精品| 国产精品高潮呻吟久久| 亚洲一区二区三区四区在线 | 亚洲国产欧美一区二区三区丁香婷| 亚洲综合区在线| 久久电影国产免费久久电影| 国产91综合网| 欧美日韩中文字幕一区| 精品久久一二三区| 中文字幕中文在线不卡住| 一区二区三区日韩| 蜜桃传媒麻豆第一区在线观看| 国产精品1区2区| 欧美影视一区在线| 久久综合网色—综合色88| 亚洲欧美综合色| 日日夜夜精品视频天天综合网| 国产精品亚洲专一区二区三区| 91在线精品秘密一区二区| 在线播放中文字幕一区| 国产欧美日本一区视频| 亚洲成av人片一区二区| 国产成人免费视| 欧美三级午夜理伦三级中视频| 精品少妇一区二区三区在线播放 | 樱桃国产成人精品视频| 舔着乳尖日韩一区| 成人爽a毛片一区二区免费| 欧美人与禽zozo性伦| 中文字幕电影一区| 视频在线观看一区| 91丨九色porny丨蝌蚪| 精品国产一二三区| 五月婷婷激情综合网| 91一区二区在线观看| 精品久久久久久久久久久久久久久 | 欧美成人aa大片| 亚洲国产精品视频| 成人开心网精品视频| 日韩欧美一级二级三级| 亚洲九九爱视频| 国产精品自拍网站| 日韩免费视频一区| 一区二区三区四区乱视频| 国产成人免费视频网站 | 亚洲成人综合视频| av中文字幕在线不卡| 精品电影一区二区三区| 日韩精品一卡二卡三卡四卡无卡| 91亚洲资源网| 国产精品国产精品国产专区不蜜| 国产真实精品久久二三区| 日韩亚洲电影在线| 日本亚洲天堂网| 欧美精品乱码久久久久久| 亚洲一区中文在线| 在线看国产一区二区| 亚洲视频一二三区| 91免费小视频| 亚洲男同1069视频| 91年精品国产| 亚洲另类在线制服丝袜| 99riav久久精品riav| 18欧美乱大交hd1984| 99国产欧美另类久久久精品| 国产精品久久三| 成人a区在线观看| 日本一区二区三区免费乱视频 | 日韩高清欧美激情| 欧美精品在线一区二区三区| 一区二区三区中文在线观看| 色婷婷综合久久久中文一区二区| 亚洲欧美怡红院| 91尤物视频在线观看| 一区二区三区中文在线| 欧美性猛交xxxx黑人交| 一区二区免费在线| 欧美日韩国产在线播放网站| 丝袜美腿亚洲综合| 日韩欧美在线1卡| 黄网站免费久久| 国产精品美女久久久久久久久久久| k8久久久一区二区三区| 亚洲免费三区一区二区| 欧美三级日韩在线| 蜜臀99久久精品久久久久久软件| 欧美成人video| 成人av资源在线| 一二三区精品福利视频| 欧美精品在线观看播放| 蜜桃视频免费观看一区| 久久久.com| 色综合天天视频在线观看| 亚洲第一成人在线| 精品国产91洋老外米糕| 高清在线成人网| 亚洲综合一区二区| 日韩一区二区三区免费看 | 欧美日本一区二区| 国产在线精品一区二区不卡了| 久久久久久一二三区| av成人动漫在线观看| 亚洲第一av色| 欧美国产国产综合|