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

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

?? cvsd.c

?? 只有C源代碼的一部分
?? C
?? 第 1 頁 / 共 2 頁
字號:
     /*
 *      CVSD (Continuously Variable Slope Delta modulation)
 *      conversion routines
 *
 *      The CVSD format is described in the MIL Std 188 113, which is
 *      available from http://bbs.itsi.disa.mil:5580/T3564
 *
 *      Copyright (C) 1996
 *      Thomas Sailer (sailer@ife.ee.ethz.ch) (HB9JNX/AE4WA)
 *      Swiss Federal Institute of Technology, Electronics Lab
 *
 *   This library is free software; you can redistribute it and/or
 *   modify it under the terms of the GNU Lesser General Public
 *   License as published by the Free Software Foundation; either
 *   version 2 of the License, or (at your option) any later version.
 *
 *   This library is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *   Lesser General Public License for more details.
 *
 *   You should have received a copy of the GNU Lesser General Public
 *   License along with this library; if not, write to the Free Software
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * Change History:
 *
 * June 1, 1998 - Chris Bagwell (cbagwell@sprynet.com)
 *   Fixed compile warnings reported by Kjetil Torgrim Homme
 *   <kjetilho@ifi.uio.no>
 *
 *
 */

/* ---------------------------------------------------------------------- */

#include "st_i.h"

#include <math.h>
#include <string.h>
#include <time.h>
#include <stdio.h>
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>     /* For SEEK_* defines if not found in stdio */
#endif

#include "cvsdfilt.h"

/* ---------------------------------------------------------------------- */

#ifndef HAVE_MEMMOVE
#define memmove(dest,src,len) (bcopy((src),(dest),(len)))
#endif

/* ---------------------------------------------------------------------- */
/*
 * private data structures
 */

struct cvsd_common_state {
        unsigned overload;
        float mla_int;
        float mla_tc0;
        float mla_tc1;
        unsigned phase;
        unsigned phase_inc;
        float v_min, v_max;
};

struct cvsd_decode_state {
        float output_filter[DEC_FILTERLEN];
};

struct cvsd_encode_state {
        float recon_int;
        float input_filter[ENC_FILTERLEN];
};

struct cvsdpriv {
        struct cvsd_common_state com;
        union {
                struct cvsd_decode_state dec;
                struct cvsd_encode_state enc;
        } c;
        struct {
                unsigned char shreg;
                unsigned mask;
                unsigned cnt;
        } bit;
        unsigned bytes_written;
        unsigned cvsd_rate;
        char swapbits;
};

/* ---------------------------------------------------------------------- */

static float float_conv(float *fp1, float *fp2,int n)
{
        float res = 0;
        for(; n > 0; n--)
                res += (*fp1++) * (*fp2++);
        return res;
}

/* ---------------------------------------------------------------------- */
/*
 * some remarks about the implementation of the CVSD decoder
 * the principal integrator is integrated into the output filter
 * to achieve this, the coefficients of the output filter are multiplied
 * with (1/(1-1/z)) in the initialisation code.
 * the output filter must have a sharp zero at f=0 (i.e. the sum of the
 * filter parameters must be zero). This prevents an accumulation of
 * DC voltage at the principal integration.
 */
/* ---------------------------------------------------------------------- */

static void cvsdstartcommon(ft_t ft)
{
        struct cvsdpriv *p = (struct cvsdpriv *) ft->priv;

        p->cvsd_rate = (ft->info.rate <= 24000) ? 16000 : 32000;
        ft->info.rate = 8000;
        ft->info.channels = 1;
        ft->info.size = ST_SIZE_WORD; /* make output format default to words */
        ft->info.encoding = ST_ENCODING_SIGN2;
        p->swapbits = ft->swap;
        ft->swap = 0;
        /*
         * initialize the decoder
         */
        p->com.overload = 0x5;
        p->com.mla_int = 0;
        /*
         * timeconst = (1/e)^(200 / SR) = exp(-200/SR)
         * SR is the sampling rate
         */
        p->com.mla_tc0 = exp((-200.0)/((float)(p->cvsd_rate)));
        /*
         * phase_inc = 32000 / SR
         */
        p->com.phase_inc = 32000 / p->cvsd_rate;
        /*
         * initialize bit shift register
         */
        p->bit.shreg = p->bit.cnt = 0;
        p->bit.mask = p->swapbits ? 0x80 : 1;
        /*
         * count the bytes written
         */
        p->bytes_written = 0;
        p->com.v_min = 1;
        p->com.v_max = -1;
        st_report("cvsd: bit rate %dbit/s, bits from %s\n", p->cvsd_rate,
               p->swapbits ? "msb to lsb" : "lsb to msb");
}

