static int pass_playing_list(int number_of_files, char *list_of_files[]) { int n; for (n = 0; n < number_of_files; n++) { printf("Playing list %s\n", list_of_files[n]); current_file = list_of_files[n]; play_midi_file( list_of_files[n]); } XCloseDisplay(display); exit(0); return 0; }
static void ctl_pass_playing_list(int init_number_of_files, char *init_list_of_files[]) { int current_no,command=RC_NONE,i,j; int32 val; char *p; /* Wait prepare 'interface' */ a_pipe_read(local_buf,sizeof(local_buf)); if (strcmp("READY",local_buf)) return; xaw_ready=1; sprintf(local_buf,"%d", (opt_modulation_wheel<<MODUL_N) | (opt_portamento<<PORTA_N) | (opt_nrpn_vibrato<<NRPNV_N) | (opt_reverb_control<<REVERB_N) | (opt_channel_pressure<<CHPRESSURE_N) | (opt_overlap_voice_allow<<OVERLAPV_N) | (opt_trace_text_meta_event<<TXTMETA_N)); a_pipe_write(local_buf); sprintf(local_buf,"%d",opt_chorus_control); a_pipe_write(local_buf); /* Make title string */ titles=(char **)safe_malloc(init_number_of_files*sizeof(char *)); list_of_files=(char **)safe_malloc(init_number_of_files*sizeof(char *)); for (i=0,j=0;i<init_number_of_files;i++) { if(check_midi_file(init_list_of_files[i]) >= 0) { p=strrchr(init_list_of_files[i],'/'); if (p==NULL) { p=safe_strdup(init_list_of_files[i]); } else p++; list_of_files[j]= safe_strdup(init_list_of_files[i]); titles[j]=(char *)safe_malloc(sizeof(char)*(strlen(p)+ 9)); sprintf(titles[j],"%d. %s",j+1,p); j++; number_of_files = j; } } titles=(char **)safe_realloc(titles,init_number_of_files*sizeof(char *)); list_of_files=(char **)safe_realloc(list_of_files,init_number_of_files*sizeof(char *)); /* Send title string */ sprintf(local_buf,"%d",number_of_files); a_pipe_write(local_buf); for (i=0;i<number_of_files;i++) a_pipe_write(titles[i]); /* Make the table of play sequence */ file_table=(int *)safe_malloc(number_of_files*sizeof(int)); for (i=0;i<number_of_files;i++) file_table[i]=i; /* Draw the title of the first file */ current_no=0; if(number_of_files!=0){ snprintf(local_buf,sizeof(local_buf),"E %s",titles[file_table[0]]); a_pipe_write(local_buf); command=ctl_blocking_read(&val); } /* Main loop */ for (;;) { /* Play file */ if (command==RC_LOAD_FILE&&number_of_files!=0) { char *title; snprintf(local_buf,sizeof(local_buf),"E %s",titles[file_table[current_no]]); a_pipe_write(local_buf); if((title = get_midi_title(list_of_files[file_table[current_no]])) == NULL) title = list_of_files[file_table[current_no]]; snprintf(local_buf,sizeof(local_buf),"e %s", title); a_pipe_write(local_buf); command=play_midi_file(list_of_files[file_table[current_no]]); } else { if (command==RC_CHANGE_VOLUME) amplitude+=val; if (command==RC_JUMP) ; if (command==RC_TOGGLE_SNDSPEC) ; /* Quit timidity*/ if (exitflag & EXITFLG_QUIT) return; /* Stop playing */ if (command==RC_QUIT) { sprintf(local_buf,"T 00:00"); a_pipe_write(local_buf); /* Shuffle the table */ if (randomflag) { if(number_of_files == 0) { randomflag=0; continue; } current_no=0; if (randomflag==1) { shuffle(number_of_files,file_table); randomflag=0; command=RC_LOAD_FILE; continue; } randomflag=0; for (i=0;i<number_of_files;i++) file_table[i]=i; snprintf(local_buf,sizeof(local_buf),"E %s",titles[file_table[current_no]]); a_pipe_write(local_buf); } /* Play the selected file */ if (selectflag) { for (i=0;i<number_of_files;i++) if (file_table[i]==selectflag-1) break; if (i!=number_of_files) current_no=i; selectflag=0; command=RC_LOAD_FILE; continue; } /* After the all file played */ } else if (command==RC_TUNE_END || command==RC_ERROR) { if (current_no+1<number_of_files) { current_no++; command=RC_LOAD_FILE; continue; } else if (exitflag & EXITFLG_AUTOQUIT) { return; /* Repeat */ } else if (repeatflag) { current_no=0; command=RC_LOAD_FILE; continue; /* Off the play button */ } else { a_pipe_write("O"); } /* Play the next */ } else if (command==RC_NEXT) { if (current_no+1<number_of_files) current_no++; command=RC_LOAD_FILE; continue; /* Play the previous */ } else if (command==RC_REALLY_PREVIOUS) { if (current_no>0) current_no--; command=RC_LOAD_FILE; continue; } command=ctl_blocking_read(&val); } } }
static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]) { int i=0; char file_to_play[1000]; int command; int32 val; int retval; motif_ready = 1; m_pipe_int_write(MASTERVOL_MESSAGE); m_pipe_int_write(amplification); /* Pass the list to the interface */ m_pipe_int_write(FILE_LIST_MESSAGE); m_pipe_int_write(number_of_files); for (i=0;i<number_of_files;i++) m_pipe_string_write(list_of_files[i]); /* Ask the interface for a filename to play -> begin to play automatically */ m_pipe_int_write(NEXT_FILE_MESSAGE); command = ctl_blocking_read(&val); /* Main Loop */ for (;;) { if (command==RC_LOAD_FILE) { /* Read a LoadFile command */ m_pipe_string_read(file_to_play); command=play_midi_file(file_to_play); } else { if (command==RC_QUIT) return 0; switch(command) { case RC_ERROR: m_pipe_int_write(ERROR_MESSAGE); retval=1; break; case RC_NONE: break; case RC_NEXT: m_pipe_int_write(NEXT_FILE_MESSAGE); break; case RC_REALLY_PREVIOUS: m_pipe_int_write(PREV_FILE_MESSAGE); break; case RC_TUNE_END: m_pipe_int_write(TUNE_END_MESSAGE); break; case RC_CHANGE_VOLUME: amplification += val; break; default: fprintf(stderr, "PANIC !!! OTHER COMMAND ERROR ?!?! %i" NLS, command); } command = ctl_blocking_read(&val); } } return retval; }
static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]) { int i=0; char local[1000]; int command; int32 val; /* Pass the list to the interface */ k_pipe_printf("LIST %d", number_of_files); for (i=0;i<number_of_files;i++) k_pipe_puts(list_of_files[i]); /* Ask the interface for a filename to play -> begin to play automatically */ /*k_pipe_puts("NEXT");*/ command = ctl_blocking_read(&val); /* Main Loop */ for (;;) { if (command==RC_LOAD_FILE) { /* Read a LoadFile command */ k_pipe_gets(local, sizeof(local)-1); command=play_midi_file(local); } else { if (command==RC_QUIT) { /* if really QUIT */ k_pipe_gets(local, sizeof(local)-1); if (*local == 'Z') return 0; /* only stop playing..*/ } if (command==RC_CHANGE_VOLUME) /* init volume */ amplification += val; switch(command) { case RC_ERROR: k_pipe_puts("ERRR"); break; case RC_NEXT: k_pipe_puts("NEXT"); break; case RC_REALLY_PREVIOUS: k_pipe_puts("PREV"); break; case RC_TUNE_END: k_pipe_puts("TEND"); break; case RC_RESTART: k_pipe_puts("RSTA"); break; } command = ctl_blocking_read(&val); } } return 0; }
static int ctl_pass_playing_list(int number_of_files, char *list_of_files[]) { int current_no,command,i; int32 val; int *file_table; char **titles; char *p; /* Wait prepare 'interface' */ xskin_pipe_read(local_buf,sizeof(local_buf)); if (strcmp("READY",local_buf)) return 0; xskin_ready = 1; /* receive shared memory buffer */ xskin_pipe_read(local_buf, sizeof(local_buf)); if (strcmp("ERROR",local_buf)) { int shmid; isspeanaenabled=1; shmid = atoi(local_buf); speana_buf = (unsigned char *)shmat(shmid,0,0); } else { isspeanaenabled=0; } /* Make title string */ titles=(char **)safe_malloc(number_of_files*sizeof(char *)); for (i=0;i<number_of_files;i++) { p=strrchr(list_of_files[i],'/'); if (p==NULL) { p=list_of_files[i]; } else p++; sprintf(local_buf,"%d. %s",i+1,p); titles[i]=(char *)safe_malloc(strlen(local_buf)+1); strcpy(titles[i],local_buf); } /* Send title string */ sprintf(local_buf,"%d",number_of_files); xskin_pipe_write(local_buf); for (i=0;i<number_of_files;i++) xskin_pipe_write(titles[i]); /* Make the table of play sequence */ file_table=(int *)safe_malloc(number_of_files*sizeof(int)); for (i=0;i<number_of_files;i++) file_table[i]=i; /* Draw the title of the first file */ current_no=0; sprintf(local_buf,"F %s",titles[file_table[0]]); xskin_pipe_write(local_buf); command=ctl_blocking_read(&val); /* Main loop */ for (;;) { /* Play file */ if (command==RC_LOAD_FILE) { sprintf(local_buf,"F %s",titles[file_table[current_no]]); xskin_pipe_write(local_buf); command=play_midi_file(list_of_files[file_table[current_no]]); } else { /* Quit timidity*/ if (exitflag) return 0; /* Stop playing */ if (command==RC_QUIT) { sprintf(local_buf,"T 00:00"); xskin_pipe_write(local_buf); /* Shuffle the table */ if (randomflag) { current_no=0; if (randomflag==1) { shuffle(number_of_files,file_table); randomflag=0; command=RC_LOAD_FILE; continue; } randomflag=0; for (i=0;i<number_of_files;i++) file_table[i]=i; sprintf(local_buf,"F %s",titles[file_table[current_no]]); xskin_pipe_write(local_buf); } /* Play the selected file */ if (selectflag) { for (i=0;i<number_of_files;i++) if (file_table[i]==selectflag-1) break; if (i!=number_of_files) current_no=i; selectflag=0; command=RC_LOAD_FILE; continue; } /* After the all file played */ } else if (command==RC_TUNE_END || command==RC_ERROR) { if (current_no+1<number_of_files) { current_no++; command=RC_LOAD_FILE; continue; /* Repeat */ } else if (repeatflag) { current_no=0; command=RC_LOAD_FILE; continue; /* Off the play button */ } else { xskin_pipe_write("O"); } /* Play the next */ } else if (command==RC_NEXT) { if (current_no+1<number_of_files) current_no++; command=RC_LOAD_FILE; continue; /* Play the previous */ } else if (command==RC_REALLY_PREVIOUS) { if (current_no>0) current_no--; command=RC_LOAD_FILE; continue; } command=ctl_blocking_read(&val); } } return 0; }
static void ctl_pass_playing_list(int number_of_files, char *list_of_files[]) { static int init_flag = 1; int rc; int32 value; extern void timidity_init_aq_buff(void); int errcnt; w32g_add_playlist(number_of_files, list_of_files, 0, ctl.flags & CTLF_AUTOUNIQ, ctl.flags & CTLF_AUTOREFINE); w32g_play_active = 0; errcnt = 0; if(init_flag && w32g_nvalid_playlist() && (ctl.flags & CTLF_AUTOSTART)) // if(play_mode->fd != -1 && // w32g_nvalid_playlist() && (ctl.flags & CTLF_AUTOSTART)) rc = RC_LOAD_FILE; else rc = RC_NONE; init_flag = 0; #ifdef W32G_RANDOM_IS_SHUFFLE w32g_shuffle_playlist_reset(0); #endif while(1) { if(rc == RC_NONE) { if(play_mode->fd != -1) { aq_flush(1); play_mode->close_output(); } rc = w32g_get_rc(&value, 1); } redo: switch(rc) { case RC_NONE: Sleep(1000); break; case RC_LOAD_FILE: /* Play playlist.selected */ if(w32g_nvalid_playlist()) { int selected; w32g_get_playlist_index(&selected, NULL, NULL); w32g_play_active = 1; if(play_mode->fd == -1) { if(play_mode->open_output() == -1) { ctl.cmsg(CMSG_FATAL, VERB_NORMAL, "Couldn't open %s (`%c') %s", play_mode->id_name, play_mode->id_character, play_mode->name ? play_mode->name : ""); break; } aq_setup(); timidity_init_aq_buff(); } if(play_mode->id_character == 'l') w32g_show_console(); if(!DocWndIndependent) { w32g_setup_doc(selected); if(DocWndAutoPopup) w32g_open_doc(1); else w32g_open_doc(2); } { char *p = w32g_get_playlist(selected); if(Panel!=NULL && p!=NULL) strcpy(Panel->filename,p); } SetWrdWndActive(); rc = play_midi_file(w32g_get_playlist(selected)); if(ctl.flags & CTLF_NOT_CONTINUE) w32g_update_playlist(); /* Update mark of error */ if(rc == RC_ERROR) { int nfiles; errcnt++; w32g_get_playlist_index(NULL, &nfiles, NULL); if(errcnt >= nfiles) w32g_msg_box("No MIDI file to play", "TiMidity Warning", MB_OK); } else errcnt = 0; w32g_play_active = 0; goto redo; } break; case RC_ERROR: case RC_TUNE_END: #if 0 if(play_mode->id_character != 'd' || (ctl.flags & CTLF_NOT_CONTINUE)) { #else if(ctl.flags & CTLF_NOT_CONTINUE) { #endif break; } /* FALLTHROUGH */ case RC_NEXT: if(!w32g_nvalid_playlist()) { if(ctl.flags & CTLF_AUTOEXIT) { if(play_mode->fd != -1) aq_flush(0); return; } break; } if(ctl.flags & CTLF_LIST_RANDOM) { #ifdef W32G_RANDOM_IS_SHUFFLE if(w32g_shuffle_playlist_next(!(ctl.flags & CTLF_NOT_CONTINUE))) { #else if(w32g_random_playlist(!(ctl.flags & CTLF_NOT_CONTINUE))) { #endif rc = RC_LOAD_FILE; goto redo; } } else { if(w32g_next_playlist(!(ctl.flags & CTLF_NOT_CONTINUE))) { rc = RC_LOAD_FILE; goto redo; } } { /* end of list */ if(ctl.flags & CTLF_AUTOEXIT) { if(play_mode->fd != -1) aq_flush(0); return; } if((ctl.flags & CTLF_LIST_LOOP) && w32g_nvalid_playlist()) { #ifdef W32G_RANDOM_IS_SHUFFLE if(ctl.flags & CTLF_LIST_RANDOM) { w32g_shuffle_playlist_reset(0); w32g_shuffle_playlist_next(!(ctl.flags & CTLF_NOT_CONTINUE)); } else { #endif w32g_first_playlist(!(ctl.flags & CTLF_NOT_CONTINUE)); #ifdef W32G_RANDOM_IS_SHUFFLE } #endif rc = RC_LOAD_FILE; goto redo; } if((ctl.flags & CTLF_LIST_RANDOM) && w32g_nvalid_playlist()) w32g_shuffle_playlist_reset(0); } break; case RC_REALLY_PREVIOUS: #ifdef W32G_RANDOM_IS_SHUFFLE w32g_shuffle_playlist_reset(0); #endif if(w32g_prev_playlist(!(ctl.flags & CTLF_NOT_CONTINUE))) { rc = RC_LOAD_FILE; goto redo; } break; case RC_QUIT: if(play_mode->fd != -1) aq_flush(1); return; case RC_CHANGE_VOLUME: amplification += value; ctl_master_volume(amplification); break; case RC_TOGGLE_PAUSE: play_pause_flag = !play_pause_flag; break; default: if(rc == RC_STOP) #ifdef W32G_RANDOM_IS_SHUFFLE w32g_shuffle_playlist_reset(0); #endif if(rc >= RC_EXT_BASE) { rc = w32g_ext_control(rc, value); if(rc != RC_NONE) goto redo; } break; } if(mark_apply_setting) PrefSettingApplyReally(); rc = RC_NONE; } } static void ctl_lcd_mark(int flag, int x, int y) { Panel->GSLCD[x][y] = flag; } static void ctl_gslcd(int id) { char *lcd; int i, j, k, data, mask; char tmp[3]; if((lcd = event2string(id)) == NULL) return; if(lcd[0] != ME_GSLCD) return; lcd++; for(i = 0; i < 16; i++) { for(j = 0; j < 4; j++) { tmp[0]= lcd[2 * (j * 16 + i)]; tmp[1]= lcd[2 * (j * 16 + i) + 1]; if(sscanf(tmp, "%02X", &data) != 1) { /* Invalid format */ return; } mask = 0x10; for(k = 0; k < 5; k++) { if(data & mask) { ctl_lcd_mark(1, j * 5 + k, i); } else { ctl_lcd_mark(0, j * 5 + k, i); } mask >>= 1; } } } Panel->gslcd_displayed_flag = 1; Panel->gslcd_last_display_time = get_current_calender_time(); Panel->changed = 1; } static void ctl_channel_note(int ch, int note, int vel) { if (vel == 0) { if (note == Panel->cnote[ch]) Panel->v_flags[ch] = FLAG_NOTE_OFF; Panel->cvel[ch] = 0; } else if (vel > Panel->cvel[ch]) { Panel->cvel[ch] = vel; Panel->cnote[ch] = note; Panel->ctotal[ch] = ( vel * Panel->channel[ch].volume * Panel->channel[ch].expression ) >> 14; // Panel->channel[ch].expression / (127*127); Panel->v_flags[ch] = FLAG_NOTE_ON; } Panel->changed = 1; }