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

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

?? gain.cpp

?? Amarok是一款在LINUX或其他類UNIX操作系統(tǒng)中運行的音頻播放器軟件。 經(jīng)過兩年開發(fā)后
?? CPP
字號:
/* ***** BEGIN LICENSE BLOCK ***** * * This software is released under the provisions of the GPL version 2. * see file "COPYING".  If that file is not available, the full statement * of the license can be found at * * http://www.fsf.org/licensing/licenses/gpl.txt * * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved. * Copyright (c) 2005 Paul Cifarelli All Rights Reserved. * * * This file is part of the Helix DNA Technology. RealNetworks is the * developer of the Original Code and owns the copyrights in the * portions it created. * * This file, and the files included with this file, is distributed * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET * ENJOYMENT OR NON-INFRINGEMENT. * * Technology Compatibility Kit Test Suite(s) Location: *    http://www.helixcommunity.org/content/tck * * ***** END LICENSE BLOCK ***** */#include <stdlib.h>#include <math.h>#include <string.h>#include <iostream>#include "hxassert.h"#include "gain.h"using namespace std;#define INT8_CEILING  255#define INT16_CEILING 32767#define INT32_CEILING 65535struct GAIN_STATE{   int sampleRate;   int nChannels;   int bytesPerSample;   bool  isMute;   float instGain; /* gain applied right now */   float tgtGain;  /* in a smooth gain change, the gain we are aiming for */   float decay;};GAIN_STATE* gainInit(int sampleRate, int nChannels, int bytesPerSample){    GAIN_STATE* g = (GAIN_STATE*) calloc(1,sizeof(GAIN_STATE)) ;    if (g)    {        g->sampleRate = sampleRate;        g->nChannels = nChannels;        g->bytesPerSample = bytesPerSample;        gainSetTimeConstant(0.1f, g);    }    return g ;}void gainFree(GAIN_STATE* g){    if (g) free(g) ;}float gainSetSmoothdB(float dB, GAIN_STATE* g){    float gain = pow(10.0, 0.05*dB) ;    if (g)    {         g->isMute = false;         g->tgtGain = gain ;    }    return dB ;}float gainSetImmediatedB(float dB, GAIN_STATE* g){    dB = gainSetSmoothdB(dB, g) ;    if (g)       g->instGain = g->tgtGain ; // make it instantaneous    return dB ;}float gainSetSmooth(float percent, GAIN_STATE* g){    float gaintop = pow(10.0, 0.05*GAIN_MAX_dB) ;    float gainbottom = pow(10.0, 0.05*GAIN_MIN_dB) ;    float gain = percent * (gaintop - gainbottom) + gainbottom;    if (g)    {       g->isMute = false;       g->tgtGain = gain ;    }    return gain;}float gainSetImmediate(float percent, GAIN_STATE* g){    float gain = gainSetSmooth(percent, g) ;    if (g)       g->instGain = g->tgtGain ; // make it instantaneous    return gain;}void gainSetMute(GAIN_STATE* g){   if (g)   {      g->isMute = true;      g->instGain = g->tgtGain = 0.0; // mute is immediate   }}int gainSetTimeConstant(float millis, GAIN_STATE* g){   if (!g)      return 0;    // we define the time constant millis so that the signal has decayed to 1/2 (-6dB) after    // millis milliseconds have elapsed.    // Let T[sec] = millis/1000 = time constant in units of seconds    //    // => (1-2^-s)^(T[sec]*sr) = 1/2    // => 1-2^-s = (1/2)^(1/(T[sec]*sr))    // => 2^-s = 1 - (1/2)^(1/(T[sec]*sr))    // => s = -log2(1 - (1/2)^(1 / (T[sec]*sr)))    // first 0.5 is rounding constant   int shift;   shift = (int)(0.5 - 1.0/log(2.0)*log(1.0 - pow(0.5, 1000.0/(millis * g->sampleRate)))) ;   if (shift < 1)      shift = 1 ;   if (shift > 31)      shift = 31 ;   g->decay = ::pow(2.0, (float) shift);   return 1 ; // OK}static void gainFeedMono(unsigned char* signal, unsigned char *outsignal, int len, GAIN_STATE *g){   if (!g)      return;   float tgtGain = g->tgtGain ;   float gain = g->instGain ;   unsigned char *bufferEnd = signal + len;   if (gain == tgtGain)   { // steady state      while (signal < bufferEnd)      {         switch (g->bytesPerSample)         {            case 1:            {               short int res;               char *s = (char *) signal;               char *o = (char *) outsignal;               res = (short int) (*s * gain);               *o = (char) (res > INT8_CEILING ? INT8_CEILING : res);            }            break;            case 2:            {               long res;               short int *s = (short int *) signal;               short int *o = (short int *) outsignal;               res = (long) (*s * gain);               *o = (short int) (res > INT16_CEILING ? INT16_CEILING : res);            }            break;            case 4:            {               long long res;               long *s = (long *) signal;               long *o = (long *) outsignal;               res = (long long) (*s * gain);               *o = (long) (res > INT32_CEILING ? INT32_CEILING : res);            }            break;            default:               return;         }         signal += g->bytesPerSample;         outsignal += g->bytesPerSample;      }   }   else   { // while we are still ramping the gain      while (signal < bufferEnd)      {         switch (g->bytesPerSample)         {            case 1:            {               short int res;               char *s = (char *) signal;               char *o = (char *) outsignal;               res = (short int) (*s * gain);               *o = (char) (res > INT8_CEILING ? INT8_CEILING : res);            }            break;            case 2:            {               long res;               short int *s = (short int *) signal;               short int *o = (short int *) outsignal;               res = (long) (*s * gain);               *o = (short int) (res > INT16_CEILING ? INT16_CEILING : res);            }            break;            case 4:            {               long long res;               long *s = (long *) signal;               long *o = (long *) outsignal;               res = (long long) (*s * gain);               *o = (long) (res > INT32_CEILING ? INT32_CEILING : res);            }            break;            default:               return;         }         signal += g->bytesPerSample;         outsignal += g->bytesPerSample;         gain += ((tgtGain-gain) / g->decay);      }      g->instGain = gain ;   }}static void gainFeedStereo(unsigned char* signal, unsigned char *outsignal, int len, GAIN_STATE *g){   if (!g)      return;   float tgtGain = g->tgtGain ;   float gain = g->instGain ;   unsigned char *bufferEnd = signal + len;   if (gain == tgtGain)   { // steady state      while (signal < bufferEnd)      {         switch (g->bytesPerSample)         {            case 1:            {               short int res;               char *s = (char *) signal;               char *o = (char *) outsignal;               res = (short int) (*s * gain);               *o = (char) (res > INT8_CEILING ? INT8_CEILING : res);               s++;               o++;               res = (short int) (*s * gain);               *o = (char) (res > INT8_CEILING ? INT8_CEILING : res);            }            break;            case 2:            {               long res;               short int *s = (short int *) signal;               short int *o = (short int *) outsignal;               res = (long) (*s * gain);               *o = (short int) (res > INT16_CEILING ? INT16_CEILING : res);               s++;               o++;               res = (long) (*s * gain);               *o = (short int) (res > INT16_CEILING ? INT16_CEILING : res);            }            break;            case 4:            {               long long res;               long *s = (long *) signal;               long *o = (long *) outsignal;               res = (long long) (*s * gain);               *o = (long) (res > INT32_CEILING ? INT32_CEILING : res);               s++;               o++;               res = (long long) (*s * gain);               *o = (long) (res > INT32_CEILING ? INT32_CEILING : res);            }            break;            default:               return;         }         signal += 2 * g->bytesPerSample;         outsignal += 2 * g->bytesPerSample;      }   }   else   { // while we are still ramping the gain      while (signal < bufferEnd)      {         switch (g->bytesPerSample)         {            case 1:            {               short int res;               char *s = (char *) signal;               char *o = (char *) outsignal;               res = (short int) (*s * gain);               *o = (char) (res > INT8_CEILING ? INT8_CEILING : res);               s++;               o++;               res = (short int) (*s * gain);               *o = (char) (res > INT8_CEILING ? INT8_CEILING : res);            }            break;            case 2:            {               long res;               short int *s = (short int *) signal;               short int *o = (short int *) outsignal;               res = (long) (*s * gain);               *o = (short int) (res > INT16_CEILING ? INT16_CEILING : res);               s++;               o++;               res = (long) (*s * gain);               *o = (short int) (res > INT16_CEILING ? INT16_CEILING : res);            }            break;            case 4:            {               long long res;               long *s = (long *) signal;               long *o = (long *) outsignal;               res = (long long) (*s * gain);               *o = (long) (res > INT32_CEILING ? INT32_CEILING : res);               s++;               o++;               res = (long long) (*s * gain);               *o = (long) (res > INT32_CEILING ? INT32_CEILING : res);            }            break;            default:               return;         }         signal += 2 * g->bytesPerSample;         outsignal += 2 * g->bytesPerSample;         gain += ((tgtGain-gain) / g->decay);      }      g->instGain = gain ;   }}static void gainFeedMulti(unsigned char* signal, unsigned char *outsignal, int len, GAIN_STATE *g){   if (!g)      return;    float tgtGain = g->tgtGain ;    float gain = g->instGain ;    unsigned char *bufferEnd = signal + len;    if (gain == tgtGain)    { // steady state       while (signal < bufferEnd)       {          switch (g->bytesPerSample)          {             case 1:             {                short int res;                int i ;                char *s = (char *) signal;                char *o = (char *) outsignal;                for (i = 0 ; i < g->nChannels ; i++)                {                   res = (short int) (*s * gain);                   *o = (char) (res > INT8_CEILING ? INT8_CEILING : res);                   s++;                   o++;                }             }             break;             case 2:             {                long res;                int i ;                short int *s = (short int *) signal;                short int *o = (short int *) outsignal;                for (i = 0 ; i < g->nChannels ; i++)                {                   res = (long) (*s * gain);                   *o = (short int) (res > INT16_CEILING ? INT16_CEILING : res);                   s++;                   o++;                }             }             break;             case 4:             {                long long res;                int i ;                long *s = (long *) signal;                long *o = (long *) outsignal;                for (i = 0 ; i < g->nChannels ; i++)                {                   res = (long long) (*s * gain);                   *o = (long) (res > INT32_CEILING ? INT32_CEILING : res);                   s++;                   o++;                }             }             break;             default:                return;          }          signal += g->nChannels * g->bytesPerSample;          outsignal += g->nChannels * g->bytesPerSample;       }    }    else    { // while we are still ramping the gain       while (signal < bufferEnd)       {          int i ;          switch (g->bytesPerSample)          {             case 1:             {                short int res;                char *s = (char *) signal;                char *o = (char *) outsignal;                for (i = 0 ; i < g->nChannels ; i++)                {                   res = (short int) (*s * gain);                   *o = (char) (res > INT8_CEILING ? INT8_CEILING : res);                   s++;                   o++;                }             }             break;             case 2:             {                long res;                short int *s = (short int *) signal;                short int *o = (short int *) outsignal;                for (i = 0 ; i < g->nChannels ; i++)                {                   res = (long) (*s * gain);                   *o = (short int) (res > INT16_CEILING ? INT16_CEILING : res);                   s++;                   o++;                }             }             case 4:             {                long long res;                long *s = (long *) signal;                long *o = (long *) outsignal;                for (i = 0 ; i < g->nChannels ; i++)                {                   res = (long long) (*s * gain);                   *o = (long) (res > INT32_CEILING ? INT32_CEILING : res);                   s++;                   o++;                }             }             break;          }          signal += g->nChannels * g->bytesPerSample;          outsignal += g->nChannels * g->bytesPerSample;          gain += ((tgtGain-gain) / g->decay);       }       g->instGain = gain ;    }}void gainFeed(unsigned char* signal, unsigned char *outsignal, int len, GAIN_STATE* g){   if (!g)      return;    /* if the gain is 0dB, and we are not currently ramping, shortcut. */    if (g->instGain == 1.0 && g->instGain == g->tgtGain)    {       if (signal != outsignal)          memcpy(outsignal, signal, len);        return ;    }    switch (g->nChannels)    {    case 1:        gainFeedMono(signal, outsignal, len, g) ;        break ;    case 2:        gainFeedStereo(signal, outsignal, len, g) ;        break ;    default:        gainFeedMulti(signal, outsignal, len, g) ;        break ;    }}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91蜜桃传媒精品久久久一区二区| 亚洲va欧美va国产va天堂影院| 精品一区二区三区在线播放| 欧美一个色资源| 美美哒免费高清在线观看视频一区二区| 欧美视频一区二区三区在线观看| 亚洲国产wwwccc36天堂| 欧美精品粉嫩高潮一区二区| 麻豆一区二区三| 精品国产乱码久久久久久浪潮| 国产成人啪免费观看软件| 中文字幕不卡在线播放| 在线这里只有精品| 日韩精品1区2区3区| 久久久蜜桃精品| 99久久精品国产毛片| 亚洲国产精品一区二区久久恐怖片| 9191久久久久久久久久久| 国产一区二区导航在线播放| 亚洲欧洲日韩av| 欧美日韩成人一区二区| 国产精品综合一区二区| 亚洲毛片av在线| 日韩无一区二区| 99精品国产91久久久久久| 天天综合网 天天综合色| 久久久久国产成人精品亚洲午夜 | 精品久久久久久久久久久久包黑料 | 一区二区三区国产| 日韩欧美亚洲一区二区| www.性欧美| 日韩国产精品久久久| 国产精品另类一区| 在线播放中文字幕一区| 波多野结衣中文一区| 亚洲va国产va欧美va观看| 国产欧美日韩亚州综合| 欧美日韩另类一区| 大尺度一区二区| 日韩av电影一区| 中文字幕亚洲电影| 精品1区2区在线观看| 日本道免费精品一区二区三区| 另类小说欧美激情| 亚洲韩国一区二区三区| 国产精品素人一区二区| 日韩精品中文字幕在线一区| 在线看国产一区二区| 国产成人免费视频网站| 图片区小说区区亚洲影院| 日韩美女久久久| 久久精品夜色噜噜亚洲aⅴ| 欧美精品v国产精品v日韩精品| www.欧美.com| 国产高清不卡二三区| 免费高清成人在线| 亚洲国产精品久久不卡毛片| 亚洲色图视频网| 欧美国产日韩a欧美在线观看| 欧美一级视频精品观看| 欧美剧情片在线观看| 色诱视频网站一区| 成人精品视频一区二区三区 | 色综合色狠狠综合色| 国产一区二区调教| 麻豆91在线看| 奇米精品一区二区三区四区| 香港成人在线视频| 怡红院av一区二区三区| 1024成人网| 中文字幕亚洲电影| 综合婷婷亚洲小说| 中文字幕一区二区三区精华液| 国产欧美日韩中文久久| 国产性天天综合网| 国产欧美日产一区| 国产日韩视频一区二区三区| 久久一日本道色综合| 久久人人爽人人爽| 国产视频在线观看一区二区三区 | 天堂一区二区在线免费观看| 夜夜精品视频一区二区 | 欧美性猛交xxxxxxxx| 日本道精品一区二区三区| 色噜噜久久综合| 91精品办公室少妇高潮对白| 欧美系列在线观看| 欧美欧美欧美欧美| 日韩一区二区在线看| 日韩精品一区二区三区老鸭窝| 欧美mv日韩mv国产网站app| 欧美v国产在线一区二区三区| 精品福利一区二区三区| 日本一区二区免费在线| 中文字幕中文字幕在线一区 | 久久免费美女视频| 久久久蜜桃精品| 亚洲欧美自拍偷拍色图| 亚洲五码中文字幕| 美女脱光内衣内裤视频久久影院| 国产一区福利在线| 99精品在线观看视频| 欧洲精品在线观看| 日韩欧美在线一区二区三区| 国产亚洲一区二区三区在线观看 | 日韩欧美中文字幕一区| 欧美精品一区二区三区在线| 国产精品水嫩水嫩| 亚洲午夜视频在线| 黄色小说综合网站| 91麻豆国产在线观看| 欧美日本乱大交xxxxx| 精品电影一区二区三区| 亚洲视频一区二区在线观看| 亚欧色一区w666天堂| 国产精品伊人色| 91丨porny丨国产| 日韩欧美123| 亚洲欧洲精品一区二区三区| 日韩高清中文字幕一区| 成人国产精品免费观看动漫| 欧美精品1区2区| 国产精品视频九色porn| 亚洲成av人影院在线观看网| 国产精品资源站在线| 欧美日韩精品是欧美日韩精品| 久久精品一区蜜桃臀影院| 午夜精品福利一区二区蜜股av| 国产电影一区二区三区| 欧美日韩国产首页| 国产精品久久毛片| 精品一区免费av| 欧美中文字幕一区| 国产精品女上位| 麻豆91在线播放| 欧美日韩中文国产| 国产精品国产三级国产aⅴ中文 | 亚洲老司机在线| 韩国av一区二区三区| 欧美精品一级二级| 亚洲少妇屁股交4| 国产大陆亚洲精品国产| 欧美一区二区黄| 亚洲午夜日本在线观看| 99久久久国产精品免费蜜臀| 精品国产一区二区三区久久影院| 亚洲国产日韩a在线播放| 床上的激情91.| 久久久精品tv| 久久99国内精品| 91精品国产一区二区| 夜夜精品视频一区二区| 色综合久久综合中文综合网| 国产欧美一二三区| 国产激情视频一区二区三区欧美| 日韩午夜电影av| 琪琪一区二区三区| 91麻豆精品国产91久久久资源速度| 亚洲欧美一区二区三区国产精品 | 不卡的电影网站| 欧美国产日产图区| 国产**成人网毛片九色 | 五月综合激情婷婷六月色窝| 色菇凉天天综合网| 一区二区三区中文字幕电影| 91丨porny丨首页| 亚洲男人电影天堂| 色诱亚洲精品久久久久久| 亚洲男人天堂av| 欧美丝袜丝交足nylons| 亚洲国产精品麻豆| 欧美肥妇bbw| 久久激情五月激情| 久久影院视频免费| 国产69精品久久99不卡| 国产精品免费人成网站| 91麻豆文化传媒在线观看| 一区二区三国产精华液| 欧美色图天堂网| 日韩高清不卡在线| 精品毛片乱码1区2区3区| 国内成+人亚洲+欧美+综合在线 | 日韩精品中文字幕一区| 精品亚洲免费视频| 亚洲国产激情av| 色综合av在线| 五月婷婷欧美视频| 日韩你懂的在线观看| 国产一区二区三区免费| 国产精品美女久久久久aⅴ| 日本精品一区二区三区高清| 婷婷综合在线观看| 久久久精品中文字幕麻豆发布| 成人黄色a**站在线观看| 亚洲一区二区影院| 欧美tickling挠脚心丨vk| 成人18精品视频| 午夜欧美电影在线观看| 久久久久99精品国产片| 欧美在线一区二区|