/* ---------------------------------------------------------------------- */

int st_cvsdstartread(ft_t ft)
{
        struct cvsdpriv *p = (struct cvsdpriv *) ft->priv;
        float *fp1;
        int i;

        cvsdstartcommon(ft);

        p->com.mla_tc1 = 0.1 * (1 - p->com.mla_tc0);
        p->com.phase = 0;
        /*
         * initialize the output filter coeffs (i.e. multiply
         * the coeffs with (1/(1-1/z)) to achieve integration
         * this is now done in the filter parameter generation utility
         */
        /*
         * zero the filter
         */
        for(fp1 = p->c.dec.output_filter, i = DEC_FILTERLEN; i > 0; i--)
                *fp1++ = 0;

        return (ST_SUCCESS);
}

/* ---------------------------------------------------------------------- */

int st_cvsdstartwrite(ft_t ft)
{
        struct cvsdpriv *p = (struct cvsdpriv *) ft->priv;
        float *fp1;
        int i;

        cvsdstartcommon(ft);

        p->com.mla_tc1 = 0.1 * (1 - p->com.mla_tc0);
        p->com.phase = 4;
        /*
         * zero the filter
         */
        for(fp1 = p->c.enc.input_filter, i = ENC_FILTERLEN; i > 0; i--)
                *fp1++ = 0;
        p->c.enc.recon_int = 0;

        return(ST_SUCCESS);
}

/* ---------------------------------------------------------------------- */

int st_cvsdstopwrite(ft_t ft)
{
        struct cvsdpriv *p = (struct cvsdpriv *) ft->priv;

        if (p->bit.cnt) {
                st_writeb(ft, p->bit.shreg);
                p->bytes_written++;
        }
        st_report("cvsd: min slope %f, max slope %f\n",
               p->com.v_min, p->com.v_max);

        return (ST_SUCCESS);
}

/* ---------------------------------------------------------------------- */

int st_cvsdstopread(ft_t ft)
{
        struct cvsdpriv *p = (struct cvsdpriv *) ft->priv;

        st_report("cvsd: min value %f, max value %f\n",
               p->com.v_min, p->com.v_max);

        return(ST_SUCCESS);
}

/* ---------------------------------------------------------------------- */

#undef DEBUG

#ifdef DEBUG
static struct {
        FILE *f1;
        FILE *f2;
        int cnt
} dbg = { NULL, NULL, 0 };
#endif

st_ssize_t st_cvsdread(ft_t ft, st_sample_t *buf, st_ssize_t nsamp)
{
        struct cvsdpriv *p = (struct cvsdpriv *) ft->priv;
        int done = 0;
        float oval;

#ifdef DEBUG
        if (!dbg.f1) {
                if (!(dbg.f1 = fopen("dbg1", "w")))
                {
                        st_fail_errno(ft,errno,"debugging");
                        return (0);
                }
                fprintf(dbg.f1, "\"input\"\n");
        }
        if (!dbg.f2) {
                if (!(dbg.f2 = fopen("dbg2", "w")))
                {
                        st_fail_errno(ft,errno,"debugging");
                        return (0);
                }
                fprintf(dbg.f2, "\"recon\"\n");
        }
#endif
        while (done < nsamp) {
                if (!p->bit.cnt) {
                        if (st_readb(ft, &(p->bit.shreg)) == ST_EOF)
                                return done;
                        p->bit.cnt = 8;
                        p->bit.mask = p->swapbits ? 0x80 : 1;
                }
                /*
                 * handle one bit
                 */
                p->bit.cnt--;
                p->com.overload = ((p->com.overload << 1) |
                                   (!!(p->bit.shreg & p->bit.mask))) & 7;
                if (p->swapbits)
                        p->bit.mask >>= 1;
                else
                        p->bit.mask <<= 1;
                p->com.mla_int *= p->com.mla_tc0;
                if ((p->com.overload == 0) || (p->com.overload == 7))
                        p->com.mla_int += p->com.mla_tc1;
                memmove(p->c.dec.output_filter+1, p->c.dec.output_filter,
                        sizeof(p->c.dec.output_filter)-sizeof(float));
                if (p->com.overload & 1)
                        p->c.dec.output_filter[0] = p->com.mla_int;
                else
                        p->c.dec.output_filter[0] = -p->com.mla_int;
                /*
                 * check if the next output is due
                 */
                p->com.phase += p->com.phase_inc;
                if (p->com.phase >= 4) {
                        oval = float_conv(p->c.dec.output_filter,
                                          (p->cvsd_rate < 24000) ?
                                          dec_filter_16 : dec_filter_32,
                                          DEC_FILTERLEN);
#ifdef DEBUG
                        fprintf(dbg.f1, "%f %f\n", (double)dbg.cnt,
                                (double)p->com.mla_int);
                        fprintf(dbg.f2, "%f %f\n", (double)dbg.cnt,
                                (double)oval);
                        dbg.cnt++;
#endif
                        if (oval > p->com.v_max)
                                p->com.v_max = oval;
                        if (oval < p->com.v_min)
                                p->com.v_min = oval;
                        *buf++ = (oval * ((float)ST_SAMPLE_MAX));
                        done++;
                }
                p->com.phase &= 3;
        }
        return done;
}

