// // Programmer: Craig Stuart Sapp // Creation Date: Fri Dec 18 23:05:42 PST 1998 // Last Modified: Thu Dec 24 15:10:29 PST 1998 // Filename: ...linuxmidi/output/playnotes.c // Syntax: C // $Smake: gcc -O3 -Wall -o %b %f && strip %b // #include #include #include #include #include // global variables: int seqfd = -1; // sequencer file descriptor const char* dev = "/dev/sequencer"; // name of sequencer device int status; // for error checking int device = 0; // for selecting which MIDI output to use // function declarations: void playnotes(void); int main(int argc, char** argv) { int numMidi = 0; // number of available MIDI outputs seqfd = open(dev, O_WRONLY, 0); if (seqfd < 0) { printf("Error: cannot open %s\n", dev); exit(1); } if (argc >= 2) { device = argv[1][0] - '0'; } status = ioctl(seqfd, SNDCTL_SEQ_NRMIDIS, &numMidi); if (status != 0) { printf("Error: cannot access MIDI devices on soundcard\n"); exit(1); } printf("\nThere are: %d MIDI output devices available\n", numMidi); if (device >= numMidi) { printf("You specified an invalid MIDI device\n"); exit(1); } playnotes(); close(seqfd); return 0; } void playnotes(void) { int userInput = 0; unsigned char outpacket[12]; outpacket[0] = SEQ_MIDIPUTC; outpacket[1] = 0x90; // note-on command outpacket[2] = device; outpacket[3] = 0; outpacket[4] = SEQ_MIDIPUTC; // outpacket[5] will be the keynumber outpacket[6] = device; outpacket[7] = 0; outpacket[8] = SEQ_MIDIPUTC; outpacket[9] = 127; // attack velocity outpacket[10] = device; outpacket[11] = 0; printf("Device set to: %d\n", device); printf("Enter a key number larger than 127 to exit\n"); while (userInput < 128) { printf("Enter note number to send out MIDI port: "); scanf("%d",&userInput); if (userInput < 128 && userInput >= 0) { outpacket[5] = userInput; write(seqfd, outpacket, 12); } } }