From: Ramakrishnan Muthukrishnan Date: Sun, 18 Dec 2022 05:29:59 +0000 (+0530) Subject: introduce rnnoise based nr3 X-Git-Url: https://git.rkrishnan.org/%5B/%5D%20/file/$top_link?a=commitdiff_plain;h=194abca01da32c8877a0fef110e97f58a4692fa6;p=pihpsdr.git introduce rnnoise based nr3 --- diff --git a/Makefile b/Makefile index 30f88f4..f1ccaec 100644 --- a/Makefile +++ b/Makefile @@ -169,7 +169,7 @@ ifeq ($(UNAME_S), Linux) RT_OPTION=-lrt endif -LIBS=$(RT_OPTION) -lm -lwdsp -lpthread $(AUDIO_LIBS) $(USBOZY_LIBS) $(GTKLIBS) $(GPIO_LIBS) $(MIDI_LIBS) +LIBS=$(RT_OPTION) -lm -lwdsp -lrnnoise -lpthread $(AUDIO_LIBS) $(USBOZY_LIBS) $(GTKLIBS) $(GPIO_LIBS) $(MIDI_LIBS) INCLUDES=$(GTKINCLUDES) COMPILE=$(CC) $(CFLAGS) $(OPTIONS) $(INCLUDES) diff --git a/noise_menu.c b/noise_menu.c index 9588841..05c4d40 100644 --- a/noise_menu.c +++ b/noise_menu.c @@ -85,6 +85,7 @@ void set_noise() { SetEXTNOBRun(active_receiver->id, active_receiver->nb2); SetRXAANRRun(active_receiver->id, active_receiver->nr); SetRXAEMNRRun(active_receiver->id, active_receiver->nr2); + SetRXARNNRRun(active_receiver->id, active_receiver->nr3); SetRXAANFRun(active_receiver->id, active_receiver->anf); SetRXASNBARun(active_receiver->id, active_receiver->snb); g_idle_add(ext_vfo_update,NULL); @@ -126,8 +127,10 @@ static void nr_none_cb(GtkToggleButton *widget, gpointer data) { if(gtk_toggle_button_get_active(widget)) { active_receiver->nr=0; active_receiver->nr2=0; + active_receiver->nr3=0; mode_settings[vfo[active_receiver->id].mode].nr=0; mode_settings[vfo[active_receiver->id].mode].nr2=0; + mode_settings[vfo[active_receiver->id].mode].nr3=0; update_noise(); } } @@ -136,8 +139,10 @@ static void nr_cb(GtkToggleButton *widget, gpointer data) { if(gtk_toggle_button_get_active(widget)) { active_receiver->nr=1; active_receiver->nr2=0; + active_receiver->nr3=0; mode_settings[vfo[active_receiver->id].mode].nr=1; mode_settings[vfo[active_receiver->id].mode].nr2=0; + mode_settings[vfo[active_receiver->id].mode].nr3=0; update_noise(); } } @@ -156,8 +161,22 @@ static void nr2_cb(GtkToggleButton *widget, gpointer data) { if(gtk_toggle_button_get_active(widget)) { active_receiver->nr=0; active_receiver->nr2=1; + active_receiver->nr3=0; mode_settings[vfo[active_receiver->id].mode].nr=0; mode_settings[vfo[active_receiver->id].mode].nr2=1; + mode_settings[vfo[active_receiver->id].mode].nr3=0; + update_noise(); + } +} + +static void nr3_cb(GtkToggleButton *widget, gpointer data) { + if(gtk_toggle_button_get_active(widget)) { + active_receiver->nr=0; + active_receiver->nr2=0; + active_receiver->nr3=1; + mode_settings[vfo[active_receiver->id].mode].nr=0; + mode_settings[vfo[active_receiver->id].mode].nr2=0; + mode_settings[vfo[active_receiver->id].mode].nr3=1; update_noise(); } } @@ -230,7 +249,7 @@ void noise_menu(GtkWidget *parent) { col++; GtkWidget *b_nr_none=gtk_radio_button_new_with_label(NULL, "None"); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nr_none), active_receiver->nr==0 && active_receiver->nr2==0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nr_none), active_receiver->nr==0 && active_receiver->nr2==0 && active_receiver->nr3 ==0); gtk_widget_show(b_nr_none); gtk_grid_attach(GTK_GRID(grid),b_nr_none,col,row,1,1); g_signal_connect(b_nr_none,"toggled",G_CALLBACK(nr_none_cb),NULL); @@ -286,6 +305,14 @@ void noise_menu(GtkWidget *parent) { gtk_grid_attach(GTK_GRID(grid),b_nr2,col,row,1,1); g_signal_connect(b_nr2,"toggled",G_CALLBACK(nr2_cb),NULL); + row++; + + GtkWidget *b_nr3=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(b_nr),"NR3"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nr3), active_receiver->nr3); + gtk_widget_show(b_nr3); + gtk_grid_attach(GTK_GRID(grid),b_nr3,col,row,1,1); + g_signal_connect(b_nr3,"toggled",G_CALLBACK(nr3_cb),NULL); + gtk_container_add(GTK_CONTAINER(content),grid); sub_menu=dialog; diff --git a/receiver.c b/receiver.c index f3442e7..c8b56b5 100644 --- a/receiver.c +++ b/receiver.c @@ -293,6 +293,11 @@ void receiver_save_state(RECEIVER *rx) { sprintf(name,"receiver.%d.nr2",rx->id); sprintf(value,"%d",rx->nr2); setProperty(name,value); + + sprintf(name,"receiver.%d.nr3",rx->id); + sprintf(value,"%d",rx->nr3); + setProperty(name,value); + sprintf(name,"receiver.%d.anf",rx->id); sprintf(value,"%d",rx->anf); setProperty(name,value); @@ -509,6 +514,11 @@ g_print("%s: id=%d\n",__FUNCTION__,rx->id); sprintf(name,"receiver.%d.nr2",rx->id); value=getProperty(name); if(value) rx->nr2=atoi(value); + + sprintf(name,"receiver.%d.nr3",rx->id); + value=getProperty(name); + if(value) rx->nr3=atoi(value); + sprintf(name,"receiver.%d.anf",rx->id); value=getProperty(name); if(value) rx->anf=atoi(value); @@ -922,6 +932,7 @@ g_print("%s: id=%d buffer_size=%d\n",__FUNCTION__,id,buffer_size); rx->nb2=0; rx->nr=0; rx->nr2=0; + rx->nr3=0; rx->anf=0; rx->snb=0; @@ -1051,6 +1062,7 @@ g_print("%s: id=%d default adc=%d\n",__FUNCTION__,rx->id, rx->adc); rx->nb2=0; rx->nr=0; rx->nr2=0; + rx->nr3=0; rx->anf=0; rx->snb=0; @@ -1163,6 +1175,8 @@ g_print("%s: OpenChannel id=%d buffer_size=%d fft_size=%d sample_rate=%d\n", SetRXAEMNRRun(rx->id, rx->nr2); SetRXAEMNRaeRun(rx->id, rx->nr2_ae); + SetRXARNNRRun(rx->id, rx->nr3); + SetEXTANBRun(rx->id, rx->nb); SetEXTNOBRun(rx->id, rx->nb2); diff --git a/receiver.h b/receiver.h index 5513f67..6de1a1a 100644 --- a/receiver.h +++ b/receiver.h @@ -81,6 +81,7 @@ typedef struct _receiver { gint nb2; gint nr; gint nr2; + gint nr3; gint anf; gint snb; diff --git a/vfo.c b/vfo.c index d31356d..59ce9f9 100644 --- a/vfo.c +++ b/vfo.c @@ -93,6 +93,11 @@ void modesettings_save_state() { sprintf(name,"modeset.%d.nr2", i); sprintf(value,"%d", mode_settings[i].nr2); setProperty(name,value); + + sprintf(name,"modeset.%d.nr3", i); + sprintf(value,"%d", mode_settings[i].nr3); + setProperty(name,value); + sprintf(name,"modeset.%d.nb", i); sprintf(value,"%d", mode_settings[i].nb); setProperty(name,value); @@ -119,6 +124,7 @@ void modesettings_restore_state() { mode_settings[i].filter=filterF6; mode_settings[i].nr=0; mode_settings[i].nr2=0; + mode_settings[i].nr3=0; mode_settings[i].nb=0; mode_settings[i].nb2=0; mode_settings[i].anf=0; @@ -134,6 +140,11 @@ void modesettings_restore_state() { value=getProperty(name); if(value) mode_settings[i].nr2=atoi(value); sprintf(name,"modeset.%d.nb",i); + + sprintf(name,"modeset.%d.nr3",i); + value=getProperty(name); + if(value) mode_settings[i].nr3=atoi(value); + value=getProperty(name); if(value) mode_settings[i].nb=atoi(value); sprintf(name,"modeset.%d.nb2",i); @@ -399,6 +410,7 @@ void vfo_mode_changed(int m) { vfo[id].filter =mode_settings[m].filter; active_receiver->nr =mode_settings[m].nr; active_receiver->nr2=mode_settings[m].nr2; + active_receiver->nr3=mode_settings[m].nr3; active_receiver->nb =mode_settings[m].nb; active_receiver->nb2=mode_settings[m].nb2; active_receiver->anf=mode_settings[m].anf; @@ -1181,7 +1193,7 @@ void vfo_update() { cairo_show_text(cr, "NB"); } - // NR and NR2 are mutually exclusive + // NR, NR2 and NR3 are mutually exclusive cairo_move_to(cr, 70, 40); if(active_receiver->nr) { cairo_set_source_rgb(cr, 1.0, 1.0, 0.0); @@ -1193,6 +1205,7 @@ void vfo_update() { cairo_set_source_rgb(cr, 0.7, 0.7, 0.7); cairo_show_text(cr, "NR"); } + // XXX need to have a button for NR3 cairo_move_to(cr, 70, 20); if(active_receiver->anf) { diff --git a/vfo.h b/vfo.h index 84047c9..3fef3e1 100644 --- a/vfo.h +++ b/vfo.h @@ -60,6 +60,7 @@ struct _mode_settings { int nb2; int nr; int nr2; + int nr3; int anf; int snb; };