From 4e688f3dabd47a8f97a87d8383e8e03cc9fa6ba1 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 16 Aug 1999 18:37:46 +0000 Subject: [PATCH] Fumihiko Murata Mon, 16 Aug 1999 22:01:17 +0900 - tone control changes --- gamix/ChangeLog | 10 ++++ gamix/catch.c | 14 ++++++ gamix/mkmixer.c | 122 +++++++++++++++++++++++++++++++++++++++++++++--- gamix/probe.c | 1 + 4 files changed, 141 insertions(+), 6 deletions(-) diff --git a/gamix/ChangeLog b/gamix/ChangeLog index ab249b9..a424854 100644 --- a/gamix/ChangeLog +++ b/gamix/ChangeLog @@ -1,3 +1,13 @@ +1999-08-16 Fumihiko Murata + + * catch.c : add element tone control. + * mkmixer.c : add element tone control. + +1999-08-11 Fumihiko Murata + + * catch.c : add 3d effect 7th param. + * mkmixer.c : add 3d effect 7th param. + 1999-08-04 Fumihiko Murata * probe.c: fixed multi haven element problem. diff --git a/gamix/catch.c b/gamix/catch.c index f65c941..329f6d4 100644 --- a/gamix/catch.c +++ b/gamix/catch.c @@ -185,5 +185,19 @@ void s_e_chk( s_element *e ) { gtk_signal_emit_by_name(GTK_OBJECT(e->adj[7]),"value_changed"); } break; + case SND_MIXER_ETYPE_TONE_CONTROL1: + if( e->info.data.tc1.tc & SND_MIXER_TC1_SW ) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(e->w[0]), + e->e.data.tc1.sw); + } + if( e->info.data.tc1.tc & SND_MIXER_TC1_BASS ) { + e->adj[0]->value=-(gfloat)e->e.data.tc1.bass; + gtk_signal_emit_by_name(GTK_OBJECT(e->adj[0]),"value_changed"); + } + if( e->info.data.tc1.tc & SND_MIXER_TC1_TREBLE ) { + e->adj[1]->value=-(gfloat)e->e.data.tc1.treble; + gtk_signal_emit_by_name(GTK_OBJECT(e->adj[1]),"value_changed"); + } + break; } } diff --git a/gamix/mkmixer.c b/gamix/mkmixer.c index 7e3b341..774d7d9 100644 --- a/gamix/mkmixer.c +++ b/gamix/mkmixer.c @@ -2,7 +2,8 @@ #include "gamix.h" static gchar *label_3d[]={ - "wide","volume","center","space","depth","delay","feedback", "depth rear"}; + "wide","volume","center","space","depth","delay","feedback","depth rear"}; +static gchar *label_tone[]={"B","T"}; static void close_callback(GtkWidget *,s_mixer *); static void volume1_callback(GtkAdjustment *,s_element *); @@ -15,6 +16,8 @@ static void mux1_callback(GtkItem *,s_element *); static void mux2_callback(GtkItem *,s_element *); static void sw_3d_callback(GtkToggleButton *,s_element *); static void vol_3d_callback(GtkAdjustment *,s_element *); +static void sw_tone_callback(GtkToggleButton *,s_element *); +static void vol_tone_callback(GtkAdjustment *,s_element *); static void chain_callback2(GtkToggleButton *,s_eelements *); static gint mk_element(s_element *,GtkBox *); @@ -236,12 +239,48 @@ static void vol_3d_callback(GtkAdjustment *adj,s_element *e) { } } +static void sw_tone_callback(GtkToggleButton *b,s_element *e ) { + int err; + + e->e.data.tc1.sw = b->active; + e->e.data.tc1.tc=SND_MIXER_TC1_SW; + err=snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e); +} + +static void vol_tone_callback(GtkAdjustment *adj,s_element *e) { + int i,err,*v,value; + + for( i=0 ; i<2 ; i++ ) { + if( adj == e->adj[i] ) break; + } + v=NULL; + switch( i ) { + case 0: + v=&e->e.data.tc1.bass; + e->e.data.tc1.tc=SND_MIXER_TC1_BASS; + break; + case 1: + v=&e->e.data.tc1.treble; + e->e.data.tc1.tc=SND_MIXER_TC1_TREBLE; + break; + } + value=-(int)adj->value; + if( v ) { + if( value == *v ) return; + *v=value; + } else return; + err=snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e); + if( err<0 ) { + fprintf(stderr,_("Tone controll write error: %s\n"),snd_strerror(err)); + } +} + static void chain_callback2(GtkToggleButton *b,s_eelements *ee ) { ee->chain = b->active; } GtkWidget *make_mixer( gint c_n , gint m_n ) { - int i,j,err; + int i,j,k,err; GtkWidget *mv_box,*m_name; GtkWidget *s_win; GtkWidget *mh_box; @@ -290,8 +329,13 @@ GtkWidget *make_mixer( gint c_n , gint m_n ) { gtk_widget_show(mh_box); for( i=0 ; igroups.groups ; i++ ) { + group = &mixer->group[i]; + k=0; + for( j=0 ; jg.elements ; j++ ) { + if( group->e[j].e.eid.type ) k++; + } + if( k==0 ) mixer->group[i].enable=FALSE; if( mixer->group[i].enable ) { - group = &mixer->group[i]; group->v_frame=frame=gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_OUT); gtk_box_pack_start(GTK_BOX(mh_box),frame, @@ -441,10 +485,33 @@ GtkWidget *make_mixer( gint c_n , gint m_n ) { e->w[NO+2]=NULL; \ e->adj[NO]=NULL; \ } +#define MIX_TONE_VOL(NO,name,min_name,max_name,sname) \ + if( e->info.data.tc1.tc & sname ) { \ + tv_box = gtk_vbox_new(FALSE,2); \ + gtk_box_pack_start(GTK_BOX(ih_box),tv_box,TRUE,TRUE,0); \ + c_l=gtk_label_new(label_tone[NO]); \ + gtk_box_pack_start(GTK_BOX(tv_box),c_l,FALSE,FALSE,0); \ + gtk_widget_show(c_l); \ + e->adj[NO]=(GtkAdjustment *)gtk_adjustment_new( \ + -(gfloat)e->e.data.tc1.name, \ + -(gfloat)e->info.data.tc1.max_name-0.5, \ + -(gfloat)e->info.data.tc1.min_name+0.5, \ + 1.0,4.0,1.0); \ + gtk_signal_connect(GTK_OBJECT(e->adj[NO]), \ + "value_changed",GTK_SIGNAL_FUNC(vol_tone_callback),(gpointer)e);\ + e->w[NO+1]=gtk_vscale_new(GTK_ADJUSTMENT(e->adj[NO])); \ + gtk_scale_set_draw_value(GTK_SCALE(e->w[NO+1]),FALSE); \ + gtk_box_pack_start(GTK_BOX(tv_box), e->w[NO+1],FALSE,FALSE,4); \ + gtk_widget_show(e->w[NO+1]); \ + gtk_widget_show(tv_box); \ + } else { ;\ + e->w[NO+1]=NULL; \ + e->adj[NO]=NULL; \ + } gint mk_element(s_element *e,GtkBox *iv_box) { int i,j,k; - GtkWidget *ih_box; + GtkWidget *ih_box,*tv_box; GtkWidget *menu,*c_l,*item; ih_box=gtk_hbox_new(TRUE,0); @@ -650,14 +717,14 @@ gint mk_element(s_element *e,GtkBox *iv_box) { break; case SND_MIXER_ETYPE_3D_EFFECT1: if( e->w == NULL ) { - e->w = (GtkWidget **)g_malloc(9*sizeof(GtkWidget *)); + e->w = (GtkWidget **)g_malloc(10*sizeof(GtkWidget *)); } if( e->w == NULL ) { fprintf(stderr,nomem_msg); return -1; } if( e->adj == NULL ) { - e->adj=(GtkAdjustment **)g_malloc(7*sizeof(GtkAdjustment *)); + e->adj=(GtkAdjustment **)g_malloc(8*sizeof(GtkAdjustment *)); } if( e->adj==NULL ) { printf(nomem_msg); @@ -708,6 +775,49 @@ gint mk_element(s_element *e,GtkBox *iv_box) { MIX_3D_VOL(6,feedback,min_feedback,max_feedback,SND_MIXER_EFF1_FEEDBACK); MIX_3D_VOL(7,depth_rear,min_depth_rear,max_depth_rear,SND_MIXER_EFF1_DEPTH_REAR); break; + case SND_MIXER_ETYPE_TONE_CONTROL1: + if( e->w == NULL ) { + e->w = (GtkWidget **)g_malloc(3*sizeof(GtkWidget *)); + } + if( e->w == NULL ) { + fprintf(stderr,nomem_msg); + return -1; + } + if( e->adj == NULL ) { + e->adj=(GtkAdjustment **)g_malloc(2*sizeof(GtkAdjustment *)); + } + if( e->adj==NULL ) { + printf(nomem_msg); + return -1; + } + e->e.data.tc1.tc=e->info.data.tc1.tc; + snd_mixer_element_read(cards[e->card].mixer[e->mdev].handle,&e->e); + if( e->info.data.tc1.tc & + (SND_MIXER_TC1_BASS | SND_MIXER_TC1_TREBLE ) ) { + gtk_box_pack_start(iv_box,ih_box,TRUE,TRUE,0); + MIX_TONE_VOL(0,bass,min_bass,max_bass,SND_MIXER_TC1_BASS); + MIX_TONE_VOL(1,treble,min_treble,max_treble,SND_MIXER_TC1_TREBLE); + } + if( e->info.data.tc1.tc & SND_MIXER_TC1_SW ) { + if( e->info.data.tc1.tc & + (SND_MIXER_TC1_BASS | SND_MIXER_TC1_TREBLE ) ) + ih_box=gtk_hbox_new(FALSE,2); + gtk_box_pack_start(iv_box,ih_box,FALSE,FALSE,0); + e->w[0]=gtk_toggle_button_new(); + gtk_box_pack_start(GTK_BOX(ih_box),e->w[0],FALSE,FALSE,4); + gtk_widget_set_usize(e->w[0],10,10); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(e->w[0]) + ,e->e.data.tc1.sw); + gtk_widget_show(e->w[0]); + gtk_signal_connect(GTK_OBJECT(e->w[0]),"toggled", + GTK_SIGNAL_FUNC(sw_tone_callback),(gpointer)e); + c_l=gtk_label_new(_("Enable")); + gtk_box_pack_start(GTK_BOX(ih_box),c_l,FALSE,FALSE,0); + gtk_widget_show(c_l); + gtk_widget_show(ih_box); + } else { + e->w[0]=NULL; + } } gtk_widget_show(ih_box); return 0; diff --git a/gamix/probe.c b/gamix/probe.c index f7d6346..50684ae 100644 --- a/gamix/probe.c +++ b/gamix/probe.c @@ -276,6 +276,7 @@ static gint ab_chk( s_mixer *mixer,snd_mixer_eid_t *eid ) { case SND_MIXER_ETYPE_VOLUME1: case SND_MIXER_ETYPE_VOLUME2: case SND_MIXER_ETYPE_3D_EFFECT1: + case SND_MIXER_ETYPE_TONE_CONTROL1: break; default: return FALSE; -- 2.47.1