/* ---------------------------------------------------------------------- */

st_ssize_t st_cvsdwrite(ft_t ft, st_sample_t *buf, st_ssize_t nsamp)
{
        struct cvsdpriv *p = (struct cvsdpriv *) ft->priv;
        int done = 0;
        float inval;

#ifdef DEBUG
        if (!dbg.f1) {
                if (!(dbg.f1 = fopen("dbg1", "w")))

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产99精品视频| www久久精品| 欧美成人一区二区三区片免费| 国产欧美精品日韩区二区麻豆天美| 亚洲国产人成综合网站| 国产精品羞羞答答xxdd| 91麻豆精品国产91久久久使用方法 | 国产成人午夜视频| 欧美日韩在线播放一区| 成人免费在线视频观看| 国产综合色在线视频区| 91精品国产综合久久婷婷香蕉| 亚洲视频免费在线观看| 丰满白嫩尤物一区二区| 亚洲精品水蜜桃| 日韩av中文字幕一区二区| 99久久99久久综合| 国产人成亚洲第一网站在线播放 | 欧美日韩国产另类不卡| 国产精品福利一区二区三区| 韩国欧美国产1区| 精品剧情在线观看| 秋霞午夜av一区二区三区| 欧美三区在线观看| 亚洲成a人v欧美综合天堂下载| 一本大道久久a久久精二百| 国产精品国产三级国产普通话蜜臀 | 国产精品资源网| 日韩欧美一级二级| 免费高清视频精品| 91精品国产综合久久国产大片| 亚洲成a人片在线不卡一二三区| 91久久精品国产91性色tv| 亚洲天堂av一区| 欧美性生活久久| 日韩专区一卡二卡| 日韩亚洲欧美高清| 激情文学综合丁香| 久久嫩草精品久久久久| 国产成人精品一区二区三区网站观看| 精品国产乱码久久久久久久| 国产乱子轮精品视频| 中文字幕精品一区| 91日韩在线专区| 亚洲一二三级电影| 欧美一级二级在线观看| 国产在线视频一区二区| 国产精品网友自拍| 色视频欧美一区二区三区| 亚洲成人三级小说| 日韩欧美综合在线| 粉嫩一区二区三区在线看| 国产精品女同互慰在线看| 91免费观看国产| 三级久久三级久久| 国产亚洲精久久久久久| 色国产精品一区在线观看| 日精品一区二区| 久久精品网站免费观看| 99久久精品免费看| 日本不卡视频在线| 国产精品你懂的在线欣赏| 97se亚洲国产综合自在线不卡 | 在线观看精品一区| 奇米影视一区二区三区| 中文字幕第一区| 欧美日韩三级一区| 国产精品白丝jk黑袜喷水| 亚洲最大成人综合| 精品国产a毛片| 色婷婷狠狠综合| 精东粉嫩av免费一区二区三区| 亚洲少妇屁股交4| 欧美成人欧美edvon| 色综合天天综合色综合av | 国产69精品一区二区亚洲孕妇| 日韩一区二区三区免费看| 成人午夜激情片| 男男视频亚洲欧美| 亚洲视频在线一区| 精品国产乱码久久久久久闺蜜 | 六月丁香综合在线视频| 国产精品国产自产拍高清av| 日韩欧美亚洲国产精品字幕久久久 | 欧美在线三级电影| 国产成人精品免费一区二区| 日韩电影在线免费看| 综合色天天鬼久久鬼色| 久久久久久影视| 91麻豆精品久久久久蜜臀| 日本电影欧美片| www.亚洲精品| 国产91丝袜在线观看| 久久精品国产亚洲一区二区三区| 一区二区三区四区av| 国产精品黄色在线观看| 国产日韩欧美不卡在线| 日韩欧美精品在线| 91精品国产综合久久福利 | 亚洲午夜私人影院| 亚洲欧美一区二区三区久本道91| 久久久久国产精品免费免费搜索| 777午夜精品视频在线播放| 欧美在线999| 91久久奴性调教| 91免费视频观看| 99re热这里只有精品免费视频 | 久久精品理论片| 日韩二区三区四区| 日韩vs国产vs欧美| 五月婷婷激情综合网| 午夜激情综合网| 午夜激情一区二区三区| 无码av中文一区二区三区桃花岛| 亚洲综合在线视频| 亚洲专区一二三| 亚洲成av人片一区二区三区| 亚洲制服丝袜在线| 首页亚洲欧美制服丝腿| 日本不卡视频一二三区| 欧美aaaaaa午夜精品| 老司机精品视频一区二区三区| 美腿丝袜亚洲三区| 国产一区二区看久久| 成人动漫中文字幕| 在线亚洲人成电影网站色www| 欧美午夜精品久久久久久超碰| 欧美日韩中文国产| 欧美一区二区播放| 久久久99久久| 亚洲免费成人av| 首页国产丝袜综合| 国产一区二区伦理片| 96av麻豆蜜桃一区二区| 在线观看91视频| 日韩欧美国产高清| 国产精品美女久久久久久久久 | 久久精品国产精品青草| 国产福利91精品一区二区三区| 成人短视频下载| 欧美日韩国产小视频在线观看| 另类欧美日韩国产在线| 欧美一区二区三区免费大片| 欧美大黄免费观看| 国产喷白浆一区二区三区| 亚洲欧美日韩人成在线播放| 天堂久久一区二区三区| 国产成人免费在线视频| 日本电影欧美片| 精品国产a毛片| 一区二区三区在线免费视频| 免费三级欧美电影| av不卡在线播放| 日韩一区二区视频| 亚洲欧洲成人自拍| 久久狠狠亚洲综合| 91视频.com| 久久日韩粉嫩一区二区三区| 亚洲综合视频在线| 韩国三级在线一区| 欧美日韩综合色| 国产精品久久久久久久久免费相片| 亚洲国产成人av好男人在线观看| 国产精品影视天天线| 欧美日韩中文字幕精品| 国产精品国产三级国产专播品爱网 | 国产欧美精品区一区二区三区 | 欧美三区免费完整视频在线观看| 91精品国产综合久久精品| 久久精品视频免费| 日韩精品一级中文字幕精品视频免费观看| 国产精品 欧美精品| 91精品国产入口| 亚洲综合色自拍一区| 成人永久aaa| 久久一区二区三区国产精品| 亚洲成人在线免费| 色婷婷av一区二区三区gif | 亚洲综合小说图片| aa级大片欧美| 国产人伦精品一区二区| 久久精品免费看| 91精品午夜视频| 性感美女久久精品| 色婷婷狠狠综合| 亚洲欧美日韩中文字幕一区二区三区| 国产二区国产一区在线观看| 蜜臀99久久精品久久久久久软件| 99久久er热在这里只有精品15| 精品国产电影一区二区| 日韩国产精品久久久| 欧美精品乱码久久久久久按摩| 一区二区三区四区国产精品| 欧美日韩黄视频| 亚洲图片一区二区| 欧美美女黄视频| 性久久久久久久| 在线综合+亚洲+欧美中文字幕| 视频一区在线视频| 欧美一区二区视频在线观看2020|