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

📄 muc3.c

📁 dsp AD公司ADSP21的代码,里面有FFT FIR IIR EQULIZER G722_21F 等可以在项目中直接应用的代码.此代码的来源是ADI公司自己出版的书籍,此书在美国购得
💻 C
字号:
#include <stdlib.h>
#include <math.h>
#include "rtdspc.h"
#include "song.h"        /* song[108][7] array */

/* 6 Voice Music Generator */

typedef struct {
    int key,t,cindex;
    float cw,a,b;
    float y1,y0;
} NOTE_STATE;

#define MAX_VOICES 6

    float note(NOTE_STATE *,int *,float *);

void main()
{
    long int n;
    int t,told,vnum,v,key;
    float ampold;
    register long int i,endi;
    register float sig_out;

    static NOTE_STATE notes[MAX_VOICES];

    static float trel[5] = {    0.1 ,    0.2,    0.7,  1.0, 0.0 };
    static float amps[5] = { 30.0 , 50.0, 40.0, 1.0, 0.0 };
    static float rates[10];
    static int tbreaks[10];

    init_evm();                 /* INITIALIZE EVALUATION MODULE PARAMETERS   */

    for(n = 0 ; n < SONG_LENGTH ; n++) {

/* number of samples per note, assume 16e3 sampling rate */
        endi = 2*song[n][0];

/* calculate the rates required to get the desired amps */
        i = 0;
        told = 0;
        ampold = 1.0;       /* always starts at unity */
        while(amps[i] > 1.0) {
            t = trel[i]*endi;
            rates[i] = exp(log(amps[i]/ampold)/(t-told));
            ampold = amps[i];
            tbreaks[i] = told = t;
            i++;
        }

/* set the key numbers for all voices to be played (vnum is how many) */
        for(v = 0 ; v < MAX_VOICES ; v++) {
            key = song[n][v+1];
            if(!key) break;
            notes[v].key = key;
            notes[v].t = 0;
        }
        vnum = v;

        for(i = 0 ; i < endi ; i++) {
            sig_out = 0.0;
            for(v = 0 ; v < vnum ; v++) {
                sig_out += note(&notes[v],tbreaks,rates);
            }
            sendout(sig_out);
        }
    }
    flush();
}

⌨️ 快捷键说明

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