From 353d2a5b811777d73317ccd02a85bf63c36a27e5 Mon Sep 17 00:00:00 2001 From: angel Date: Fri, 3 Jun 2005 17:09:08 +0000 Subject: [PATCH] The midiin program accepts an ahxm script as instrument (Closes: #1072). git-svn-id: file:///home/angel/tmp/svn-triptico/ahxm/trunk@650 c87de0a0-a11c-0410-a1e5-866214bc28b2 --- TODO | 3 ++- midiin.c | 51 +++++++++++++++++++++++++++++++++++---------------- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/TODO b/TODO index 67ffce7..8e33e28 100644 --- a/TODO +++ b/TODO @@ -13,7 +13,6 @@ Release Critical Bugs * 1067: Fill the extended commands document. * 1070: Portamento support is still uncertain. * 1071: Add the posibility to start a song from a given measure or time. - * 1072: The instrument in midiin should also be a script. Open Bugs --------- @@ -173,5 +172,7 @@ Closed Thu, 02 Jun 2005 08:44:45 +0200). * 1068: Add vibrato to ss instruments (Thu, 02 Jun 2005 13:28:39 +0200). * 1069: Add vibrato to language (Thu, 02 Jun 2005 17:28:41 +0200). + * 1072: The instrument in midiin should also be an AHXM script + (Fri, 03 Jun 2005 19:08:15 +0200). Email bugs to angel@triptico.com diff --git a/midiin.c b/midiin.c index 7700061..6239a4f 100644 --- a/midiin.c +++ b/midiin.c @@ -54,16 +54,16 @@ char midi_dev[150]="/dev/midi"; int midi_fd=-1; -/* PAT instrument */ -char pat_instrument[150]="samples/acpiano.pat"; - -/* the instrument */ -struct ss_ins i; +/* instrument */ +char instrument[150]="samples/acpiano.pat"; /* the MIDI message */ unsigned char midimsg[128]; int i_msg=0; +/* use the instruments in ss_ins */ +extern struct ss_ins song_ins[256]; + /******************* Code ********************/ @@ -100,11 +100,11 @@ void process_MIDI(void) midimsg[0] &= 0xf0; if(midimsg[0] == MIDI_NOTE_OFF) - ss_ins_note_off(&i, midimsg[1]); + ss_ins_note_off(&song_ins[0], midimsg[1]); else if(midimsg[0] == MIDI_NOTE_ON) { - ss_ins_note_on(&i, midimsg[1], + ss_ins_note_on(&song_ins[0], midimsg[1], ((float)midimsg[2]) / 127.0, midimsg[1]); print_note(midimsg[1]); @@ -139,7 +139,7 @@ void midiin(void) } ss_output_init_frame(sample); - ss_ins_frame(&i, sample); + ss_ins_frame(&song_ins[0], sample); ss_output_write(sample); } } @@ -147,6 +147,8 @@ void midiin(void) int main(int argc, char * argv[]) { + char * ext; + ss_interpolation=1; ss_frequency=44100; ss_master_volume=1; @@ -160,24 +162,41 @@ int main(int argc, char * argv[]) } if(argc > 1) - strcpy(pat_instrument, argv[1]); + strcpy(instrument, argv[1]); if(argc > 2) strcpy(midi_dev, argv[2]); + /* opens the ahxm output driver */ + if(ss_output_open("default", NULL) < 0) + { + printf("Error opening ahxm output driver\n"); + return(4); + } + /* loads the instrument or bangs */ - ss_ins_init(&i); - if(ss_load_pat_file(&i, pat_instrument) < 0) + ss_ins_init(&song_ins[0]); + + if((ext=strchr(instrument, '.')) == NULL) { - printf("Error loading '%s'\n", pat_instrument); + printf("The instrument '%s' doesn't have an extension\n", instrument); return(2); } - /* opens the ahxm output driver */ - if(ss_output_open("default", NULL) < 0) + if(strcmp(ext, ".pat") == 0) { - printf("Error opening ahxm output driver\n"); - return(4); + if(ss_load_pat_file(&song_ins[0], instrument) < 0) + { + printf("Error loading '%s'\n", instrument); + return(2); + } + } + else + { + if(compile_file(instrument)) + return(2); + + ss_song_render(); } /* opens the MIDI channel */ -- 2.11.4.GIT