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);
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);
}
}
}
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);
gtk_widget_show_all(dialog);
+ if(local_microphone && (protocol==ORIGINAL_PROTOCOL || protocol==NEW_PROTOCOL)) {
+ gtk_widget_hide(linein_b);
+ gtk_widget_hide(micboost_b);
+ }
}
#ifdef FREEDV
#include "freedv.h"
#endif
+#include "vox.h"
#define min(x,y) (x<y?x:y)
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;
}
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) {
}
} 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 {
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;
int j;
int error;
- if(vox_enabled) {
+ if(vox_enabled && !local_microphone) {
switch(mode) {
case modeLSB:
case modeUSB:
int error;
double gain=32767.0; // 2^16-1
- if(vox_enabled && vox) {
+ if(vox_enabled && (vox || local_microphone)) {
update_vox(micinputbuffer,BUFFER_SIZE);
}
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++) {
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;
}
}
}
} 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) {
- }
- }
+ //}
}
/*
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;
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);
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);
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);
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);
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);