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

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

?? minifmsynth.c

?? alsa sound devlopment
?? C
字號(hào):
/* miniFMsynth 1.0 by Matthias Nagorni    *//* This program uses callback-based audio *//* playback as proposed by Paul Davis on  *//* the linux-audio-dev mailinglist.       */#include <stdio.h>   #include <stdlib.h>#include <alsa/asoundlib.h>#include <math.h>#define POLY 10#define GAIN 5000.0#define BUFSIZE 512snd_seq_t *seq_handle;snd_pcm_t *playback_handle;short *buf;double phi[POLY], phi_mod[POLY], pitch, modulation, velocity[POLY], attack, decay, sustain, release, env_time[POLY], env_level[POLY];int harmonic, subharmonic, transpose, note[POLY], gate[POLY], note_active[POLY];snd_seq_t *open_seq() {    snd_seq_t *seq_handle;        if (snd_seq_open(&seq_handle, "default", SND_SEQ_OPEN_DUPLEX, 0) < 0) {        fprintf(stderr, "Error opening ALSA sequencer.\n");        exit(1);    }    snd_seq_set_client_name(seq_handle, "miniFMsynth");    if (snd_seq_create_simple_port(seq_handle, "miniFMsynth",        SND_SEQ_PORT_CAP_WRITE|SND_SEQ_PORT_CAP_SUBS_WRITE,        SND_SEQ_PORT_TYPE_APPLICATION) < 0) {        fprintf(stderr, "Error creating sequencer port.\n");        exit(1);    }    return(seq_handle);}snd_pcm_t *open_pcm(char *pcm_name) {    snd_pcm_t *playback_handle;    snd_pcm_hw_params_t *hw_params;    snd_pcm_sw_params_t *sw_params;                if (snd_pcm_open (&playback_handle, pcm_name, SND_PCM_STREAM_PLAYBACK, 0) < 0) {        fprintf (stderr, "cannot open audio device %s\n", pcm_name);        exit (1);    }    snd_pcm_hw_params_alloca(&hw_params);    snd_pcm_hw_params_any(playback_handle, hw_params);    snd_pcm_hw_params_set_access(playback_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED);    snd_pcm_hw_params_set_format(playback_handle, hw_params, SND_PCM_FORMAT_S16_LE);    snd_pcm_hw_params_set_rate_near(playback_handle, hw_params, 44100, 0);    snd_pcm_hw_params_set_channels(playback_handle, hw_params, 2);    snd_pcm_hw_params_set_periods(playback_handle, hw_params, 2, 0);    snd_pcm_hw_params_set_period_size(playback_handle, hw_params, BUFSIZE, 0);    snd_pcm_hw_params(playback_handle, hw_params);    snd_pcm_sw_params_alloca(&sw_params);    snd_pcm_sw_params_current(playback_handle, sw_params);    snd_pcm_sw_params_set_avail_min(playback_handle, sw_params, BUFSIZE);    snd_pcm_sw_params(playback_handle, sw_params);    return(playback_handle);}double envelope(int *note_active, int gate, double *env_level, double t, double attack, double decay, double sustain, double release) {    if (gate)  {        if (t > attack + decay) return(*env_level = sustain);        if (t > attack) return(*env_level = 1.0 - (1.0 - sustain) * (t - attack) / decay);        return(*env_level = t / attack);    } else {        if (t > release) {            if (note_active) *note_active = 0;            return(*env_level = 0);        }        return(*env_level * (1.0 - t / release));    }}int midi_callback() {    snd_seq_event_t *ev;    int l1;      do {        snd_seq_event_input(seq_handle, &ev);        switch (ev->type) {            case SND_SEQ_EVENT_PITCHBEND:                pitch = (double)ev->data.control.value / 8192.0;                break;            case SND_SEQ_EVENT_CONTROLLER:                if (ev->data.control.param == 1) {                    modulation = (double)ev->data.control.value / 10.0;                }                 break;            case SND_SEQ_EVENT_NOTEON:                for (l1 = 0; l1 < POLY; l1++) {                    if (!note_active[l1]) {                        note[l1] = ev->data.note.note;                        velocity[l1] = ev->data.note.velocity / 127.0;                        env_time[l1] = 0;                        gate[l1] = 1;                        note_active[l1] = 1;                        break;                    }                }                break;                    case SND_SEQ_EVENT_NOTEOFF:                for (l1 = 0; l1 < POLY; l1++) {                    if (gate[l1] && note_active[l1] && (note[l1] == ev->data.note.note)) {                        env_time[l1] = 0;                        gate[l1] = 0;                    }                }                break;                }        snd_seq_free_event(ev);    } while (snd_seq_event_input_pending(seq_handle, 0) > 0);    return (0);}int playback_callback (snd_pcm_sframes_t nframes) {    int l1, l2;    double dphi, dphi_mod, f1, f2, f3, freq_note, sound;          memset(buf, 0, nframes * 4);    for (l2 = 0; l2 < POLY; l2++) {        if (note_active[l2]) {            f1 = 8.176 * exp((double)(transpose+note[l2]-2)*log(2.0)/12.0);            f2 = 8.176 * exp((double)(transpose+note[l2])*log(2.0)/12.0);            f3 = 8.176 * exp((double)(transpose+note[l2]+2)*log(2.0)/12.0);            freq_note = (pitch > 0) ? f2 + (f3-f2)*pitch : f2 + (f2-f1)*pitch;            dphi = M_PI * freq_note / 22050.0;                                                dphi_mod = dphi * (double)harmonic / (double)subharmonic;            for (l1 = 0; l1 < nframes; l1++) {                phi[l2] += dphi;                phi_mod[l2] += dphi_mod;                if (phi[l2] > 2.0 * M_PI) phi[l2] -= 2.0 * M_PI;                if (phi_mod[l2] > 2.0 * M_PI) phi_mod[l2] -= 2.0 * M_PI;                sound = GAIN * envelope(&note_active[l2], gate[l2], &env_level[l2], env_time[l2], attack, decay, sustain, release)                             * velocity[l2] * sin(phi[l2] + modulation * sin(phi_mod[l2]));                env_time[l2] += 1.0 / 44100.0;                buf[2 * l1] += sound;                buf[2 * l1 + 1] += sound;            }        }        }    return snd_pcm_writei (playback_handle, buf, nframes); }      int main (int argc, char *argv[]) {    int nfds, seq_nfds, l1;    struct pollfd *pfds;        if (argc < 10) {        fprintf(stderr, "miniFMsynth <device> <FM> <harmonic> <subharmonic> <transpose> <a> <d> <s> <r>\n");         exit(1);    }    modulation = atof(argv[2]);    harmonic = atoi(argv[3]);    subharmonic = atoi(argv[4]);    transpose = atoi(argv[5]);    attack = atof(argv[6]);    decay = atof(argv[7]);    sustain = atof(argv[8]);    release = atof(argv[9]);    pitch = 0;    buf = (short *) malloc (2 * sizeof (short) * BUFSIZE);    playback_handle = open_pcm(argv[1]);    seq_handle = open_seq();    seq_nfds = snd_seq_poll_descriptors_count(seq_handle, POLLIN);    nfds = snd_pcm_poll_descriptors_count (playback_handle);    pfds = (struct pollfd *)alloca(sizeof(struct pollfd) * (seq_nfds + nfds));    snd_seq_poll_descriptors(seq_handle, pfds, seq_nfds, POLLIN);    snd_pcm_poll_descriptors (playback_handle, pfds+seq_nfds, nfds);    for (l1 = 0; l1 < POLY; note_active[l1++] = 0);    while (1) {        if (poll (pfds, seq_nfds + nfds, 1000) > 0) {            for (l1 = 0; l1 < seq_nfds; l1++) {               if (pfds[l1].revents > 0) midi_callback();            }            for (l1 = seq_nfds; l1 < seq_nfds + nfds; l1++) {                    if (pfds[l1].revents > 0) {                     if (playback_callback(BUFSIZE) < BUFSIZE) {                        fprintf (stderr, "xrun !\n");                        snd_pcm_prepare(playback_handle);                    }                }            }                }    }    snd_pcm_close (playback_handle);    snd_seq_close (seq_handle);    free(buf);    return (0);}     

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩一区| av一区二区三区黑人| 午夜国产精品影院在线观看| 中文字幕在线播放不卡一区| 欧美男男青年gay1069videost | 色婷婷狠狠综合| 久久国产婷婷国产香蕉| 亚洲图片欧美视频| 亚洲卡通欧美制服中文| 国产精品免费视频观看| 国产日韩欧美精品一区| 欧美成人一区二区| 欧美性猛交一区二区三区精品| 97久久精品人人做人人爽50路| 成人免费视频国产在线观看| 国产成人精品一区二区三区四区| 国产真实乱偷精品视频免| 久久不见久久见免费视频7| 蜜臀精品久久久久久蜜臀| 日韩高清在线不卡| 日韩成人午夜精品| 麻豆成人久久精品二区三区小说| 日产国产欧美视频一区精品| 免费xxxx性欧美18vr| 视频一区欧美日韩| 免费成人av资源网| 国产自产视频一区二区三区| 国产激情视频一区二区三区欧美 | 91捆绑美女网站| 99国产精品视频免费观看| 国产夫妻精品视频| 久久精工是国产品牌吗| 国产美女精品在线| 成人午夜大片免费观看| 色又黄又爽网站www久久| 欧美午夜理伦三级在线观看| 欧美狂野另类xxxxoooo| 精品久久五月天| 国产欧美一区二区精品性| 国产精品美日韩| 亚洲综合免费观看高清在线观看| 亚洲成av人片在www色猫咪| 日韩国产欧美在线播放| 精品一区二区三区免费观看| 国产中文字幕一区| 91在线观看成人| 欧美日韩高清不卡| 精品国产伦理网| 亚洲三级在线播放| 午夜精品久久久久久| 韩国三级中文字幕hd久久精品| 粗大黑人巨茎大战欧美成人| 在线观看国产精品网站| 日韩一区二区高清| 日本一区二区三区在线观看| 一片黄亚洲嫩模| 久久成人麻豆午夜电影| 成人app软件下载大全免费| 欧美日韩视频在线第一区 | 青青草原综合久久大伊人精品优势| 国产风韵犹存在线视精品| 色综合av在线| 久久综合九色综合97婷婷女人| 亚洲日本一区二区三区| 成人欧美一区二区三区黑人麻豆| 亚洲bdsm女犯bdsm网站| 国产a视频精品免费观看| 欧美性生活久久| 久久久电影一区二区三区| 玉足女爽爽91| 国产麻豆91精品| 欧美丝袜自拍制服另类| 国产亚洲综合在线| 国产精品久99| 欧美aaaaaa午夜精品| 色综合咪咪久久| 精品国产乱码久久久久久久 | 日韩制服丝袜先锋影音| 成人免费看片app下载| 91片黄在线观看| 欧美日韩国产另类不卡| 国产精品久久久久久亚洲伦| 免费在线成人网| 欧美这里有精品| 欧美激情综合五月色丁香小说| 天天综合网天天综合色| 97久久久精品综合88久久| 欧美刺激午夜性久久久久久久 | 亚洲成va人在线观看| 成人综合在线视频| 欧美大片在线观看一区| 五月天网站亚洲| 97久久久精品综合88久久| 精品99999| 五月天久久比比资源色| 91福利在线免费观看| 国产精品久久久久久久午夜片| 精品一区二区三区视频在线观看| 欧美日韩五月天| 亚洲一区二区三区四区五区中文| 国产一区二区调教| 欧美一级xxx| 亚洲视频1区2区| 蜜桃久久精品一区二区| 国产精品久久久爽爽爽麻豆色哟哟| 国产三级久久久| 久久丁香综合五月国产三级网站| 欧美精品免费视频| 亚洲一区在线观看视频| 91在线精品一区二区三区| 精品久久久久99| 麻豆国产91在线播放| 欧美男同性恋视频网站| 午夜久久福利影院| 欧美色视频在线观看| 国产亚洲欧洲一区高清在线观看| 天天色综合天天| 欧美日韩精品免费观看视频| 一区二区三区欧美在线观看| 在线中文字幕一区| 夜夜精品视频一区二区| 丁香婷婷综合激情五月色| 欧美一区二区精美| 日本vs亚洲vs韩国一区三区二区| 欧美综合天天夜夜久久| 亚洲黄色小说网站| 欧美亚洲高清一区二区三区不卡| 亚洲综合区在线| 欧美二区乱c少妇| 日韩avvvv在线播放| 777色狠狠一区二区三区| 亚洲成av人片在线观看无码| 在线播放亚洲一区| 免费观看一级欧美片| 精品国产一区二区三区不卡| 国产一区二区三区免费| 国产精品免费网站在线观看| 国产乱码字幕精品高清av| 精品欧美久久久| 国产成人在线免费观看| 亚洲伦理在线精品| 欧美一卡2卡3卡4卡| 粉嫩绯色av一区二区在线观看| 亚洲欧美aⅴ...| 精品国产一二三| 91麻豆精品视频| 激情欧美一区二区三区在线观看| 亚洲色图欧美激情| 日韩欧美黄色影院| 91麻豆文化传媒在线观看| 美脚の诱脚舐め脚责91| 日韩码欧中文字| 欧美xxxx在线观看| 色狠狠av一区二区三区| 国产一区欧美日韩| 亚洲一区二区视频在线观看| 久久蜜桃av一区二区天堂| 欧美四级电影网| 处破女av一区二区| 六月婷婷色综合| 亚洲一二三级电影| 中文一区在线播放| 日韩三级免费观看| 欧美午夜精品久久久久久孕妇| 国产精品一二一区| 日本欧美大码aⅴ在线播放| 最新国产精品久久精品| 欧美mv和日韩mv的网站| 欧美在线不卡视频| 国产成人亚洲综合色影视| 日本欧美肥老太交大片| 亚洲精品免费看| 欧美国产综合一区二区| 日韩精品一区二区三区中文不卡| 在线精品视频小说1| 大美女一区二区三区| 久久机这里只有精品| 午夜伦理一区二区| 亚洲精品久久久久久国产精华液| 日韩欧美激情在线| 欧美美女bb生活片| 日本韩国欧美国产| 99re这里只有精品6| 国产a精品视频| 韩国欧美国产一区| 蜜桃av噜噜一区| 天涯成人国产亚洲精品一区av| 亚洲综合清纯丝袜自拍| 亚洲视频电影在线| 中文字幕在线观看一区| 国产午夜精品福利| 久久综合久色欧美综合狠狠| 欧美大片在线观看| 日韩欧美一区中文| 亚洲精品日产精品乱码不卡| 国产欧美精品区一区二区三区 | 粉嫩蜜臀av国产精品网站| 激情图片小说一区| 麻豆中文一区二区| 蜜乳av一区二区|