📄 window.c
字号:
/******************************************************************** * * * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * * by the XIPHOPHORUS Company http://www.xiph.org/ * * * ******************************************************************** function: window functions last mod: $Id: window.c,v 1.17 2002/03/23 03:17:34 xiphmont Exp $ ********************************************************************/#include <stdlib.h>#include <math.h>#include "os.h"#include "misc.h"#include "lookup.h"#ifdef FIXP_SPEED#define SCALE 12#define MULT(a,b) (((a)>>SCALE) * (b))#else#define SCALE 14#define MULT(a,b) MUL(SCALE,a,b)#endifFIXP *_vorbis_window(int type, int left){ FIXP *ret=_ogg_calloc(left,sizeof(*ret)); int i; switch(type){ case 0: /* The 'vorbis window' (window 0) is sin(sin(x)*sin(x)*2pi) */ { for(i=0;i<left;i++){#if 1 && defined(FIXED_POINT) long x=(2*i+1)*(65536/4)/left; x=vorbis_sinlook_i(x); x*=x; /* .14 * .14 -> .28 */ x>>=(28-15); /* back to PI/2 */ x=vorbis_sinlook_i(x); ret[i]=x>>(14-SCALE);#else float x=(i+.5f)/left*M_PI/2.; x=sin(x); x*=x; x*=M_PI/2.f; x=sin(x); ret[i]=TO_FIXP_CHK(SCALE,x);#endif } } break; default: _ogg_free(ret); return(NULL); } return(ret);}void _vorbis_apply_window(FIXP *d,FIXP *window[2],long *blocksizes, int lW,int W,int nW){ lW=(W?lW:0); nW=(W?nW:0); { long n=blocksizes[W]; long ln=blocksizes[lW]; long rn=blocksizes[nW]; long leftbegin=n/4-ln/4; long leftend=leftbegin+ln/2; long rightbegin=n/2+n/4-rn/4; long rightend=rightbegin+rn/2; int i,p; for(i=0;i<leftbegin;i++) d[i]=0; for(p=0;i<leftend;i++,p++) d[i]=MULT(d[i],window[lW][p]); for(i=rightbegin,p=rn/2-1;i<rightend;i++,p--) d[i]=MULT(d[i],window[nW][p]); for(;i<n;i++) d[i]=0; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -