]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
changed audio device lists to combo box.
authorJohn Melton G0ORX <john.d.melton@googlemail.com>
Wed, 27 Nov 2019 11:34:41 +0000 (11:34 +0000)
committerJohn Melton G0ORX <john.d.melton@googlemail.com>
Wed, 27 Nov 2019 11:34:41 +0000 (11:34 +0000)
audio.c
rx_menu.c
tx_menu.c

diff --git a/audio.c b/audio.c
index 45586f10f02a96378da5f1dbcb5bcb50556f8982..b3514047f339a9b02b038f0541665aaa5e03d2d1 100644 (file)
--- 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_devices<MAX_AUDIO_DEVICES) {
         //if(strncmp("dmix:CARD=ALSA",name,14)!=0) {
@@ -620,6 +625,7 @@ g_print("output_device: name=%s descr=%s\n",name,descr);
           n_input_devices++;
 g_print("input_device: name=%s descr=%s\n",name,descr);
         //}
+#endif
       }
     }
 
index 84c2d91921bb33b74efa181da2202f627087e788..79b4c00c880109c2666223c91b4384b0c9f01399 100644 (file)
--- a/rx_menu.c
+++ b/rx_menu.c
@@ -132,7 +132,7 @@ static void mute_radio_cb(GtkWidget *widget, gpointer data) {
 // call audo_close_output with old device, audio_open_output with new one
 //
 static void local_output_changed_cb(GtkWidget *widget, gpointer data) {
-  int i = GPOINTER_TO_INT(data);
+  int i = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
   fprintf(stderr,"local_output_changed rx=%d %s\n",active_receiver->id,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;i<n_output_devices;i++) {
-      output=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(output),output_devices[i].name);
+      gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(output),NULL,output_devices[i].name);
       if(active_receiver->audio_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++;
index 217e124e7b6e53d4798418c9cbab92e1b8090dbf..3848c043674cd488fc5e9d736bb74f976dc89bfd 100644 (file)
--- 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;i<n_input_devices;i++) {
-      input=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(input),input_devices[i].name);
+      gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(input),NULL,input_devices[i].name);
       if(transmitter->microphone_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;