int main (int argc, char *argv[]) { int nfds, seq_nfds, l1; struct pollfd *pfds; if (argc < 6) { fprintf(stderr, "LinzerSchnitteMIDI <hw:0,0,1> <attack> <decay> <sustain> <release>\n"); exit(1); } attack = atof(argv[2]); decay = atof(argv[3]); sustain = atof(argv[4]); release = atof(argv[5]); /* polyphony = atoi(argv[6]); buffersize = atoi(argv[7]); outputvolume = atoi(argv[8]); firstnotefreq = atoi(argv[9]); freqchannelwidth = atoi(argv[10]); */ 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); connect2MidiThroughPort(seq_handle); 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 ! increase buffer \n"); snd_pcm_prepare(playback_handle); } } } } } snd_pcm_close (playback_handle); snd_seq_close (seq_handle); free(buf); return (0); }
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); }
void* startSnd(void *arg){ sndbuf = (short *) malloc (2 * sizeof (short) * BUFSAMPS); //each sample is 2 chans, 2 byte shorts if(!sndbuf){free(snddat);return NULL;} pcm_handle = open_pcm("hw:0,0"); if(!pcm_handle){free(sndbuf);free(snddat);return NULL;} memset(sndbuf, 0, 2 * sizeof (short) * BUFSAMPS); int nfds = snd_pcm_poll_descriptors_count (pcm_handle); struct pollfd *pfds = (struct pollfd *)alloca(sizeof(struct pollfd) * nfds); snd_pcm_poll_descriptors(pcm_handle, pfds, nfds); while(!bQuit){ if (poll (pfds, nfds, 1000) > 0) { int i; for (i = 0; i < nfds; i++) { if (pfds[i].revents > 0) { if (playback_callback(BUFSAMPS) < BUFSAMPS) snd_pcm_prepare(pcm_handle); } } } } snd_pcm_close(pcm_handle); free(sndbuf);free(snddat); return NULL; }
int main (int argc, char *argv[]) { int nfds, seq_nfds, l1; //int key; //key=0; char *hwdevice; struct pollfd *pfds; /* if (argc < 2) { fprintf(stderr, "LinzerSchnitteMIDI <hw:0,0,1> <attack> <decay> <sustain> <release>\n"); exit(1); } */ initscr(); /* start the curses setup */ atexit(do_endwin); keypad(stdscr, TRUE); noecho(); scrollok(stdscr, TRUE); printw("Welcome to LinzerSchnitte\n"); refresh(); start_color(); init_pair(1, COLOR_RED, COLOR_BLACK); /* end the curses setup */ /* Set default */ hwdevice = "hw:0,0,1"; attack = 0.001; decay = 0.001; sustain = 1; release = 0.001; if (argc > 1) { hwdevice = argv[1]; } /* attack = atof(argv[2]); decay = atof(argv[3]); sustain = atof(argv[4]); release = atof(argv[5]); */ buf = (short *) malloc (2 * sizeof (short) * BUFSIZE); playback_handle = open_pcm(hwdevice); 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); connect2MidiThroughPort(seq_handle); 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 ! increase buffer \n"); snd_pcm_prepare(playback_handle); } } } } } snd_pcm_close (playback_handle); snd_seq_close (seq_handle); free(buf); return (0); }