From: John Melton - G0ORX/N6LYT <john.d.melton@googlemail.com> Date: Tue, 29 Nov 2016 14:20:37 +0000 (+0000) Subject: updated microphone gain settings. X-Git-Url: https://git.rkrishnan.org/simplejson/components/com_hotproperty/module-simplejson-index.html?a=commitdiff_plain;h=c53e6de750baa9b0bcd63e4a7ecb1a9c5c2064db;p=pihpsdr.git updated microphone gain settings. --- diff --git a/audio.c b/audio.c index 443ad10..86df47a 100644 --- a/audio.c +++ b/audio.c @@ -327,7 +327,7 @@ fprintf(stderr,"mic_read_thread: mic_buffer_size=%d\n",mic_buffer_size); snd_strerror (rc)); running=FALSE; } else { - fprintf(stderr,"mic_read_thread: read %d",rc); + fprintf(stderr,"mic_read_thread: read %d\n",rc); } } } else { @@ -408,3 +408,54 @@ fprintf(stderr,"output_device: %s\n",device_id); } } +/* +int audio_get_mic_level() { + fprintf(stderr,"audio_get_mic_level\n"); + if(local_microphone==0) { + fprintf(stderr,"local microphone not enabled\n"); + return -1; + } + if(n_selected_input_device<0 || n_selected_input_device>=n_input_devices) { + fprintf(stderr,"no imput device selected\n"); + return -1; + } + + long db; + + int i; + char hw[16]; + char *selected=input_devices[n_selected_input_device]; + fprintf(stderr,"audio_get_mic_level: selected=%d:%s\n",n_selected_input_device,selected); + + i=0; + while(selected[i]!=' ') { + hw[i]=selected[i]; + i++; + } + hw[i]='\0'; + fprintf(stderr,"audio_get_mic_level: hw=%s\n",hw); + + snd_mixer_t* handle; + snd_mixer_selem_id_t* sid; + const char *selem_name="Mic"; + + snd_mixer_open(&handle, 0); + snd_mixer_attach(handle, hw); + snd_mixer_selem_register(handle, NULL, NULL); + snd_mixer_load(handle); + + snd_mixer_selem_id_alloca(&sid); + snd_mixer_selem_id_set_index(sid, 0); + snd_mixer_selem_id_set_name(sid, selem_name); + snd_mixer_elem_t* elem = snd_mixer_find_selem(handle, sid); + + //snd_mixer_selem_get_capture_volume_range(elem, &min, &max); + snd_mixer_selem_get_capture_dB(elem,0,&db); + + fprintf(stderr,"audio_get_mic_level: %ld dB\n",db); + snd_mixer_close(handle); + + + return 0; +} +*/ diff --git a/audio.h b/audio.h index ceec2a0..8ff8fe6 100644 --- a/audio.h +++ b/audio.h @@ -34,5 +34,7 @@ extern void audio_close_output(); extern void audio_close_input(); extern int audio_write(short left_sample,short right_sample); extern void audio_get_cards(); - +/* +extern int audio_get_mic_level(); +*/ #endif diff --git a/new_menu.c b/new_menu.c index 98408ac..defa9c4 100644 --- a/new_menu.c +++ b/new_menu.c @@ -22,6 +22,7 @@ #include <stdio.h> #include <string.h> +#include "audio.h" #include "new_menu.h" #include "exit_menu.h" #include "general_menu.h" @@ -140,6 +141,12 @@ static gboolean equalizer_cb (GtkWidget *widget, GdkEventButton *event, gpointer return TRUE; } +static gboolean test_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) { +fprintf(stderr,"test_cb\n"); + audio_get_mic_level(); + return TRUE; +} + static gboolean new_menu_pressed_event_cb (GtkWidget *widget, GdkEventButton *event, gpointer data) @@ -227,6 +234,12 @@ static gboolean new_menu_pressed_event_cb (GtkWidget *widget, g_signal_connect (equalizer_b, "button-press-event", G_CALLBACK(equalizer_cb), NULL); gtk_grid_attach(GTK_GRID(grid),equalizer_b,0,3,1,1); +/* + GtkWidget *test_b=gtk_button_new_with_label("Test"); + g_signal_connect (test_b, "button-press-event", G_CALLBACK(test_cb), NULL); + gtk_grid_attach(GTK_GRID(grid),test_b,1,3,1,1); +*/ + gtk_container_add(GTK_CONTAINER(content),grid); gtk_widget_show_all(dialog); diff --git a/new_protocol.c b/new_protocol.c index 13a6bf7..9479745 100644 --- a/new_protocol.c +++ b/new_protocol.c @@ -888,16 +888,18 @@ static void process_mic_data(unsigned char *buffer) { int b; int micsample; double micsampledouble; + double gain=pow(10, mic_gain/20.0); sequence=((buffer[0]&0xFF)<<24)+((buffer[1]&0xFF)<<16)+((buffer[2]&0xFF)<<8)+(buffer[3]&0xFF); // if(isTransmitting()) { b=4; int i,j,s; for(i=0;i<MIC_SAMPLES;i++) { + micsample = (int)((signed char) buffer[b++]) << 8; + micsample |= (int)((unsigned char)buffer[b++] & 0xFF); + micsampledouble = (1.0 / 2147483648.0) * (double)(micsample<<16); #ifdef FREEDV if(mode==modeFREEDV && isTransmitting()) { - micsample = (int)((signed char) buffer[b++]) << 8; - micsample |= (int)((unsigned char)buffer[b++] & 0xFF); if(freedv_samples==0) { // 48K to 8K int sample=(int)((double)micsample*pow(10.0, mic_gain / 20.0)); int modem_samples=mod_sample_freedv(sample); @@ -905,7 +907,7 @@ static void process_mic_data(unsigned char *buffer) { for(s=0;s<modem_samples;s++) { for(j=0;j<freedv_resample;j++) { // 8K to 48K micsample=mod_out[s]; - micsampledouble=(double)micsample/32767.0; // 16 bit sample 2^16-1 + micsampledouble = (1.0 / 2147483648.0) * (double)(micsample<<16); micinputbuffer[micsamples*2]=micsampledouble; micinputbuffer[(micsamples*2)+1]=micsampledouble; micsamples++; @@ -923,8 +925,6 @@ static void process_mic_data(unsigned char *buffer) { } } else { #endif - //micsampledouble = (double)micsample/32767.0; // 16 bit sample - micsampledouble = (1.0 / 2147483648.0) * (double)(buffer[b++] << 24 | buffer[b++] << 16); if(mode==modeCWL || mode==modeCWU || tune || !isTransmitting()) { micinputbuffer[micsamples*2]=0.0; micinputbuffer[(micsamples*2)+1]=0.0; diff --git a/old_protocol.c b/old_protocol.c index 590c031..07f9ac0 100644 --- a/old_protocol.c +++ b/old_protocol.c @@ -500,8 +500,8 @@ static void process_ozy_input_buffer(char *buffer) { micinputbuffer[samples*2]=0.0; micinputbuffer[(samples*2)+1]=0.0; } else { - micinputbuffer[samples*2]=mic_sample_double*gain; - micinputbuffer[(samples*2)+1]=mic_sample_double*gain; + 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; @@ -693,35 +693,33 @@ static void full_tx_buffer() { void old_protocol_process_local_mic(unsigned char *buffer,int le) { int b; - int leftmicsample; - int rightmicsample; - double leftmicsampledouble; - double rightmicsampledouble; + int micsample; + double micsampledouble; + double gain=pow(10.0, mic_gain / 20.0); if(isTransmitting()) { b=0; int i,j,s; for(i=0;i<720;i++) { if(le) { - leftmicsample = (int)((unsigned char)buffer[b++] & 0xFF); - leftmicsample |= (int)((signed char) buffer[b++]) << 8; - rightmicsample=leftmicsample; + micsample = (int)((unsigned char)buffer[b++] & 0xFF); + micsample |= (int)((signed char) buffer[b++]) << 8; } else { - leftmicsample = (int)((signed char) buffer[b++]) << 8; - leftmicsample |= (int)((unsigned char)buffer[b++] & 0xFF); - rightmicsample=leftmicsample; + micsample = (int)((signed char) buffer[b++]) << 8; + micsample |= (int)((unsigned char)buffer[b++] & 0xFF); } + micsampledouble=(1.0 / 2147483648.0) * (double)(micsample<<16); #ifdef FREEDV if(mode==modeFREEDV && !tune) { if(freedv_samples==0) { // 48K to 8K - int modem_samples=mod_sample_freedv(leftmicsample); + int modem_samples=mod_sample_freedv(micsample*gain); if(modem_samples!=0) { for(s=0;s<modem_samples;s++) { for(j=0;j<freedv_divisor;j++) { // 8K to 48K - leftmicsample=mod_out[s]; - leftmicsampledouble=(double)leftmicsample/32767.0; // 16 bit sample 2^16-1 - micinputbuffer[samples*2]=leftmicsampledouble; - micinputbuffer[(samples*2)+1]=leftmicsampledouble; + micsample=mod_out[s]; + micsampledouble = (1.0 / 2147483648.0) * (double)(micsample<<16); + micinputbuffer[samples*2]=micsampledouble; + micinputbuffer[(samples*2)+1]=micsampledouble; iqinputbuffer[0][samples*2]=0.0; iqinputbuffer[0][(samples*2)+1]=0.0; samples++; @@ -739,13 +737,12 @@ void old_protocol_process_local_mic(unsigned char *buffer,int le) { } } else { #endif - leftmicsampledouble=(double)leftmicsample/32767.0; // 16 bit sample 2^16-1 if(mode==modeCWL || mode==modeCWU || tune) { micinputbuffer[samples*2]=0.0; micinputbuffer[(samples*2)+1]=0.0; } else { - micinputbuffer[samples*2]=leftmicsampledouble; - micinputbuffer[(samples*2)+1]=leftmicsampledouble; + micinputbuffer[samples*2]=micsampledouble*gain; + micinputbuffer[(samples*2)+1]=micsampledouble*gain; } iqinputbuffer[0][samples*2]=0.0; iqinputbuffer[0][(samples*2)+1]=0.0; diff --git a/pihpsdr b/pihpsdr index 6899f72..264cc7c 100755 Binary files a/pihpsdr and b/pihpsdr differ diff --git a/rigctl.c b/rigctl.c index 43c2ffb..23be960 100644 --- a/rigctl.c +++ b/rigctl.c @@ -1014,9 +1014,9 @@ int init_server () { socket_desc = socket(AF_INET , SOCK_STREAM , 0); if (socket_desc == -1) { - fprintf(stderr,"RIGCTL: Could not create socket"); + fprintf(stderr,"RIGCTL: Could not create socket\n"); } - fprintf(stderr, "RIGCTL: Socket created"); + fprintf(stderr, "RIGCTL: Socket created\n"); //Prepare the sockaddr_in structure server.sin_family = AF_INET; @@ -1027,23 +1027,23 @@ int init_server () { if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0) { //print the error message - fprintf(stderr,"RIGCLT: bind failed. Error"); + fprintf(stderr,"RIGCLT: bind failed. Error\n"); return 1; } - fprintf(stderr,"RIGCTL: bind done"); + fprintf(stderr,"RIGCTL: bind done\n"); //Listen listen(socket_desc , 3); //Accept and incoming connection - fprintf(stderr,"RIGCTL: Waiting for incoming connections..."); + fprintf(stderr,"RIGCTL: Waiting for incoming connections...\n"); c = sizeof(struct sockaddr_in); //accept connection from an incoming client client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c); if (client_sock < 0) { - fprintf(stderr,"RIGCTL: Accept failed"); + fprintf(stderr,"RIGCTL: Accept failed\n"); return 1; } fprintf(stderr,"RIGCTL: Connection accepted\n");