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

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

?? preprocess.c

?? 語音濾波源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* Copyright (C) 2003 Epic Games    Written by Jean-Marc Valin   File: preprocess.c   Preprocessor with denoising based on the algorithm by Ephraim and Malah   Redistribution and use in source and binary forms, with or without   modification, are permitted provided that the following conditions are   met:   1. Redistributions of source code must retain the above copyright notice,   this list of conditions and the following disclaimer.   2. Redistributions in binary form must reproduce the above copyright   notice, this list of conditions and the following disclaimer in the   documentation and/or other materials provided with the distribution.   3. The name of the author may not be used to endorse or promote products   derived from this software without specific prior written permission.   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR   IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE   DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE   POSSIBILITY OF SUCH DAMAGE.*/#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <math.h>#include "speex_preprocess.h"#include "misc.h"#include "smallft.h"#define max(a,b) ((a) > (b) ? (a) : (b))#define min(a,b) ((a) < (b) ? (a) : (b))#ifndef M_PI#define M_PI 3.14159263#endif#define SQRT_M_PI_2 0.88623#define LOUDNESS_EXP 2.5#define NB_BANDS 8#define SPEEX_PROB_START_DEFAULT    0.35f#define SPEEX_PROB_CONTINUE_DEFAULT 0.20f#define ZMIN .1#define ZMAX .316#define ZMIN_1 10#define LOG_MIN_MAX_1 0.86859static void conj_window(float *w, int len){   int i;   for (i=0;i<len;i++)   {      float x=4*((float)i)/len;      int inv=0;      if (x<1)      {      } else if (x<2)      {         x=2-x;         inv=1;      } else if (x<3)      {         x=x-2;         inv=1;      } else {         x=4-x;      }      x*=1.9979;      w[i]=(.5-.5*cos(x))*(.5-.5*cos(x));      if (inv)         w[i]=1-w[i];      w[i]=sqrt(w[i]);   }}/* This function approximates the gain function    y = gamma(1.25)^2 * M(-.25;1;-x) / sqrt(x)     which multiplied by xi/(1+xi) is the optimal gain   in the loudness domain ( sqrt[amplitude] )*/static inline float hypergeom_gain(float x){   int ind;   float integer, frac;   static const float table[21] = {      0.82157f, 1.02017f, 1.20461f, 1.37534f, 1.53363f, 1.68092f, 1.81865f,      1.94811f, 2.07038f, 2.18638f, 2.29688f, 2.40255f, 2.50391f, 2.60144f,      2.69551f, 2.78647f, 2.87458f, 2.96015f, 3.04333f, 3.12431f, 3.20326f};         if (x>9.5)      return 1+.1296/x;      integer = floor(2*x);   frac = 2*x-integer;   ind = (int)integer;      return ((1-frac)*table[ind] + frac*table[ind+1])/sqrt(x+.0001f);}static inline float qcurve(float x){   return 1.f/(1.f+.1f/(x*x));}SpeexPreprocessState *speex_preprocess_state_init(int frame_size, int sampling_rate){   int i;   int N, N3, N4;   SpeexPreprocessState *st = (SpeexPreprocessState *)speex_alloc(sizeof(SpeexPreprocessState));   st->frame_size = frame_size;   /* Round ps_size down to the nearest power of two */#if 0   i=1;   st->ps_size = st->frame_size;   while(1)   {      if (st->ps_size & ~i)      {         st->ps_size &= ~i;         i<<=1;      } else {         break;      }   }         if (st->ps_size < 3*st->frame_size/4)      st->ps_size = st->ps_size * 3 / 2;#else   st->ps_size = st->frame_size;#endif   N = st->ps_size;   N3 = 2*N - st->frame_size;   N4 = st->frame_size - N3;      st->sampling_rate = sampling_rate;   st->denoise_enabled = 1;   st->agc_enabled = 0;   st->agc_level = 8000;   st->vad_enabled = 0;   st->dereverb_enabled = 0;   st->reverb_decay = .5;   st->reverb_level = .2;   st->speech_prob_start = SPEEX_PROB_START_DEFAULT;   st->speech_prob_continue = SPEEX_PROB_CONTINUE_DEFAULT;   st->frame = (float*)speex_alloc(2*N*sizeof(float));   st->ps = (float*)speex_alloc(N*sizeof(float));   st->gain2 = (float*)speex_alloc(N*sizeof(float));   st->window = (float*)speex_alloc(2*N*sizeof(float));   st->noise = (float*)speex_alloc(N*sizeof(float));   st->reverb_estimate = (float*)speex_alloc(N*sizeof(float));   st->old_ps = (float*)speex_alloc(N*sizeof(float));   st->gain = (float*)speex_alloc(N*sizeof(float));   st->prior = (float*)speex_alloc(N*sizeof(float));   st->post = (float*)speex_alloc(N*sizeof(float));   st->loudness_weight = (float*)speex_alloc(N*sizeof(float));   st->inbuf = (float*)speex_alloc(N3*sizeof(float));   st->outbuf = (float*)speex_alloc(N3*sizeof(float));   st->echo_noise = (float*)speex_alloc(N*sizeof(float));   st->S = (float*)speex_alloc(N*sizeof(float));   st->Smin = (float*)speex_alloc(N*sizeof(float));   st->Stmp = (float*)speex_alloc(N*sizeof(float));   st->update_prob = (float*)speex_alloc(N*sizeof(float));   st->zeta = (float*)speex_alloc(N*sizeof(float));   st->Zpeak = 0;   st->Zlast = 0;   st->noise_bands = (float*)speex_alloc(NB_BANDS*sizeof(float));   st->noise_bands2 = (float*)speex_alloc(NB_BANDS*sizeof(float));   st->speech_bands = (float*)speex_alloc(NB_BANDS*sizeof(float));   st->speech_bands2 = (float*)speex_alloc(NB_BANDS*sizeof(float));   st->noise_bandsN = st->speech_bandsN = 1;   conj_window(st->window, 2*N3);   for (i=2*N3;i<2*st->ps_size;i++)      st->window[i]=1;      if (N4>0)   {      for (i=N3-1;i>=0;i--)      {         st->window[i+N3+N4]=st->window[i+N3];         st->window[i+N3]=1;      }   }   for (i=0;i<N;i++)   {      st->noise[i]=1e4;      st->reverb_estimate[i]=0.;      st->old_ps[i]=1e4;      st->gain[i]=1;      st->post[i]=1;      st->prior[i]=1;   }   for (i=0;i<N3;i++)   {      st->inbuf[i]=0;      st->outbuf[i]=0;   }   for (i=0;i<N;i++)   {      float ff=((float)i)*.5*sampling_rate/((float)N);      st->loudness_weight[i] = .35f-.35f*ff/16000.f+.73f*exp(-.5f*(ff-3800)*(ff-3800)/9e5f);      if (st->loudness_weight[i]<.01f)         st->loudness_weight[i]=.01f;      st->loudness_weight[i] *= st->loudness_weight[i];   }   st->speech_prob = 0;   st->last_speech = 1000;   st->loudness = pow(6000,LOUDNESS_EXP);   st->loudness2 = 6000;   st->nb_loudness_adapt = 0;   st->fft_lookup = (struct drft_lookup*)speex_alloc(sizeof(struct drft_lookup));   spx_drft_init(st->fft_lookup,2*N);   st->nb_adapt=0;   st->consec_noise=0;   st->nb_preprocess=0;   return st;}void speex_preprocess_state_destroy(SpeexPreprocessState *st){   speex_free(st->frame);   speex_free(st->ps);   speex_free(st->gain2);   speex_free(st->window);   speex_free(st->noise);   speex_free(st->reverb_estimate);   speex_free(st->old_ps);   speex_free(st->gain);   speex_free(st->prior);   speex_free(st->post);   speex_free(st->loudness_weight);   speex_free(st->echo_noise);   speex_free(st->S);   speex_free(st->Smin);   speex_free(st->Stmp);   speex_free(st->update_prob);   speex_free(st->zeta);   speex_free(st->noise_bands);   speex_free(st->noise_bands2);   speex_free(st->speech_bands);   speex_free(st->speech_bands2);   speex_free(st->inbuf);   speex_free(st->outbuf);   spx_drft_clear(st->fft_lookup);   speex_free(st->fft_lookup);   speex_free(st);}static void update_noise(SpeexPreprocessState *st, float *ps, spx_int32_t *echo){   int i;   float beta;   st->nb_adapt++;   beta=1.0f/st->nb_adapt;   if (beta < .05f)      beta=.05f;      if (!echo)   {      for (i=0;i<st->ps_size;i++)         st->noise[i] = (1.f-beta)*st->noise[i] + beta*ps[i];   } else {      for (i=0;i<st->ps_size;i++)         st->noise[i] = (1.f-beta)*st->noise[i] + beta*max(1.f,ps[i]-st->frame_size*st->frame_size*4.0*echo[i]); #if 0      for (i=0;i<st->ps_size;i++)         st->noise[i] = 0;#endif   }}static int speex_compute_vad(SpeexPreprocessState *st, float *ps, float mean_prior, float mean_post){   int i, is_speech=0;   int N = st->ps_size;   float scale=.5f/N;   /* FIXME: Clean this up a bit */   {      float bands[NB_BANDS];      int j;      float p0, p1;      float tot_loudness=0;      float x = sqrt(mean_post);      for (i=5;i<N-10;i++)      {         tot_loudness += scale*st->ps[i] * st->loudness_weight[i];      }      for (i=0;i<NB_BANDS;i++)      {         bands[i]=1e4f;         for (j=i*N/NB_BANDS;j<(i+1)*N/NB_BANDS;j++)         {            bands[i] += ps[j];         }         bands[i]=log(bands[i]);      }            /*p1 = .0005+.6*exp(-.5*(x-.4)*(x-.4)*11)+.1*exp(-1.2*x);      if (x<1.5)         p0=.1*exp(2*(x-1.5));      else         p0=.02+.1*exp(-.2*(x-1.5));      */      p0=1.f/(1.f+exp(3.f*(1.5f-x)));      p1=1.f-p0;      /*fprintf (stderr, "%f %f ", p0, p1);*/      /*p0 *= .99*st->speech_prob + .01*(1-st->speech_prob);      p1 *= .01*st->speech_prob + .99*(1-st->speech_prob);            st->speech_prob = p0/(p1+p0);      */      if (st->noise_bandsN < 50 || st->speech_bandsN < 50)      {         if (mean_post > 5.f)         {            float adapt = 1./st->speech_bandsN++;            if (adapt<.005f)               adapt = .005f;            for (i=0;i<NB_BANDS;i++)            {               st->speech_bands[i] = (1.f-adapt)*st->speech_bands[i] + adapt*bands[i];               /*st->speech_bands2[i] = (1-adapt)*st->speech_bands2[i] + adapt*bands[i]*bands[i];*/               st->speech_bands2[i] = (1.f-adapt)*st->speech_bands2[i] + adapt*(bands[i]-st->speech_bands[i])*(bands[i]-st->speech_bands[i]);            }         } else {            float adapt = 1./st->noise_bandsN++;            if (adapt<.005f)               adapt = .005f;            for (i=0;i<NB_BANDS;i++)            {               st->noise_bands[i] = (1.f-adapt)*st->noise_bands[i] + adapt*bands[i];               /*st->noise_bands2[i] = (1-adapt)*st->noise_bands2[i] + adapt*bands[i]*bands[i];*/               st->noise_bands2[i] = (1.f-adapt)*st->noise_bands2[i] + adapt*(bands[i]-st->noise_bands[i])*(bands[i]-st->noise_bands[i]);            }         }      }      p0=p1=1;      for (i=0;i<NB_BANDS;i++)      {         float noise_var, speech_var;         float noise_mean, speech_mean;         float tmp1, tmp2, pr;         /*noise_var = 1.01*st->noise_bands2[i] - st->noise_bands[i]*st->noise_bands[i];           speech_var = 1.01*st->speech_bands2[i] - st->speech_bands[i]*st->speech_bands[i];*/         noise_var = st->noise_bands2[i];         speech_var = st->speech_bands2[i];         if (noise_var < .1f)            noise_var = .1f;         if (speech_var < .1f)            speech_var = .1f;                  /*speech_var = sqrt(speech_var*noise_var);           noise_var = speech_var;*/         if (speech_var < .05f*speech_var)            noise_var = .05f*speech_var;          if (speech_var < .05f*noise_var)            speech_var = .05f*noise_var;                  if (bands[i] < st->noise_bands[i])            speech_var = noise_var;         if (bands[i] > st->speech_bands[i])            noise_var = speech_var;         speech_mean = st->speech_bands[i];         noise_mean = st->noise_bands[i];         if (noise_mean < speech_mean - 5.f)            noise_mean = speech_mean - 5.f;         tmp1 = exp(-.5f*(bands[i]-speech_mean)*(bands[i]-speech_mean)/speech_var)/sqrt(2.f*M_PI*speech_var);         tmp2 = exp(-.5f*(bands[i]-noise_mean)*(bands[i]-noise_mean)/noise_var)/sqrt(2.f*M_PI*noise_var);         /*fprintf (stderr, "%f ", (float)(p0/(.01+p0+p1)));*/         /*fprintf (stderr, "%f ", (float)(bands[i]));*/         pr = tmp1/(1e-25+tmp1+tmp2);         /*if (bands[i] < st->noise_bands[i])            pr=.01;         if (bands[i] > st->speech_bands[i] && pr < .995)         pr=.995;*/         if (pr>.999f)            pr=.999f;         if (pr<.001f)            pr=.001f;         /*fprintf (stderr, "%f ", pr);*/         p0 *= pr;         p1 *= (1-pr);      }      p0 = pow(p0,.2);      p1 = pow(p1,.2);            #if 1      p0 *= 2.f;      p0=p0/(p1+p0);      if (st->last_speech>20)       {         float tmp = sqrt(tot_loudness)/st->loudness2;         tmp = 1.f-exp(-10.f*tmp);         if (p0>tmp)            p0=tmp;      }      p1=1-p0;#else      if (sqrt(tot_loudness) < .6f*st->loudness2 && p0>15.f*p1)         p0=15.f*p1;      if (sqrt(tot_loudness) < .45f*st->loudness2 && p0>7.f*p1)         p0=7.f*p1;      if (sqrt(tot_loudness) < .3f*st->loudness2 && p0>3.f*p1)         p0=3.f*p1;      if (sqrt(tot_loudness) < .15f*st->loudness2 && p0>p1)         p0=p1;      /*fprintf (stderr, "%f %f ", (float)(sqrt(tot_loudness) /( .25*st->loudness2)), p0/(p1+p0));*/#endif      p0 *= .99f*st->speech_prob + .01f*(1-st->speech_prob);      p1 *= .01f*st->speech_prob + .99f*(1-st->speech_prob);            st->speech_prob = p0/(1e-25f+p1+p0);      /*fprintf (stderr, "%f %f %f ", tot_loudness, st->loudness2, st->speech_prob);*/      if (st->speech_prob > st->speech_prob_start         || (st->last_speech < 20 && st->speech_prob > st->speech_prob_continue))      {         is_speech = 1;         st->last_speech = 0;      } else {         st->last_speech++;         if (st->last_speech<20)           is_speech = 1;      }      if (st->noise_bandsN > 50 && st->speech_bandsN > 50)      {         if (mean_post > 5)         {            float adapt = 1./st->speech_bandsN++;            if (adapt<.005f)               adapt = .005f;            for (i=0;i<NB_BANDS;i++)            {               st->speech_bands[i] = (1-adapt)*st->speech_bands[i] + adapt*bands[i];               /*st->speech_bands2[i] = (1-adapt)*st->speech_bands2[i] + adapt*bands[i]*bands[i];*/               st->speech_bands2[i] = (1-adapt)*st->speech_bands2[i] + adapt*(bands[i]-st->speech_bands[i])*(bands[i]-st->speech_bands[i]);            }         } else {            float adapt = 1./st->noise_bandsN++;            if (adapt<.005f)               adapt = .005f;            for (i=0;i<NB_BANDS;i++)            {               st->noise_bands[i] = (1-adapt)*st->noise_bands[i] + adapt*bands[i];               /*st->noise_bands2[i] = (1-adapt)*st->noise_bands2[i] + adapt*bands[i]*bands[i];*/               st->noise_bands2[i] = (1-adapt)*st->noise_bands2[i] + adapt*(bands[i]-st->noise_bands[i])*(bands[i]-st->noise_bands[i]);            }         }      }   }   return is_speech;}static void speex_compute_agc(SpeexPreprocessState *st, float mean_prior){   int i;   int N = st->ps_size;   float scale=.5f/N;   float agc_gain;   int freq_start, freq_end;   float active_bands = 0;   freq_start = (int)(300.0f*2*N/st->sampling_rate);   freq_end   = (int)(2000.0f*2*N/st->sampling_rate);   for (i=freq_start;i<freq_end;i++)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲永久免费视频| 欧美精品一级二级| 欧美一级精品大片| 视频一区欧美精品| 91麻豆成人久久精品二区三区| 欧美不卡激情三级在线观看| 亚洲精品成人在线| 成人av网站大全| 久久综合九色综合97婷婷| 午夜电影网一区| 欧美在线不卡一区| 亚洲人成精品久久久久| 国产91精品露脸国语对白| 亚洲精品在线电影| 日韩国产成人精品| 欧美日本一区二区| 亚洲一二三四在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 日本一区二区三区久久久久久久久不 | 亚洲另类在线视频| 国产乱淫av一区二区三区| 欧美一级黄色大片| 青青青伊人色综合久久| 欧美日韩色综合| 亚洲福利视频三区| 在线观看精品一区| 一区二区三区日本| 欧美日韩三级在线| 日韩精品每日更新| 亚洲精品成人悠悠色影视| 成人av在线播放网站| 国产亚洲综合性久久久影院| 久久成人久久爱| www精品美女久久久tv| 久久国产麻豆精品| 久久久久久9999| 成人黄色综合网站| 亚洲人成小说网站色在线| 色婷婷av久久久久久久| 亚洲午夜一二三区视频| 欧美日韩精品三区| 久草精品在线观看| 欧美激情综合五月色丁香小说| av成人老司机| 亚洲成人黄色小说| 精品久久久久久亚洲综合网 | 欧美不卡一区二区| 国产成人av一区二区三区在线| 国产精品乱码人人做人人爱| 91在线看国产| 亚瑟在线精品视频| 久久久精品2019中文字幕之3| 成人精品一区二区三区中文字幕 | 国产精品久久精品日日| 色呦呦国产精品| 日韩在线a电影| 久久久九九九九| 在线免费不卡电影| 久久精品久久99精品久久| 欧美极品另类videosde| 欧美三级中文字幕| 久久99日本精品| 国产精品理伦片| 337p亚洲精品色噜噜噜| 国产精品1区二区.| 亚洲777理论| 国产精品欧美一级免费| 欧美日韩一二三区| 国产精品主播直播| 亚洲一卡二卡三卡四卡| 国产色91在线| 欧美一区二区高清| 91色九色蝌蚪| 国产高清亚洲一区| 五月天欧美精品| 国产精品黄色在线观看| 日韩欧美精品在线| 欧美亚一区二区| 成人性生交大片| 久久成人免费日本黄色| 国产99一区视频免费| 午夜在线电影亚洲一区| 国产精品国模大尺度视频| 日韩欧美一二区| 欧美日韩国产综合视频在线观看| 国产成人aaa| 免费高清成人在线| 亚洲国产日产av| 亚洲美女偷拍久久| 国产欧美日本一区二区三区| 91精品国产综合久久婷婷香蕉| 99免费精品视频| 国内精品视频666| 日本美女一区二区| 亚洲成va人在线观看| 一区精品在线播放| 欧美国产一区视频在线观看| 精品美女一区二区| 日韩久久免费av| 欧美一级久久久| 337p亚洲精品色噜噜| 欧美日韩一区二区在线观看视频| 91在线无精精品入口| av成人免费在线观看| 成人av综合在线| yourporn久久国产精品| 成人av在线资源网站| 波多野结衣在线一区| 国v精品久久久网| jlzzjlzz亚洲女人18| 不卡一区二区中文字幕| 国产宾馆实践打屁股91| 国产精品亚洲午夜一区二区三区| 国产一区二区在线影院| 国产一区二区三区在线看麻豆| 激情综合色播激情啊| 极品少妇xxxx偷拍精品少妇| 韩国精品一区二区| 国产一区三区三区| 成人免费看黄yyy456| 99精品欧美一区二区三区综合在线| 成人av网站免费| 91丨porny丨国产| 在线免费观看视频一区| 91精品国产日韩91久久久久久| 欧美成人一区二区三区片免费| 久久综合九色综合欧美就去吻| 国产视频一区二区在线观看| 日韩一区欧美小说| 亚洲成人激情综合网| 日韩主播视频在线| 韩国成人在线视频| 91无套直看片红桃| 欧美人体做爰大胆视频| 亚洲摸摸操操av| 亚洲国产日韩综合久久精品| 蜜桃视频第一区免费观看| 国产精品 欧美精品| 色婷婷av一区二区三区gif| 欧美一级高清片在线观看| 日本一区二区三级电影在线观看| 亚洲柠檬福利资源导航| 六月丁香婷婷久久| 99久久精品费精品国产一区二区| 欧美欧美午夜aⅴ在线观看| 欧美精品一区男女天堂| 亚洲手机成人高清视频| 国产成人精品免费网站| 国产精品成人网| 亚洲一区二区精品视频| 狠狠色丁香九九婷婷综合五月| 成人性色生活片| 日韩欧美国产一区二区在线播放 | 中文字幕中文字幕一区二区| 亚洲妇女屁股眼交7| 亚洲美女一区二区三区| 91麻豆精品国产91久久久| 亚洲国产高清aⅴ视频| 亚洲不卡av一区二区三区| 国产风韵犹存在线视精品| 欧日韩精品视频| 亚洲国产精品成人综合色在线婷婷| 亚洲高清一区二区三区| 国产成人8x视频一区二区| 欧美一级理论片| 亚洲综合久久久久| 成人一区二区三区在线观看| 日韩精品一区二区三区视频在线观看| 亚洲婷婷在线视频| 国产精品系列在线播放| 91精品国产综合久久精品图片| 老司机一区二区| 欧美图区在线视频| 亚洲日本免费电影| 成人午夜免费视频| 精品久久久久av影院| 日韩1区2区3区| 91丝袜呻吟高潮美腿白嫩在线观看| 日韩欧美成人一区二区| 肉色丝袜一区二区| 欧洲精品一区二区| 一区在线观看视频| av网站一区二区三区| 欧美经典一区二区三区| 精品中文字幕一区二区| 欧美一个色资源| 青青草精品视频| 在线成人免费视频| 日本免费在线视频不卡一不卡二 | 懂色av一区二区在线播放| 精品久久免费看| 国产中文一区二区三区| 日韩欧美在线影院| 老司机精品视频导航| 日韩欧美一二区| 韩国一区二区三区| 久久午夜色播影院免费高清| 国产综合色在线| 日韩欧美一区二区在线视频| 日本亚洲电影天堂|