From 2a7dffaad0ad6bc99e2f8e95b06f45be55886cf5 Mon Sep 17 00:00:00 2001 From: John Melton G0ORX Date: Wed, 27 Nov 2019 11:34:41 +0000 Subject: [PATCH] changed audio device lists to combo box. --- audio.c | 28 +++++++++++++++++----------- rx_menu.c | 13 ++++++------- tx_menu.c | 21 ++++++++++++--------- 3 files changed, 35 insertions(+), 27 deletions(-) diff --git a/audio.c b/audio.c index 45586f1..b351404 100644 --- a/audio.c +++ b/audio.c @@ -222,6 +222,8 @@ g_print("audio_open_input: using format %s (%s)\n",snd_pcm_format_name(formats[i return err; } +g_print("audio_open_input: format=%d\n",record_audio_format); + switch(record_audio_format) { case SND_PCM_FORMAT_S16_LE: g_print("audio_open_input: mic_buffer: size=%d channels=%d sample=%ld bytes\n",mic_buffer_size,channels,sizeof(gint16)); @@ -237,14 +239,13 @@ g_print("audio_open_input: mic_buffer: size=%d channels=%d sample=%ld bytes\n",m break; } -g_print("audio_open_input: starting mic_read_thread\n"); - mic_read_thread_id = g_thread_new("local mic",mic_read_thread,NULL); - if(!mic_read_thread_id ) - { - g_print("g_thread_new failed on mic_read_thread\n"); +g_print("audio_open_input: creating mic_read_thread\n"); + GError *error; + mic_read_thread_id = g_thread_try_new("local mic",mic_read_thread,NULL,&error); + if(!mic_read_thread_id ) { + g_print("g_thread_new failed on mic_read_thread: %s\n",error->message); } - return 0; } @@ -263,17 +264,20 @@ g_print("audio_close_output: rx=%d handle=%p buffer=%p\n",rx->id,rx->playback_ha } void audio_close_input() { - g_print("audio_close_input\n"); +g_print("audio_close_input\n"); running=FALSE; if(mic_read_thread_id!=NULL) { +g_print("audio_close_input: wait for thread to complete\n"); g_thread_join(mic_read_thread_id); mic_read_thread_id=NULL; } if(record_handle!=NULL) { +g_print("audio_close_input: snd_pcm_close\n"); snd_pcm_close (record_handle); record_handle=NULL; } if(mic_buffer!=NULL) { +g_print("audio_close_input: free mic buffer\n"); g_free(mic_buffer); mic_buffer=NULL; } @@ -445,14 +449,14 @@ static void *mic_read_thread(gpointer arg) { gfloat sample; int i; -g_print("mic_read_thread: snd_pcm_prepare\n"); - if ((rc = snd_pcm_prepare (record_handle)) < 0) { - g_print("mic_read_thread: cannot prepare audio interface for use (%s)\n", +g_print("mic_read_thread: mic_buffer_size=%d\n",mic_buffer_size); +g_print("mic_read_thread: snd_pcm_start\n"); + if ((rc = snd_pcm_start (record_handle)) < 0) { + g_print("mic_read_thread: cannot start audio interface for use (%s)\n", snd_strerror (rc)); return NULL; } -g_print("mic_read_thread: mic_buffer_size=%d\n",mic_buffer_size); running=TRUE; while(running) { if ((rc = snd_pcm_readi (record_handle, mic_buffer, mic_buffer_size)) != mic_buffer_size) { @@ -604,6 +608,7 @@ g_print("output_device: %s\n",device_id); g_print("output_device: name=%s descr=%s\n",name,descr); //} } +#ifdef INCLUDE_SNOOP } else if(strncmp("dsnoop:", name, 6)==0) { if(n_input_devicesid,output_devices[i].name); if(active_receiver->local_audio) { audio_close_output(active_receiver); // audio_close with OLD device @@ -347,18 +347,17 @@ void rx_menu(GtkWidget *parent) { if(active_receiver->audio_device==-1) active_receiver->audio_device=0; - output=NULL; + output=gtk_combo_box_text_new(); for(i=0;iaudio_name!=NULL) { if(strcmp(active_receiver->audio_name,output_devices[i].name)==0) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(output),i); + gtk_combo_box_set_active(GTK_COMBO_BOX(output),i); } } - gtk_widget_show(output); - gtk_grid_attach(GTK_GRID(grid),output,x,++row,1,1); - g_signal_connect(output,"pressed",G_CALLBACK(local_output_changed_cb),GINT_TO_POINTER(i)); } + gtk_grid_attach(GTK_GRID(grid),output,x,++row,1,1); + g_signal_connect(output,"changed",G_CALLBACK(local_output_changed_cb),NULL); row=0; x++; diff --git a/tx_menu.c b/tx_menu.c index 217e124..3848c04 100644 --- a/tx_menu.c +++ b/tx_menu.c @@ -192,9 +192,8 @@ static void linein_changed(GtkWidget *widget, gpointer data) { } static void local_input_changed_cb(GtkWidget *widget, gpointer data) { - int i=GPOINTER_TO_INT(data); -g_print("local_input_changed_cp: %d\n",i); -g_print("local_input_changed_cp: %s\n",input_devices[i].name); + int i = gtk_combo_box_get_active(GTK_COMBO_BOX(widget)); +g_print("local_input_changed_cp: %d %s\n",i,input_devices[i].name); if(transmitter->local_microphone) { audio_close_input(); } @@ -352,16 +351,20 @@ void tx_menu(GtkWidget *parent) { gtk_grid_attach(GTK_GRID(grid),local_microphone_b,col,row++,2,1); g_signal_connect(local_microphone_b,"toggled",G_CALLBACK(local_microphone_cb),NULL); - input=NULL; + input=gtk_combo_box_text_new(); for(i=0;imicrophone_name!=NULL) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(input),strcmp(transmitter->microphone_name,input_devices[i].name)==0); + if(strcmp(transmitter->microphone_name,input_devices[i].name)==0) { + gtk_combo_box_set_active(GTK_COMBO_BOX(input),i); + } } - gtk_widget_show(input); - gtk_grid_attach(GTK_GRID(grid),input,col,row++,2,1); - g_signal_connect(input,"pressed",G_CALLBACK(local_input_changed_cb),(gpointer)(long)i); } + + gtk_grid_attach(GTK_GRID(grid),input,col,row++,1,1); + g_signal_connect(input,"changed",G_CALLBACK(local_input_changed_cb),NULL); + + } row=saved_row; -- 2.45.2