diff -urN midi_prog-/Makefile midi_prog/Makefile --- midi_prog-/Makefile 2014-04-24 23:00:00.000000000 +0900 +++ midi_prog/Makefile 2014-04-25 22:00:00.000000000 +0900 @@ -1,6 +1,6 @@ CC = gcc LIB = -lm -lpthread -L../cui -lcui -TARG = prog34 +TARG = prog35 OBJS = main.o vcf.o ch.o delay.o stat.o note.o env.o tone.o filter.o lfo.o modu.o vco.o wave.o out.o rd.o util.o OBJS += cui_tone.o CFLAGS += -Wall -I.. diff -urN midi_prog-/cui_tone.c midi_prog/cui_tone.c --- midi_prog-/cui_tone.c 2014-04-24 23:00:00.000000000 +0900 +++ midi_prog/cui_tone.c 2014-04-25 22:00:00.000000000 +0900 @@ -3,28 +3,78 @@ #include "cui/scpanel.h" #include "cui/button.h" #include "cui/menu.h" +#include "cui/num.h" #include "cui/handler.h" #include "tone.h" +#include "ch.h" + +/* from tone.c */ +#define CH_PROG(ch) ( (ch) == 9 ? 0 : ch_inf[ch].prog ) static int -ch_hdr(cui ch, int evt, int val, void *prm) +note_i_hdr(cui obj, int evt, int val, void *prm) { /* CUI_EVT_BUTTON */ cui sheet = (cui)prm; + cui ch = cui_name_child(sheet, "ch"); + int ch_v = cui_menu_int_get(ch); + cui note = cui_name_child(sheet, "note"); + int note_v = cui_num_get(note); cui bs_ch = cui_name_child(sheet, "bs_ch"); - cui wave1 = cui_name_child(bs_ch, "wave1"); - cui wave2 = cui_name_child(bs_ch, "wave2"); - int n; - struct tone_compo_rec *tcr = tone_compo_get(val, -1, &n); + cui tone_i = cui_name_child(bs_ch, "tone_i"); + int i, n; + struct tone_compo_rec *tcr = tone_compo_get(ch_v, note_v, &n); struct tone_rec *tr; + cui bs_vco = cui_name_child(bs_ch, "bs_vco"); + cui wave1 = cui_name_child(bs_vco, "wave1"); + cui wave2 = cui_name_child(bs_vco, "wave2"); + cui tune = cui_name_child(bs_vco, "tune"); + cui mix = cui_name_child(bs_vco, "mix"); - cui_show_hide(bs_ch, tcr != NULL); - if(tcr == NULL) return TRUE; + i = cui_menu_int_get(tone_i); + tr = tcr[i].tone; - tr = tcr[0].tone; cui_menu_popup_vp_set(wave1, &tr->vco.wave1); cui_menu_popup_vp_set(wave2, &tr->vco.wave2); + cui_num_vp_set(tune, &tr->vco.tune); + cui_num_dbl_vp_set(mix, &tr->vco.mix); + + return TRUE; +} + +static int +ch_note_hdr(cui obj, int evt, int val, void *prm) +{ + /* CUI_EVT_BUTTON */ + + cui sheet = (cui)prm; + cui ch = cui_name_child(sheet, "ch"); + int ch_v = cui_menu_int_get(ch); + cui note = cui_name_child(sheet, "note"); + int note_v = cui_num_get(note); + cui bs_ch = cui_name_child(sheet, "bs_ch"); + cui prog = cui_name_child(bs_ch, "prog"); + static char prog_buf[16]; + cui tone_n = cui_name_child(bs_ch, "tone_n"); + static char tone_n_buf[16]; + cui tone_i = cui_name_child(bs_ch, "tone_i"); + int i, n; + struct tone_compo_rec *tcr = tone_compo_get(ch_v, note_v, &n); + + cui_show_hide(bs_ch, tcr != NULL); + if(tcr == NULL) return TRUE; + + sprintf(prog_buf, "prog=%d", CH_PROG(val)); + cui_label_str_set(prog, prog_buf); + + sprintf(tone_n_buf, "tone_n=%d", n); + cui_label_str_set(tone_n, tone_n_buf); + + cui_menu_int_min_max_set(tone_i, 0, n-1); + + i = cui_menu_int_get(tone_i); + cui_handler_call(tone_i, CUI_EVT_BUTTON, i); return TRUE; } @@ -35,29 +85,55 @@ char **av = (char **)arg; int init_ret = cui_init(av); - cui root = cui_scpanel_new(NULL, 0, 0, 20, 8, "cui_tone"); + cui root = cui_scpanel_new(NULL, 0, 0, 40, 8, "cui_tone"); cui sheet = cui_scpanel_sheet_get(root); + cui ch, note, bs_ch, note_i, bs_vco; - cui ch = cui_menu_int_new(NULL, 0, 0, 2+1, 0, 0, 15); - cui dmy1 = cui_wlb_new(sheet, 0, 0, "ch ", ch, NULL); - - cui bs_ch = cui_base_new(sheet, 0, CUI_CHILD_Y2+1, 0, 0); - char *lst[] = { "sin", "saw", "square", "noise", NULL }; + char *wave_lst[] = { "sin", "saw", "square", "noise", NULL }; + + ch = cui_menu_int_new(sheet, 0, 0, 2+1, 0, 0, 15); + cui_wlb_name_new(sheet, "ch ", "ch", NULL); + note = cui_num_new(sheet, CUI_CHILD_X2+1, CUI_CHILD_Y, 3+3, 69, 0, 127, -1); + cui_wlb_name_new(sheet, "note ", "note", NULL); + + bs_ch = cui_base_new(sheet, 0, CUI_CHILD_Y2+1, 0, 0); bs_ch->name = "bs_ch"; - cui_menu_popup_new(bs_ch, 0, 0, -1, lst, 0)->name = "wave1"; - cui_menu_popup_new(bs_ch, 0, CUI_CHILD_Y2, -1, lst, 0)->name = "wave2"; + + cui_label_new(bs_ch, 0, 0, "prog= ")->name = "prog"; + cui_label_new(bs_ch, CUI_CHILD_X2+1, CUI_CHILD_Y, "tone_n= ")->name = "tone_n"; + + note_i = cui_menu_int_new(bs_ch, CUI_CHILD_X2+1, CUI_CHILD_Y, 2+1, 0, 0, 0); + cui_wlb_name_new(bs_ch, "idx ", "tone_i", NULL); + + bs_vco = cui_base_new(bs_ch, 0, CUI_CHILD_Y2, 0, 0); + bs_vco->name = "bs_vco"; + + cui_menu_popup_new(bs_vco, 0, 0, -1, wave_lst, 0); + cui_wlb_name_new(bs_vco, "wave1 ", "wave1", NULL); + + cui_menu_popup_new(bs_vco, CUI_CHILD_X2+3, CUI_CHILD_Y, -1, wave_lst, 0); + cui_wlb_name_new(bs_vco, "wave2 ", "wave2", NULL); + cui_num_new(bs_vco, CUI_CHILD_X, CUI_CHILD_Y2, 6+3, 0, -24000, 24000, -1); + cui_wlb_name_new(bs_vco, "tune ", "tune", " cent"); + + cui_num_dbl_new(bs_vco, CUI_CHILD_X, CUI_CHILD_Y2, 4+3, 0, 0, 1, 0.01, -1); + cui_wlb_name_new(bs_vco, "mix ", "mix", NULL); + + cui_wh_fit(bs_vco); cui_hide(bs_ch); cui_wh_fit(bs_ch); cui_wh_fit(sheet); - cui_bind(ch, CUI_EVT_BUTTON, ch_hdr, sheet); + cui_bind(ch, CUI_EVT_BUTTON, ch_note_hdr, sheet); + cui_bind(note, CUI_EVT_BUTTON, ch_note_hdr, sheet); + cui_bind(note_i, CUI_EVT_BUTTON, note_i_hdr, sheet); + cui_handler_call(ch, CUI_EVT_BUTTON, 0); cui_main(root, NULL); - dmy1 = NULL; cui_fini(init_ret); return NULL; } diff -urN midi_prog-/tone.c midi_prog/tone.c --- midi_prog-/tone.c 2014-01-25 00:00:00.000000000 +0900 +++ midi_prog/tone.c 2014-04-25 22:00:00.000000000 +0900 @@ -141,7 +141,8 @@ },{ PROG_DRUM, 57, /* crash cymbal 2 */ (struct tone_compo_rec []){ - { &drum_tone_inf[5], 85, 1.0 }, { NULL, } + { &drum_tone_inf[5], 85, 1.0 }, + { NULL, } } },{ 48, -1, /* timpani */ @@ -151,6 +152,7 @@ },{ 50, -1, /* strings ensamble 2 */ (struct tone_compo_rec []){ + { &tone_inf[2], -1, 1.0 }, /* test */ { &tone_inf[0], -1, 1.0 }, { NULL, } } },{