From: John Melton - G0ORX/N6LYT <john.d.melton@googlemail.com> Date: Sat, 10 Dec 2016 09:47:25 +0000 (+0000) Subject: CHanged Audio menu to remove line in and boost when local microphone selected. Change... X-Git-Url: https://git.rkrishnan.org/pf/htmlfontify-example.html?a=commitdiff_plain;h=3a82b2f23691cab79d1e1406bb9d099230fb3050;p=pihpsdr.git CHanged Audio menu to remove line in and boost when local microphone selected. Changes to VOX for local microphone in old and new protocols. --- diff --git a/audio_menu.c b/audio_menu.c index cfea7e2..bda85d3 100644 --- a/audio_menu.c +++ b/audio_menu.c @@ -33,6 +33,9 @@ static GtkWidget *menu_b=NULL; static GtkWidget *dialog=NULL; +GtkWidget *linein_b; +GtkWidget *micboost_b; + static gboolean close_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) { if(dialog!=NULL) { gtk_widget_destroy(dialog); @@ -82,14 +85,20 @@ fprintf(stderr,"local_microphone_cb: %d\n",local_microphone); if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) { if(audio_open_input()==0) { local_microphone=1; + gtk_widget_hide(linein_b); + gtk_widget_hide(micboost_b); } else { local_microphone=0; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE); + gtk_widget_show(linein_b); + gtk_widget_show(micboost_b); } } else { if(local_microphone) { local_microphone=0; audio_close_input(); + gtk_widget_show(linein_b); + gtk_widget_show(micboost_b); } } } @@ -138,20 +147,20 @@ void audio_menu(GtkWidget *parent) { int row=0; if(protocol==ORIGINAL_PROTOCOL || protocol==NEW_PROTOCOL) { - GtkWidget *linein_b=gtk_check_button_new_with_label("Mic Line In (ACC connector)"); + linein_b=gtk_check_button_new_with_label("Mic Line In (ACC connector)"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (linein_b), mic_linein); - gtk_widget_show(linein_b); gtk_grid_attach(GTK_GRID(grid),linein_b,0,++row,1,1); g_signal_connect(linein_b,"toggled",G_CALLBACK(linein_cb),NULL); - GtkWidget *micboost_b=gtk_check_button_new_with_label("Mic Boost (radio only)"); + micboost_b=gtk_check_button_new_with_label("Mic Boost (radio only)"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (micboost_b), mic_boost); - gtk_widget_show(micboost_b); gtk_grid_attach(GTK_GRID(grid),micboost_b,0,++row,1,1); g_signal_connect(micboost_b,"toggled",G_CALLBACK(micboost_cb),NULL); + } + if(n_input_devices>0) { GtkWidget *local_microphone_b=gtk_check_button_new_with_label("Local Microphone Input"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (local_microphone_b), local_microphone); @@ -206,5 +215,9 @@ void audio_menu(GtkWidget *parent) { gtk_widget_show_all(dialog); + if(local_microphone && (protocol==ORIGINAL_PROTOCOL || protocol==NEW_PROTOCOL)) { + gtk_widget_hide(linein_b); + gtk_widget_hide(micboost_b); + } } diff --git a/new_protocol.c b/new_protocol.c index d324175..e4c4f01 100644 --- a/new_protocol.c +++ b/new_protocol.c @@ -56,6 +56,7 @@ #ifdef FREEDV #include "freedv.h" #endif +#include "vox.h" #define min(x,y) (x<y?x:y) @@ -958,15 +959,15 @@ static void process_freedv_rx_buffer() { int demod_samples; for(j=0;j<outputsamples;j++) { if(freedv_samples==0) { - leftaudiosample=(short)(audiooutputbuffer[j*2]*32767.0*volume); - rightaudiosample=(short)(audiooutputbuffer[(j*2)+1]*32767.0*volume); + leftaudiosample=(short)(audiooutputbuffer[j*2]*32767.0); + rightaudiosample=(short)(audiooutputbuffer[(j*2)+1]*32767.0); demod_samples=demod_sample_freedv(leftaudiosample); if(demod_samples!=0) { int s; int t; for(s=0;s<demod_samples;s++) { if(freedv_sync) { - leftaudiosample=rightaudiosample=(short)((double)speech_out[s]*volume); + leftaudiosample=rightaudiosample=(short)((double)speech_out[s]); } else { leftaudiosample=rightaudiosample=0; } @@ -1015,8 +1016,8 @@ static void process_rx_buffer() { leftaudiosample=0; rightaudiosample=0; } else { - leftaudiosample=(short)(audiooutputbuffer[j*2]*32767.0*volume); - rightaudiosample=(short)(audiooutputbuffer[(j*2)+1]*32767.0*volume); + leftaudiosample=(short)(audiooutputbuffer[j*2]*32767.0); + rightaudiosample=(short)(audiooutputbuffer[(j*2)+1]*32767.0); #ifdef PSK if(mode==modePSK) { @@ -1206,7 +1207,7 @@ void new_protocol_process_local_mic(unsigned char *buffer,int le) { } } else { #endif - if(mode==modeCWL || mode==modeCWU || tune || !isTransmitting()) { + if(mode==modeCWL || mode==modeCWU || tune /*|| !isTransmitting()*/) { micinputbuffer[micsamples*2]=0.0; micinputbuffer[(micsamples*2)+1]=0.0; } else { diff --git a/old_protocol.c b/old_protocol.c index abbc4a8..0d15e86 100644 --- a/old_protocol.c +++ b/old_protocol.c @@ -129,6 +129,7 @@ static int running; static long ep4_sequence; static int samples=0; +static int mic_samples=0; #ifdef FREEDV static int freedv_samples=0; static int freedv_divisor=6; @@ -621,7 +622,7 @@ static void full_rx_buffer() { int j; int error; - if(vox_enabled) { + if(vox_enabled && !local_microphone) { switch(mode) { case modeLSB: case modeUSB: @@ -669,7 +670,7 @@ static void full_tx_buffer() { int error; double gain=32767.0; // 2^16-1 - if(vox_enabled && vox) { + if(vox_enabled && (vox || local_microphone)) { update_vox(micinputbuffer,BUFFER_SIZE); } @@ -715,7 +716,7 @@ void old_protocol_process_local_mic(unsigned char *buffer,int le) { double mic_sample_double; double gain=pow(10.0, mic_gain / 20.0); - if(isTransmitting()) { + //if(isTransmitting()) { b=0; int i,j,s; for(i=0;i<720;i++) { @@ -736,14 +737,14 @@ void old_protocol_process_local_mic(unsigned char *buffer,int le) { for(j=0;j<freedv_divisor;j++) { // 8K to 48K mic_sample=mod_out[s]; mic_sample_double = (1.0 / 2147483648.0) * (double)(mic_sample<<16); - micinputbuffer[samples*2]=mic_sample_double; - micinputbuffer[(samples*2)+1]=mic_sample_double; - iqinputbuffer[0][samples*2]=0.0; - iqinputbuffer[0][(samples*2)+1]=0.0; - samples++; - if(samples==buffer_size) { + micinputbuffer[mic_samples*2]=mic_sample_double; + micinputbuffer[(mic_samples*2)+1]=mic_sample_double; + //iqinputbuffer[0][samples*2]=0.0; + //iqinputbuffer[0][(samples*2)+1]=0.0; + mic_samples++; + if(mic_samples==buffer_size) { full_tx_buffer(); - samples=0; + mic_samples=0; } } } @@ -756,28 +757,25 @@ void old_protocol_process_local_mic(unsigned char *buffer,int le) { } else { #endif if(mode==modeCWL || mode==modeCWU || tune) { - micinputbuffer[samples*2]=0.0; - micinputbuffer[(samples*2)+1]=0.0; + micinputbuffer[mic_samples*2]=0.0; + micinputbuffer[(mic_samples*2)+1]=0.0; } else { - micinputbuffer[samples*2]=mic_sample_double; - micinputbuffer[(samples*2)+1]=mic_sample_double; + micinputbuffer[mic_samples*2]=mic_sample_double; + micinputbuffer[(mic_samples*2)+1]=mic_sample_double; } - iqinputbuffer[0][samples*2]=0.0; - iqinputbuffer[0][(samples*2)+1]=0.0; - samples++; - if(samples==buffer_size) { +// iqinputbuffer[0][samples*2]=0.0; +// iqinputbuffer[0][(samples*2)+1]=0.0; + mic_samples++; + if(mic_samples==buffer_size) { full_tx_buffer(); - samples=0; + mic_samples=0; } #ifdef FREEDV } #endif } - } else { - if(vox_enabled) { - } - } + //} } /* diff --git a/radio.c b/radio.c index d66112d..a476129 100644 --- a/radio.c +++ b/radio.c @@ -224,7 +224,7 @@ int pre_emphasize=0; int vox_enabled=0; double vox_threshold=0.001; -double vox_gain=1; +double vox_gain=10.0; double vox_hang=250.0; int vox=0; @@ -690,8 +690,10 @@ fprintf(stderr,"radioRestoreState: %s\n",property_path); if(value) vox_enabled=atoi(value); value=getProperty("vox_threshold"); if(value) vox_threshold=atof(value); +/* value=getProperty("vox_gain"); if(value) vox_gain=atof(value); +*/ value=getProperty("vox_hang"); if(value) vox_hang=atof(value); @@ -883,8 +885,10 @@ void radioSaveState() { setProperty("vox_enabled",value); sprintf(value,"%f",vox_threshold); setProperty("vox_threshold",value); +/* sprintf(value,"%f",vox_gain); setProperty("vox_gain",value); +*/ sprintf(value,"%f",vox_hang); setProperty("vox_hang",value); diff --git a/vox.c b/vox.c index 540f591..d8163f2 100644 --- a/vox.c +++ b/vox.c @@ -57,6 +57,8 @@ void update_vox(double *in,int length) { if(mic_boost && !local_microphone) { threshold=vox_threshold*vox_gain; } + +fprintf(stderr,"update_vox: peak=%f threshold=%f\n",peak,threshold); if(peak>threshold) { if(previous_vox) { g_source_remove(vox_timeout); diff --git a/vox_menu.c b/vox_menu.c index 464d529..65bee6a 100644 --- a/vox_menu.c +++ b/vox_menu.c @@ -158,6 +158,7 @@ void vox_menu(GtkWidget *parent) { gtk_grid_attach(GTK_GRID(grid),vox_scale,1,2,1,1); g_signal_connect(G_OBJECT(vox_scale),"value_changed",G_CALLBACK(vox_value_changed_cb),NULL); +/* GtkWidget *gain_label=gtk_label_new("VOX Gain:"); gtk_misc_set_alignment (GTK_MISC(gain_label), 0, 0); gtk_widget_show(gain_label); @@ -168,7 +169,7 @@ void vox_menu(GtkWidget *parent) { gtk_widget_show(gain_scale); gtk_grid_attach(GTK_GRID(grid),gain_scale,1,3,1,1); g_signal_connect(G_OBJECT(gain_scale),"value_changed",G_CALLBACK(vox_gain_value_changed_cb),NULL); - +*/ GtkWidget *hang_label=gtk_label_new("VOX Hang (ms):"); gtk_misc_set_alignment (GTK_MISC(hang_label), 0, 0); gtk_widget_show(hang_label);