⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fft4g.c

📁 linux上播放midi音乐,但是要一些设置.可网上查找. 软件名称: TiMidity++-2.13.0.tar
💻 C
📖 第 1 页 / 共 3 页
字号:
            cftbsub(n, a, w);        } else if (n == 4) {            cftfsub(n, a, w);        }    }    dstsub(n, a, nc, w + nw);    if (isgn >= 0) {        if (n > 4) {            bitrv2(n, ip + 2, a);            cftfsub(n, a, w);            rftfsub(n, a, nc, w + nw);        } else if (n == 4) {            cftfsub(n, a, w);        }        xr = a[0] - a[1];        a[0] += a[1];        for (j = 2; j < n; j += 2) {            a[j - 1] = -a[j] - a[j + 1];            a[j] -= a[j + 1];        }        a[n - 1] = -xr;    }}void dfct(int n, float *a, float *t, int *ip, float *w){    void makewt(int nw, int *ip, float *w);    void makect(int nc, int *ip, float *c);    void bitrv2(int n, int *ip, float *a);    void cftfsub(int n, float *a, float *w);    void rftfsub(int n, float *a, int nc, float *c);    void dctsub(int n, float *a, int nc, float *c);    int j, k, l, m, mh, nw, nc;    float xr, xi, yr, yi;        nw = ip[0];    if (n > (nw << 3)) {        nw = n >> 3;        makewt(nw, ip, w);    }    nc = ip[1];    if (n > (nc << 1)) {        nc = n >> 1;        makect(nc, ip, w + nw);    }    m = n >> 1;    yi = a[m];    xi = a[0] + a[n];    a[0] -= a[n];    t[0] = xi - yi;    t[m] = xi + yi;    if (n > 2) {        mh = m >> 1;        for (j = 1; j < mh; j++) {            k = m - j;            xr = a[j] - a[n - j];            xi = a[j] + a[n - j];            yr = a[k] - a[n - k];            yi = a[k] + a[n - k];            a[j] = xr;            a[k] = yr;            t[j] = xi - yi;            t[k] = xi + yi;        }        t[mh] = a[mh] + a[n - mh];        a[mh] -= a[n - mh];        dctsub(m, a, nc, w + nw);        if (m > 4) {            bitrv2(m, ip + 2, a);            cftfsub(m, a, w);            rftfsub(m, a, nc, w + nw);        } else if (m == 4) {            cftfsub(m, a, w);        }        a[n - 1] = a[0] - a[1];        a[1] = a[0] + a[1];        for (j = m - 2; j >= 2; j -= 2) {            a[2 * j + 1] = a[j] + a[j + 1];            a[2 * j - 1] = a[j] - a[j + 1];        }        l = 2;        m = mh;        while (m >= 2) {            dctsub(m, t, nc, w + nw);            if (m > 4) {                bitrv2(m, ip + 2, t);                cftfsub(m, t, w);                rftfsub(m, t, nc, w + nw);            } else if (m == 4) {                cftfsub(m, t, w);            }            a[n - l] = t[0] - t[1];            a[l] = t[0] + t[1];            k = 0;            for (j = 2; j < m; j += 2) {                k += l << 2;                a[k - l] = t[j] - t[j + 1];                a[k + l] = t[j] + t[j + 1];            }            l <<= 1;            mh = m >> 1;            for (j = 0; j < mh; j++) {                k = m - j;                t[j] = t[m + k] - t[m + j];                t[k] = t[m + k] + t[m + j];            }            t[mh] = t[m + mh];            m = mh;        }        a[l] = t[0];        a[n] = t[2] - t[1];        a[0] = t[2] + t[1];    } else {        a[1] = a[0];        a[2] = t[0];        a[0] = t[1];    }}void dfst(int n, float *a, float *t, int *ip, float *w){    void makewt(int nw, int *ip, float *w);    void makect(int nc, int *ip, float *c);    void bitrv2(int n, int *ip, float *a);    void cftfsub(int n, float *a, float *w);    void rftfsub(int n, float *a, int nc, float *c);    void dstsub(int n, float *a, int nc, float *c);    int j, k, l, m, mh, nw, nc;    float xr, xi, yr, yi;        nw = ip[0];    if (n > (nw << 3)) {        nw = n >> 3;        makewt(nw, ip, w);    }    nc = ip[1];    if (n > (nc << 1)) {        nc = n >> 1;        makect(nc, ip, w + nw);    }    if (n > 2) {        m = n >> 1;        mh = m >> 1;        for (j = 1; j < mh; j++) {            k = m - j;            xr = a[j] + a[n - j];            xi = a[j] - a[n - j];            yr = a[k] + a[n - k];            yi = a[k] - a[n - k];            a[j] = xr;            a[k] = yr;            t[j] = xi + yi;            t[k] = xi - yi;        }        t[0] = a[mh] - a[n - mh];        a[mh] += a[n - mh];        a[0] = a[m];        dstsub(m, a, nc, w + nw);        if (m > 4) {            bitrv2(m, ip + 2, a);            cftfsub(m, a, w);            rftfsub(m, a, nc, w + nw);        } else if (m == 4) {            cftfsub(m, a, w);        }        a[n - 1] = a[1] - a[0];        a[1] = a[0] + a[1];        for (j = m - 2; j >= 2; j -= 2) {            a[2 * j + 1] = a[j] - a[j + 1];            a[2 * j - 1] = -a[j] - a[j + 1];        }        l = 2;        m = mh;        while (m >= 2) {            dstsub(m, t, nc, w + nw);            if (m > 4) {                bitrv2(m, ip + 2, t);                cftfsub(m, t, w);                rftfsub(m, t, nc, w + nw);            } else if (m == 4) {                cftfsub(m, t, w);            }            a[n - l] = t[1] - t[0];            a[l] = t[0] + t[1];            k = 0;            for (j = 2; j < m; j += 2) {                k += l << 2;                a[k - l] = -t[j] - t[j + 1];                a[k + l] = t[j] - t[j + 1];            }            l <<= 1;            mh = m >> 1;            for (j = 1; j < mh; j++) {                k = m - j;                t[j] = t[m + k] + t[m + j];                t[k] = t[m + k] - t[m + j];            }            t[0] = t[m + mh];            m = mh;        }        a[l] = t[0];    }    a[0] = 0;}/* -------- initializing routines -------- */#include <math.h>void makewt(int nw, int *ip, float *w){    void bitrv2(int n, int *ip, float *a);    int j, nwh;    float delta, x, y;        ip[0] = nw;    ip[1] = 1;    if (nw > 2) {        nwh = nw >> 1;        delta = atan(1.0) / nwh;        w[0] = 1;        w[1] = 0;        w[nwh] = cos(delta * nwh);        w[nwh + 1] = w[nwh];        if (nwh > 2) {            for (j = 2; j < nwh; j += 2) {                x = cos(delta * j);                y = sin(delta * j);                w[j] = x;                w[j + 1] = y;                w[nw - j] = y;                w[nw - j + 1] = x;            }            bitrv2(nw, ip + 2, w);        }    }}void makect(int nc, int *ip, float *c){    int j, nch;    float delta;        ip[1] = nc;    if (nc > 1) {        nch = nc >> 1;        delta = atan(1.0) / nch;        c[0] = cos(delta * nch);        c[nch] = 0.5 * c[0];        for (j = 1; j < nch; j++) {            c[j] = 0.5 * cos(delta * j);            c[nc - j] = 0.5 * sin(delta * j);        }    }}/* -------- child routines -------- */void bitrv2(int n, int *ip, float *a){    int j, j1, k, k1, l, m, m2;    float xr, xi, yr, yi;        ip[0] = 0;    l = n;    m = 1;    while ((m << 3) < l) {        l >>= 1;        for (j = 0; j < m; j++) {            ip[m + j] = ip[j] + l;        }        m <<= 1;    }    m2 = 2 * m;    if ((m << 3) == l) {        for (k = 0; k < m; k++) {            for (j = 0; j < k; j++) {                j1 = 2 * j + ip[k];                k1 = 2 * k + ip[j];                xr = a[j1];                xi = a[j1 + 1];                yr = a[k1];                yi = a[k1 + 1];                a[j1] = yr;                a[j1 + 1] = yi;                a[k1] = xr;                a[k1 + 1] = xi;                j1 += m2;                k1 += 2 * m2;                xr = a[j1];                xi = a[j1 + 1];                yr = a[k1];                yi = a[k1 + 1];                a[j1] = yr;                a[j1 + 1] = yi;                a[k1] = xr;                a[k1 + 1] = xi;                j1 += m2;                k1 -= m2;                xr = a[j1];                xi = a[j1 + 1];                yr = a[k1];                yi = a[k1 + 1];                a[j1] = yr;                a[j1 + 1] = yi;                a[k1] = xr;                a[k1 + 1] = xi;                j1 += m2;                k1 += 2 * m2;                xr = a[j1];                xi = a[j1 + 1];                yr = a[k1];                yi = a[k1 + 1];                a[j1] = yr;                a[j1 + 1] = yi;                a[k1] = xr;                a[k1 + 1] = xi;            }            j1 = 2 * k + m2 + ip[k];            k1 = j1 + m2;            xr = a[j1];            xi = a[j1 + 1];            yr = a[k1];            yi = a[k1 + 1];            a[j1] = yr;            a[j1 + 1] = yi;            a[k1] = xr;            a[k1 + 1] = xi;        }    } else {        for (k = 1; k < m; k++) {            for (j = 0; j < k; j++) {                j1 = 2 * j + ip[k];                k1 = 2 * k + ip[j];                xr = a[j1];                xi = a[j1 + 1];                yr = a[k1];                yi = a[k1 + 1];                a[j1] = yr;                a[j1 + 1] = yi;                a[k1] = xr;                a[k1 + 1] = xi;                j1 += m2;                k1 += m2;                xr = a[j1];                xi = a[j1 + 1];                yr = a[k1];                yi = a[k1 + 1];                a[j1] = yr;                a[j1 + 1] = yi;                a[k1] = xr;                a[k1 + 1] = xi;            }        }    }}void bitrv2conj(int n, int *ip, float *a){    int j, j1, k, k1, l, m, m2;    float xr, xi, yr, yi;        ip[0] = 0;    l = n;    m = 1;    while ((m << 3) < l) {        l >>= 1;        for (j = 0; j < m; j++) {            ip[m + j] = ip[j] + l;        }        m <<= 1;    }    m2 = 2 * m;    if ((m << 3) == l) {        for (k = 0; k < m; k++) {            for (j = 0; j < k; j++) {                j1 = 2 * j + ip[k];                k1 = 2 * k + ip[j];                xr = a[j1];                xi = -a[j1 + 1];                yr = a[k1];                yi = -a[k1 + 1];                a[j1] = yr;                a[j1 + 1] = yi;                a[k1] = xr;                a[k1 + 1] = xi;                j1 += m2;                k1 += 2 * m2;                xr = a[j1];                xi = -a[j1 + 1];                yr = a[k1];                yi = -a[k1 + 1];                a[j1] = yr;                a[j1 + 1] = yi;                a[k1] = xr;                a[k1 + 1] = xi;                j1 += m2;                k1 -= m2;                xr = a[j1];                xi = -a[j1 + 1];                yr = a[k1];                yi = -a[k1 + 1];                a[j1] = yr;                a[j1 + 1] = yi;                a[k1] = xr;                a[k1 + 1] = xi;                j1 += m2;                k1 += 2 * m2;                xr = a[j1];                xi = -a[j1 + 1];                yr = a[k1];                yi = -a[k1 + 1];                a[j1] = yr;                a[j1 + 1] = yi;                a[k1] = xr;                a[k1 + 1] = xi;            }            k1 = 2 * k + ip[k];            a[k1 + 1] = -a[k1 + 1];            j1 = k1 + m2;            k1 = j1 + m2;            xr = a[j1];            xi = -a[j1 + 1];            yr = a[k1];            yi = -a[k1 + 1];            a[j1] = yr;            a[j1 + 1] = yi;            a[k1] = xr;            a[k1 + 1] = xi;            k1 += m2;            a[k1 + 1] = -a[k1 + 1];        }    } else {        a[1] = -a[1];        a[m2 + 1] = -a[m2 + 1];        for (k = 1; k < m; k++) {            for (j = 0; j < k; j++) {                j1 = 2 * j + ip[k];                k1 = 2 * k + ip[j];                xr = a[j1];                xi = -a[j1 + 1];                yr = a[k1];                yi = -a[k1 + 1];                a[j1] = yr;                a[j1 + 1] = yi;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -