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

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

?? samples.c

?? Audacity是一款用於錄音和編輯聲音的、免費的開放源碼軟體。它可以執行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業系統
?? C
字號:
/* samples.c -- various functions for the Nyquist sound data type *//* CHANGE LOG * -------------------------------------------------------------------- * 28Apr03  dm  min->MIN, max->MAX */#include <stdio.h>#ifndef mips#include "stdlib.h"#endif#include "xlisp.h"#include "sound.h"#include "falloc.h"#include "samples.h"LVAL s_next = NULL;LVAL s_send;void samples_symbols(){    s_next = xlenter(":NEXT");    s_send = xlenter("SEND");}/* snd_from_array -- convert lisp array to sound type *//**/sound_type snd_from_array(double t0, double sr, LVAL array){    sound_type result;    snd_list_type snd_list;    long total = 0;    if (!vectorp(array)) xlerror("array expected", array);    result = sound_create(NULL, t0, sr, 1.0);    snd_list = result->list;    while (total < getsize(array)) {        long togo = MIN(getsize(array) - total, max_sample_block_len);        sample_block_type block;        int i;        falloc_sample_block(block, "snd_from_array");        snd_list->block = block;        for (i = 0; i < togo; i++) {            LVAL elem = getelement(array, total + i);            sample_type *ptr = block->samples + i;            if (fixp(elem)) *ptr = (sample_type) getfixnum(elem);            else if (floatp(elem)) *ptr = (sample_type) getflonum(elem);            else xlerror("expecting array elem to be number", elem);        }        total += togo;        snd_list->block_len = (short) togo;        snd_list->u.next = snd_list_create(NULL);        snd_list = snd_list->u.next;    }    snd_list->block_len = max_sample_block_len;    snd_list->block = zero_block;    snd_list->logically_stopped = true;    snd_list->u.next = zero_snd_list;    return result;}/* snd_length -- count how many samples are in a sound *//**/long snd_length(sound_type s, long len){    long total = 0;    long blocklen;    s = sound_copy(s);    if (len > s->stop) len = s->stop;    while (total < len) {        sample_block_type sampblock = sound_get_next(s, &blocklen);        if (sampblock == zero_block) break;        total += blocklen;    }    if (total > len) total = len;    sound_unref(s);    return total;}/* snd_maxsamp -- compute the maximum value of samples in s *//**/double snd_maxsamp(sound_type s){    sample_type result = 0.0F;    long blocklen;    s = sound_copy(s);    while (true) {        sample_block_type sampblock = sound_get_next(s, &blocklen);        long i;        sample_block_values_type sbufp = sampblock->samples;        if (sampblock == zero_block || blocklen == 0) {            break;        }        for (i = 0; i < blocklen; i++) {            register sample_type samp = *sbufp++;            if (result < samp) result = samp;            else if (result < -samp) result = -samp;        }    }    return (double) (s->scale * result);}/* snd_samples -- convert sound (prefix) to lisp array *//**/LVAL snd_samples(sound_type s, long len){    LVAL v;    long vx = 0;    long blocklen;    register double scale_factor = s->scale;    len = snd_length(s, len);    s = sound_copy(s);    xlsave1(v);    v = newvector(len);    while (len > 0) {        sample_block_type sampblock = sound_get_next(s, &blocklen);        long togo = MIN(blocklen, len);        long i;        sample_block_values_type sbufp = sampblock->samples;        for (i = 0; i < togo; i++) {            setelement(v, vx++, cvflonum(*sbufp++ * scale_factor));        }        len -= togo;    }    sound_unref(s);    /* restore the stack */    xlpop();    return v;}/* NOTE: this code does not properly handle start times that do not * correspond to the time of the first actual sample *//* NOTE: we need some addtional state to keep track of where we are. *  We'll use the extra field of sound_type; first long is length, *  so second field will be the count of how many samples we've read. */#define CNT extra[1]#define INDEX extra[2]#define FIELDS 3#define SAMPLES list->block->samplesLVAL snd_fetch(sound_type s){    if (!s->extra) { /* this is the first call, so fix up s */        s->extra = (long *) malloc(sizeof(long) * FIELDS);        s->extra[0] = sizeof(long) * FIELDS;        s->CNT = s->INDEX = 0;    } else if (s->extra[0] != sizeof(long) * FIELDS) {        xlfail("sound in use by another iterator");    }    if (s->CNT == s->INDEX) {        sound_get_next(s, &(s->CNT));        s->INDEX = 0;    }    if (s->SAMPLES == zero_block->samples) {        return NULL;    }	    /* logical stop time is ignored by this code -- to fix this,     * you would need a way to return the logical stop time to      * the caller.     */    return cvflonum(s->SAMPLES[s->INDEX++] * s->scale);} /* snd_fetch *//* snd_fetch_array -- fetch a lisp array of samples *//* * storage layout: the extra field points to extra state that we'll use * extra[0] -> length of extra storage * extra[1] -> CNT (number of samples in current block) * extra[2] -> INDEX (current sample index in current block) * extra[3] -> FILLCNT (how many samples in buffer) * extra[4] -> TERMCNT (how many samples until termination) * extra[4 .. 4+len-1] -> samples (stored as floats) *  * Termination details: *   Return NIL when the sound terminates. *   Termination is defined as the point where all original * signal samples have been shifted out of the samples buffer * so that all that's left are zeros from beyond the termination * point. *   Implementation: when termination is discovered, set TERMCNT * to the number of samples to be shifted out. TERMCNT is initially * -1 as a flag that we haven't seen the termination yet.  * Each time samples are shifted, decrement TERMCNT by the shift amount. * When TERMCNT goes to zero, return NULL. *//* these macros define entries in extra, more macros are defined above */#define FILLCNT extra[3]#define TERMCNT extra[4]#define OFFSET 5LVAL snd_fetch_array(sound_type s, long len, long step){    long i, maxlen, skip, fillptr;    float *samples;    LVAL result;        if (len < 1) xlfail("len < 1");    if (!s->extra) { /* this is the first call, so fix up s */        s->extra = (long *) malloc(sizeof(long) * (len + OFFSET));        s->extra[0] = sizeof(long) * (len + OFFSET);        s->CNT = s->INDEX = s->FILLCNT = 0;        s->TERMCNT = -1;        maxlen = len;    } else {        maxlen = (s->extra[0] / sizeof(long)) - OFFSET;        if (maxlen < 1) xlfail("sound in use by another iterator");        if (maxlen < len) xlfail("len grew");    }    samples = (float *) &(s->extra[OFFSET]);        /* step 1: refill buffer with samples */    fillptr = s->FILLCNT;    while (fillptr < maxlen) {        if (s->INDEX == s->CNT) {            sound_get_next(s, &(s->CNT));            if (s->SAMPLES == zero_block->samples) {                if (s->TERMCNT < 0) s->TERMCNT = fillptr;            }	            s->INDEX = 0;        }        samples[fillptr++] = s->SAMPLES[s->INDEX++] * s->scale;    }    s->FILLCNT = fillptr;    /* it is important to test here AFTER filling the buffer, because     * if fillptr WAS 0 when we hit the zero_block, then filling the      * buffer will set TERMCNT to 0.     */    if (s->TERMCNT == 0) return NULL;        /* logical stop time is ignored by this code -- to fix this,     * you would need a way to return the logical stop time to      * the caller.     */    /* step 2: construct an array and return it */    xlsave1(result);    result = newvector(len);    for (i = 0; i < len; i++) {        setelement(result, i, cvflonum(samples[i]));    }    /* step 3: shift samples by step */    if (step < 0) xlfail("step < 0");    s->FILLCNT -= step;    if (s->FILLCNT < 0) s->FILLCNT = 0;    for (i = 0; i < s->FILLCNT; i++) {        samples[i] = samples[i + step];    }        if (s->TERMCNT >= 0) {        s->TERMCNT -= step;        if (s->TERMCNT < 0) s->TERMCNT = 0;    }    /* step 4: advance in sound to next sample we need     *   (only does work if step > size of buffer)     */    skip = step - maxlen;    while (skip > 0) {        long remaining = s->CNT - s->INDEX;        if (remaining >= skip) {            s->INDEX += skip;            skip = 0;        } else {            skip -= remaining;            sound_get_next(s, &(s->CNT));            s->INDEX = 0;        }    }        /* restore the stack */    xlpop();    return result;} /* snd_fetch_array */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产亚洲aⅴ| 蜜桃精品视频在线| 男人的j进女人的j一区| 懂色av一区二区三区免费看| 久久综合九色欧美综合狠狠 | 日本丰满少妇一区二区三区| 色综合天天视频在线观看| 精品视频一区二区不卡| 久久综合国产精品| 亚洲午夜电影网| 国产一区二区免费视频| 在线日韩国产精品| 2023国产一二三区日本精品2022| 中文字幕综合网| 久久国产精品第一页| 91看片淫黄大片一级| 精品国产伦一区二区三区观看体验| 18涩涩午夜精品.www| 人人爽香蕉精品| 日本久久一区二区三区| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 3atv在线一区二区三区| 亚洲视频综合在线| 国产在线精品国自产拍免费| 欧美午夜一区二区三区| 国产欧美一区在线| 久久国内精品自在自线400部| 日本道色综合久久| 国产精品高潮呻吟久久| 国产精品中文有码| 欧美一区二区久久| 亚洲一二三级电影| 一本大道综合伊人精品热热| 亚洲国产电影在线观看| 捆绑紧缚一区二区三区视频| 在线观看亚洲a| 亚洲免费电影在线| 99久久精品久久久久久清纯| 久久精品无码一区二区三区| 精东粉嫩av免费一区二区三区| 欧美日韩成人一区二区| 亚洲一区二区精品视频| 91黄色免费观看| 亚洲青青青在线视频| 国产盗摄视频一区二区三区| 精品捆绑美女sm三区| 久久国产精品99久久久久久老狼| 99精品久久只有精品| 奇米精品一区二区三区在线观看一| 一本一道久久a久久精品 | 欧美一区二区三区免费大片| 亚洲综合色自拍一区| 91黄色在线观看| 亚洲一区二区三区视频在线播放| 91在线码无精品| 亚洲美女免费在线| 欧洲另类一二三四区| 亚洲丶国产丶欧美一区二区三区| 欧美日韩综合色| 婷婷中文字幕综合| 日韩一卡二卡三卡四卡| 精品一区二区三区免费播放| 久久九九99视频| 不卡一二三区首页| 亚洲精品一二三| 欧美丰满一区二区免费视频| 五月天网站亚洲| 亚洲va在线va天堂| 日韩久久免费av| 国产成人久久精品77777最新版本| 欧美激情一区二区三区四区| 99re这里只有精品6| 亚洲va欧美va人人爽| 日韩一区二区三区视频在线 | 视频精品一区二区| 337p粉嫩大胆噜噜噜噜噜91av| 成人免费av在线| 亚洲国产综合人成综合网站| 欧美不卡在线视频| 国产91精品久久久久久久网曝门| 亚洲视频1区2区| 欧美一级淫片007| 国产精品1区二区.| 亚洲午夜电影在线| 欧美高清性hdvideosex| 国产精品一区二区免费不卡| 亚洲乱码国产乱码精品精可以看 | 亚洲色图在线播放| 91精品黄色片免费大全| 成人激情免费视频| 日韩精品一卡二卡三卡四卡无卡| 亚洲18女电影在线观看| 日韩视频永久免费| 91蝌蚪porny九色| 免费高清成人在线| 亚洲人成7777| 久久女同精品一区二区| 在线欧美日韩国产| 国产99精品在线观看| 亚洲国产日韩av| 中文字幕不卡的av| 99re66热这里只有精品3直播| 亚洲成人综合视频| 国产精品免费看片| 911国产精品| 精品一区二区三区日韩| 日本不卡的三区四区五区| 亚洲色图在线播放| 国产精品素人一区二区| 这里是久久伊人| 色呦呦一区二区三区| 丁香婷婷综合五月| 日本精品一区二区三区高清 | 日韩精品每日更新| 夜夜嗨av一区二区三区网页| 国产三级一区二区三区| 欧美精品乱码久久久久久| 91玉足脚交白嫩脚丫在线播放| 国产麻豆视频精品| 日本欧美大码aⅴ在线播放| 亚洲久本草在线中文字幕| 中文欧美字幕免费| 欧美精品日日鲁夜夜添| 国产精品77777| 国产乱码精品一区二区三区忘忧草 | 日韩毛片一二三区| 国产拍欧美日韩视频二区 | 91麻豆文化传媒在线观看| 大陆成人av片| 欧美老年两性高潮| 欧美精品tushy高清| 在线免费亚洲电影| 色婷婷久久综合| 91成人在线免费观看| 日本韩国欧美在线| 91黄色在线观看| 欧美四级电影在线观看| 国模冰冰炮一区二区| 麻豆精品新av中文字幕| 夜夜亚洲天天久久| 亚洲图片自拍偷拍| 日韩成人一区二区| 日本欧美韩国一区三区| 精品一区二区三区香蕉蜜桃| 国产一区二区h| 高清av一区二区| a4yy欧美一区二区三区| 91视频免费看| 欧美日韩一区二区三区在线| 欧美老肥妇做.爰bbww| 日韩一级视频免费观看在线| 日韩免费电影一区| 国产精品福利电影一区二区三区四区 | 国产99久久久国产精品免费看 | 欧美日韩国产成人在线91| 91精品国产美女浴室洗澡无遮挡| 日韩视频中午一区| 国产天堂亚洲国产碰碰| 中文字幕一区二区三区乱码在线| 亚洲精品成人在线| 免费观看一级欧美片| 国模一区二区三区白浆| 日本福利一区二区| 日韩一级免费观看| 国产精品高清亚洲| 日韩成人av影视| 东方aⅴ免费观看久久av| 在线观看91精品国产入口| 日韩一区二区三区四区| 欧美国产乱子伦| 亚洲一二三专区| 国产在线精品一区二区三区不卡| 欧美一区二区福利在线| 色哟哟亚洲精品| 日韩一卡二卡三卡四卡| 亚洲色图在线播放| 日韩av网站免费在线| 国产91对白在线观看九色| 欧美在线看片a免费观看| 91搞黄在线观看| 久久久精品tv| 一区二区三区四区视频精品免费| 日韩和欧美的一区| 99精品偷自拍| 欧美成人精品福利| 一区二区在线观看视频 | 国产精品久久久久婷婷| 日韩在线观看一区二区| 99久久精品免费看国产免费软件| 精品久久久久久久久久久久久久久| 中文字幕佐山爱一区二区免费| 激情综合五月天| 欧美日韩亚洲综合| 国产日本亚洲高清| 蜜臂av日日欢夜夜爽一区| 91免费观看在线| 在线不卡欧美精品一区二区三区| 亚洲国产精品ⅴa在线观看| 久久爱另类一区二区小说| 色婷婷狠狠综合|