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

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

?? miniarp.c

?? alsa sound devlopment
?? C
字號(hào):
/* miniArp.c by Matthias Nagorni */#include <stdio.h>#include <stdlib.h>#include <signal.h>#include <alsa/asoundlib.h>#define TICKS_PER_QUARTER 128#define MAX_SEQ_LEN        64int queue_id, port_in_id, port_out_id, transpose, bpm0, bpm, tempo, swing, sequence[3][MAX_SEQ_LEN], seq_len;snd_seq_t *seq_handle;char seq_filename[1024];snd_seq_tick_time_t tick;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, "miniArp");  if ((port_out_id = snd_seq_create_simple_port(seq_handle, "miniArp",            SND_SEQ_PORT_CAP_READ|SND_SEQ_PORT_CAP_SUBS_READ,            SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {    fprintf(stderr, "Error creating sequencer port.\n");  }  if ((port_in_id = snd_seq_create_simple_port(seq_handle, "miniArp",            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);}void set_tempo() {  snd_seq_queue_tempo_t *queue_tempo;  snd_seq_queue_tempo_malloc(&queue_tempo);  tempo = (int)(6e7 / ((double)bpm * (double)TICKS_PER_QUARTER) * (double)TICKS_PER_QUARTER);  snd_seq_queue_tempo_set_tempo(queue_tempo, tempo);  snd_seq_queue_tempo_set_ppq(queue_tempo, TICKS_PER_QUARTER);  snd_seq_set_queue_tempo(seq_handle, queue_id, queue_tempo);  snd_seq_queue_tempo_free(queue_tempo);}snd_seq_tick_time_t get_tick() {  snd_seq_queue_status_t *status;  snd_seq_tick_time_t current_tick;    snd_seq_queue_status_malloc(&status);  snd_seq_get_queue_status(seq_handle, queue_id, status);  current_tick = snd_seq_queue_status_get_tick_time(status);  snd_seq_queue_status_free(status);  return(current_tick);}void init_queue() {  queue_id = snd_seq_alloc_queue(seq_handle);  snd_seq_set_client_pool_output(seq_handle, (seq_len<<1) + 4);}void clear_queue() {  snd_seq_remove_events_t *remove_ev;  snd_seq_remove_events_malloc(&remove_ev);  snd_seq_remove_events_set_queue(remove_ev, queue_id);  snd_seq_remove_events_set_condition(remove_ev, SND_SEQ_REMOVE_OUTPUT | SND_SEQ_REMOVE_IGNORE_OFF);  snd_seq_remove_events(seq_handle, remove_ev);  snd_seq_remove_events_free(remove_ev);}void arpeggio() {  snd_seq_event_t ev;  int l1;  double dt;   for (l1 = 0; l1 < seq_len; l1++) {    dt = (l1 % 2 == 0) ? (double)swing / 16384.0 : -(double)swing / 16384.0;    snd_seq_ev_clear(&ev);    snd_seq_ev_set_note(&ev, 0, sequence[2][l1] + transpose, 127, sequence[1][l1]);    snd_seq_ev_schedule_tick(&ev, queue_id,  0, tick);    snd_seq_ev_set_source(&ev, port_out_id);    snd_seq_ev_set_subs(&ev);    snd_seq_event_output_direct(seq_handle, &ev);    tick += (int)((double)sequence[0][l1] * (1.0 + dt));  }  snd_seq_ev_clear(&ev);  ev.type = SND_SEQ_EVENT_ECHO;   snd_seq_ev_schedule_tick(&ev, queue_id,  0, tick);  snd_seq_ev_set_dest(&ev, snd_seq_client_id(seq_handle), port_in_id);  snd_seq_event_output_direct(seq_handle, &ev);}void midi_action() {  snd_seq_event_t *ev;  do {    snd_seq_event_input(seq_handle, &ev);    switch (ev->type) {      case SND_SEQ_EVENT_ECHO:        arpeggio();         break;      case SND_SEQ_EVENT_NOTEON:        clear_queue();        transpose = ev->data.note.note - 60;        tick = get_tick();        arpeggio();        break;              case SND_SEQ_EVENT_CONTROLLER:        if (ev->data.control.param == 1) {                     bpm = (int)((double)bpm0 * (1.0 + (double)ev->data.control.value / 127.0));          set_tempo();        }         break;      case SND_SEQ_EVENT_PITCHBEND:        swing = (double)ev->data.control.value;                break;    }    snd_seq_free_event(ev);  } while (snd_seq_event_input_pending(seq_handle, 0) > 0);}void parse_sequence() {  FILE *f;  char c;    if (!(f = fopen(seq_filename, "r"))) {    fprintf(stderr, "Couldn't open sequence file %s\n", seq_filename);    exit(1);  }  seq_len = 0;  while((c = fgetc(f))!=EOF) {    switch (c) {      case 'c':         sequence[2][seq_len] = 0; break;       case 'd':         sequence[2][seq_len] = 2; break;      case 'e':         sequence[2][seq_len] = 4; break;      case 'f':         sequence[2][seq_len] = 5; break;      case 'g':         sequence[2][seq_len] = 7; break;      case 'a':         sequence[2][seq_len] = 9; break;      case 'h':         sequence[2][seq_len] = 11; break;    }                        c =  fgetc(f);    if (c == '#') {      sequence[2][seq_len]++;      c =  fgetc(f);    }    sequence[2][seq_len] += 12 * atoi(&c);    c =  fgetc(f);    sequence[1][seq_len] = TICKS_PER_QUARTER / atoi(&c);    c =  fgetc(f);    sequence[0][seq_len] = TICKS_PER_QUARTER / atoi(&c);        seq_len++;  }  fclose(f);}void sigterm_exit(int sig) {  clear_queue();  sleep(2);  snd_seq_stop_queue(seq_handle, queue_id, NULL);  snd_seq_free_queue(seq_handle, queue_id);  exit(0);}int main(int argc, char *argv[]) {  int npfd, l1;  struct pollfd *pfd;      if (argc < 3) {     fprintf(stderr, "\n\nminiArp <beats per minute> <sequence file>\n");    exit(1);  }  bpm0 = atoi(argv[1]);  bpm = bpm0;  strcpy(seq_filename, argv[2]);   parse_sequence();  seq_handle = open_seq();  init_queue();  set_tempo();  arpeggio();  snd_seq_start_queue(seq_handle, queue_id, NULL);  snd_seq_drain_output(seq_handle);  npfd = snd_seq_poll_descriptors_count(seq_handle, POLLIN);  pfd = (struct pollfd *)alloca(npfd * sizeof(struct pollfd));  snd_seq_poll_descriptors(seq_handle, pfd, npfd, POLLIN);  transpose = 0;  swing = 0;  tick = 0;  signal(SIGINT, sigterm_exit);            signal(SIGTERM, sigterm_exit);    arpeggio();  while (1) {    if (poll(pfd, npfd, 100000) > 0) {      for (l1 = 0; l1 < npfd; l1++) {        if (pfd[l1].revents > 0) midi_action();       }    }    }}                             

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
xvideos.蜜桃一区二区| 99精品桃花视频在线观看| 亚洲视频你懂的| 日本一区二区三区视频视频| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 欧美午夜宅男影院| 91福利在线导航| 在线观看亚洲一区| 欧美高清性hdvideosex| 日韩手机在线导航| 国产亚洲欧洲997久久综合| 国产日韩av一区| 自拍偷在线精品自拍偷无码专区| 亚洲欧美另类图片小说| 亚洲一卡二卡三卡四卡无卡久久| 五月婷婷另类国产| 青青草视频一区| 国产高清不卡二三区| 91美女在线观看| 欧美日韩在线播| 日韩精品在线网站| 国产精品久久久久桃色tv| 一区二区三区日韩欧美| 亚洲午夜视频在线| 极品少妇xxxx精品少妇| 99国产精品一区| 日韩一区二区三区电影在线观看| 欧美激情综合五月色丁香 | 717成人午夜免费福利电影| 精品剧情v国产在线观看在线| 久久久亚洲精品一区二区三区| 中文字幕不卡在线| 日韩高清一区二区| 99国产精品99久久久久久| 欧美一区二区三区喷汁尤物| 久久午夜电影网| 亚洲猫色日本管| 国精产品一区一区三区mba桃花 | 欧美精选午夜久久久乱码6080| 欧美一级电影网站| 一区二区在线观看av| 麻豆国产一区二区| 在线观看亚洲一区| 中文字幕第一区综合| 久草这里只有精品视频| 色婷婷av一区二区三区大白胸 | 欧美日韩高清影院| 亚洲国产精品高清| 久久99精品久久久久久| 欧美剧情电影在线观看完整版免费励志电影 | 日日夜夜精品视频天天综合网| 国产成人免费视频一区| 正在播放一区二区| 亚洲午夜久久久久久久久久久| 国产91精品久久久久久久网曝门| 91麻豆精品国产自产在线| 亚洲人快播电影网| 懂色av中文一区二区三区| 欧美成人一区二区三区在线观看 | 国产另类ts人妖一区二区| 欧美三区在线观看| 亚洲女厕所小便bbb| 国产精品白丝av| 久久综合狠狠综合久久综合88| 亚洲国产欧美在线| 色婷婷国产精品久久包臀| 国产精品第一页第二页第三页| 韩国v欧美v日本v亚洲v| 欧美一区二区三区精品| 天天色综合成人网| 欧美艳星brazzers| 性做久久久久久久免费看| 色婷婷精品久久二区二区蜜臀av| 自拍av一区二区三区| 成人福利在线看| 中文字幕欧美一| 91同城在线观看| 亚洲精品国产一区二区精华液 | 国产精品午夜在线| 国产不卡高清在线观看视频| 精品99一区二区三区| 欧美a级一区二区| 久久先锋资源网| 国产成人午夜99999| 中文字幕不卡在线观看| 99re这里只有精品6| 一区二区三区四区激情| 欧美日韩一区二区在线观看视频 | 青娱乐精品视频在线| 制服丝袜在线91| 国产另类ts人妖一区二区| 国产色一区二区| 日本道免费精品一区二区三区| 一区二区三区中文在线观看| 欧美丝袜丝nylons| 六月丁香婷婷色狠狠久久| 欧美精品一区二区三区蜜桃 | 91浏览器在线视频| 亚洲超碰97人人做人人爱| 日韩欧美一级在线播放| 国产精品一区二区三区乱码| 国产精品传媒在线| 91.com在线观看| 国产成人午夜视频| 亚洲高清一区二区三区| 久久综合网色—综合色88| 91国偷自产一区二区开放时间 | 色悠悠久久综合| 蜜桃视频在线观看一区二区| 国产欧美久久久精品影院| 在线一区二区观看| 国内精品视频一区二区三区八戒| 国产精品毛片久久久久久| 欧美日韩精品系列| 成人性生交大片免费看在线播放 | 精品国产在天天线2019| 粉嫩欧美一区二区三区高清影视| 亚洲一区二区精品视频| 欧美成人一区二区三区片免费| 99这里都是精品| 日韩精品欧美精品| ...中文天堂在线一区| 91精品国产91久久综合桃花| 成人动漫av在线| 日韩av电影天堂| 亚洲欧洲日产国码二区| 精品国产第一区二区三区观看体验 | 国产经典欧美精品| 午夜精品久久久| 综合精品久久久| 国产精品视频一二| 精品国产凹凸成av人网站| 欧美日韩电影一区| 色94色欧美sute亚洲线路一ni| 国产精品 欧美精品| 蜜臀av一级做a爰片久久| 亚洲成人一区二区在线观看| 国产精品成人在线观看| 久久精品夜色噜噜亚洲a∨| 欧美一级免费大片| 欧美日韩卡一卡二| 在线观看亚洲一区| 欧美色图片你懂的| 欧美亚洲高清一区| 欧美丝袜丝nylons| 欧美日韩精品一区二区天天拍小说 | 亚洲人吸女人奶水| 亚洲欧美在线视频观看| 国产日韩视频一区二区三区| 欧美三级在线播放| 欧美系列亚洲系列| 91美女视频网站| 成人动漫中文字幕| 国产成人丝袜美腿| 国产精品18久久久久久vr | 欧美精品xxxxbbbb| 粉嫩av一区二区三区| 黑人巨大精品欧美一区| 亚洲欧美电影一区二区| 国产精品丝袜久久久久久app| 久久人人爽人人爽| 欧美国产一区二区在线观看| 国产人成亚洲第一网站在线播放| 国产精品天天看| 亚洲另类一区二区| 中文字幕中文在线不卡住| 91精品国产美女浴室洗澡无遮挡| 欧美日韩国产一二三| 欧美日韩国产色站一区二区三区| 欧美日韩高清影院| 99久久免费视频.com| 99久久精品久久久久久清纯| 蜜桃在线一区二区三区| 国产一区视频在线看| 激情久久五月天| 国产一区二区三区在线观看精品 | 国产精品丝袜91| 亚洲免费av网站| 亚洲第一成人在线| 午夜视频在线观看一区二区| 亚洲国产成人91porn| 亚洲乱码精品一二三四区日韩在线 | 中文字幕电影一区| 一区免费观看视频| 秋霞电影一区二区| 国产精品1区二区.| 色综合激情五月| 2019国产精品| 国产精品日产欧美久久久久| 一级特黄大欧美久久久| 蜜臂av日日欢夜夜爽一区| 成人动漫精品一区二区| 欧美人妖巨大在线| 国产精品欧美一区二区三区| 一区二区三区在线免费视频| 国内精品在线播放| 在线电影国产精品| 中文字幕不卡在线| 精品无码三级在线观看视频| 国产乱人伦偷精品视频免下载|