diff --git a/src/dmr_flco.c b/src/dmr_flco.c
index 350ef7a..dbd3588 100644
--- a/src/dmr_flco.c
+++ b/src/dmr_flco.c
@@ -334,6 +334,9 @@ void dmr_flco (dsd_opts * opts, dsd_state * state, uint8_t lc_bits[], uint32_t C
state->payload_algid = 0;
state->payload_mi = 0;
state->payload_keyid = 0;
+ //reset gain
+ if (opts->floating_point == 1)
+ state->aout_gain = opts->audio_gain;
}
if (state->currentslot == 1)
{
@@ -344,6 +347,9 @@ void dmr_flco (dsd_opts * opts, dsd_state * state, uint8_t lc_bits[], uint32_t C
state->payload_algidR = 0;
state->payload_miR = 0;
state->payload_keyidR = 0;
+ //reset gain
+ if (opts->floating_point == 1)
+ state->aout_gainR = opts->audio_gain;
}
}
diff --git a/src/dsd_audio2.c b/src/dsd_audio2.c
index 6a664a9..7898e4c 100644
--- a/src/dsd_audio2.c
+++ b/src/dsd_audio2.c
@@ -41,15 +41,27 @@ void agf (dsd_opts * opts, dsd_state * state, float samp[160], int slot)
//crude auto gain for float values
if (slot == 0)
{
- if (max < 0.351f && max > 0.1f && state->aout_gain < 42) state->aout_gain += 0.33f; //state->aout_gain++;
- if (max > 0.35f && state->aout_gain > 1) state->aout_gain -= 0.33f; //state->aout_gain--;
+ if (max < 0.351f && max > 0.1f && state->aout_gain < 42.0f) state->aout_gain++;
+ if (max > 0.35f && state->aout_gain > 1.0f) state->aout_gain--;
}
if (slot == 1)
{
- if (max < 0.351f && max > 0.1f && state->aout_gainR < 42) state->aout_gainR += 0.33f; //state->aout_gain++;
- if (max > 0.35f && state->aout_gainR > 1) state->aout_gainR -= 0.33f; //state->aout_gain--;
+ if (max < 0.351f && max > 0.1f && state->aout_gainR < 42) state->aout_gainR++;
+ if (max > 0.35f && state->aout_gainR > 1) state->aout_gainR--;
}
+
+ // if (slot == 0)
+ // {
+ // if (max < 0.351f && max > 0.1f && state->aout_gain < 42.0f) state->aout_gain += 0.33f;
+ // if (max > 0.35f && state->aout_gain > 1.0f) state->aout_gain -= 0.33f;
+ // }
+
+ // if (slot == 1)
+ // {
+ // if (max < 0.351f && max > 0.1f && state->aout_gainR < 42) state->aout_gainR += 0.33f;
+ // if (max > 0.35f && state->aout_gainR > 1) state->aout_gainR -= 0.33f;
+ // }
AGF_END: ; //do nothing
diff --git a/src/dsd_main.c b/src/dsd_main.c
index cb04f3b..2ffb2b1 100644
--- a/src/dsd_main.c
+++ b/src/dsd_main.c
@@ -101,12 +101,10 @@ void
noCarrier (dsd_opts * opts, dsd_state * state)
{
- //is this not being set properly?
if (opts->floating_point == 1)
{
- //test for WIP auto gain, disable later if needbe
- state->aout_gain = 25.0f;
- state->aout_gainR = 25.0f;
+ state->aout_gain = opts->audio_gain;
+ state->aout_gainR = opts->audio_gain;
}
//clear heuristics from last carrier signal
@@ -294,18 +292,6 @@ noCarrier (dsd_opts * opts, dsd_state * state)
sprintf (state->slot1light, "%s", "");
sprintf (state->slot2light, "%s", "");
state->firstframe = 0;
- //this really isn't the best placement for this sort of check
- // if (opts->audio_gain == (float) 0)
- // {
- // if (state->audio_smoothing == 0) state->aout_gain = 15; //15
- // else state->aout_gain = 25; //25
- // }
-
- // if (opts->audio_gainR == (float) 0)
- // {
- // if (state->audio_smoothing == 0) state->aout_gainR = 15; //15
- // else state->aout_gainR = 25; //25
- // }
memset (state->aout_max_buf, 0, sizeof (float) * 200);
state->aout_max_buf_p = state->aout_max_buf;
state->aout_max_buf_idx = 0;
@@ -1193,7 +1179,8 @@ usage ()
printf (" null for no audio output\n");
printf (" -d
Create mbe data files, use this directory (TDMA version is experimental)\n");
printf (" -r Read/Play saved mbe data from file(s)\n");
- printf (" -g Audio output gain (default = 0 = auto, disable = -1)\n");
+ printf (" -g Audio output gain (SHORT) -- (default = 0 = auto, disable = -1)\n");
+ printf (" -g Audio Base Gain (FLOAT) -- (0 - 45)\n"); //re-write this to make it clear!
printf (" -w Output synthesized speech to a .wav file, FDMA modes only.\n");
printf (" -7 Create/Use Custom directory for Per Call decoded .wav file saving.\n");
printf (" (Single Nested Directory Only! Use Before the -P option!)\n");
@@ -1334,6 +1321,17 @@ void
liveScanner (dsd_opts * opts, dsd_state * state)
{
+ if (opts->floating_point == 1)
+ {
+ //use this for now, but see if we can really start on zero later on
+ //when we have a more normalized gain attack
+ if (opts->audio_gain == 0)
+ opts->audio_gain = 25.0f;
+
+ opts->audio_gain /= 2.0f;
+ if (opts->audio_gain > 45.0f) opts->audio_gain = 45.0f;
+ }
+
// if (opts->audio_in_type == 1)
// {
// opts->pulse_digi_rate_out = 48000;
@@ -1584,9 +1582,6 @@ main (int argc, char **argv)
case 'y': //use experimental 'float' audio output
opts.floating_point = 1; //enable floating point audio output
- opts.audio_gain = 0;
- state.aout_gain = 25.0f; //seems like a nonimal value for float during testing anyways
- state.aout_gainR = 25.0f; //seems like a nonimal value for float during testing anyways
fprintf (stderr,"Enabling Experimental Floating Point Audio Output\n");
break;
@@ -1893,23 +1888,23 @@ main (int argc, char **argv)
case 'g':
sscanf (optarg, "%f", &opts.audio_gain);
if (opts.audio_gain < (float) 0 )
- {
- fprintf (stderr,"Disabling audio out gain setting\n");
- opts.audio_gainR = opts.audio_gain;
- }
+ {
+ fprintf (stderr,"Disabling audio out gain setting\n");
+ opts.audio_gainR = opts.audio_gain;
+ }
else if (opts.audio_gain == (float) 0)
- {
- opts.audio_gain = (float) 0;
- opts.audio_gainR = opts.audio_gain;
- fprintf (stderr,"Enabling audio out auto-gain\n");
- }
+ {
+ opts.audio_gain = (float) 0;
+ opts.audio_gainR = opts.audio_gain;
+ fprintf (stderr,"Enabling audio out auto-gain\n");
+ }
else
- {
- fprintf (stderr,"Setting audio out gain to %f\n", opts.audio_gain);
- opts.audio_gainR = opts.audio_gain;
- state.aout_gain = opts.audio_gain;
- state.aout_gainR = opts.audio_gain;
- }
+ {
+ fprintf (stderr,"Setting audio out gain to %f\n", opts.audio_gain);
+ opts.audio_gainR = opts.audio_gain;
+ state.aout_gain = opts.audio_gain;
+ state.aout_gainR = opts.audio_gain;
+ }
break;
case 'w':
@@ -2778,8 +2773,7 @@ main (int argc, char **argv)
else
{
- //debug
- fprintf (stderr, "AIT: %d AOT: %d RATE: %d GAIN: %f \n", opts.audio_in_type, opts.audio_out_type, opts.pulse_digi_rate_out, state.aout_gain);
+
liveScanner (&opts, &state);
}
diff --git a/src/dsd_ncurses.c b/src/dsd_ncurses.c
index 4ba4f26..b103aba 100644
--- a/src/dsd_ncurses.c
+++ b/src/dsd_ncurses.c
@@ -2313,8 +2313,8 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state)
}
if (opts->audio_out_type == 0)
{
- printw ("| Pulse Audio Output: %i kHz; %i Channel; G: %.1f%%;", opts->pulse_digi_rate_out/1000, opts->pulse_digi_out_channels, state->aout_gain*2);
- if (opts->pulse_digi_out_channels == 2) printw (" G: %.1f%%;", state->aout_gainR*2);
+ printw ("| Pulse Audio Output: %i kHz; %i Channel; G: %.1f%%", opts->pulse_digi_rate_out/1000, opts->pulse_digi_out_channels, state->aout_gain*2);
+ if (opts->pulse_digi_out_channels == 2) printw (" G: %.1f%%", state->aout_gainR*2);
if (state->audio_smoothing == 1 && opts->floating_point == 0) printw (" Smoothing On;"); //only on short
if (opts->floating_point == 1) printw (" Floating Point;");
@@ -2322,8 +2322,8 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state)
}
if (opts->audio_out_type == 5)
{
- printw ("| Pulse Audio Output: %i kHz; %i Channel; G: %.1f%%;", opts->pulse_digi_rate_out/1000, opts->pulse_digi_out_channels, state->aout_gain*2);
- if (opts->pulse_digi_out_channels == 2) printw (" G: %.1f%%;", state->aout_gainR*2);
+ printw ("| Pulse Audio Output: %i kHz; %i Channel; G: %.1f%%", opts->pulse_digi_rate_out/1000, opts->pulse_digi_out_channels, state->aout_gain*2);
+ if (opts->pulse_digi_out_channels == 2) printw (" G: %.1f%%", state->aout_gainR*2);
if (state->audio_smoothing == 1 && opts->floating_point == 0) printw (" Smoothing On;"); //nly on short
if (opts->floating_point == 1) printw (" Floating Point;");
printw (" \n");
@@ -3493,20 +3493,33 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state)
if (c == 43) //+ key, increment aout_gain
{
- if (state->aout_gain < 50)
- state->aout_gain++;
- //probably won't use aout_gainR with new short and float systems
- if (state->aout_gainR < 50)
- state->aout_gainR++;
+ // if (state->aout_gain < 50)
+ // state->aout_gain++;
+ // //probably won't use aout_gainR with new short and float systems
+ // if (state->aout_gainR < 50)
+ // state->aout_gainR++;
+
+ if (opts->audio_gain < 50)
+ opts->audio_gain++;
+
+ state->aout_gain = opts->audio_gain;
+ state->aout_gainR = opts->audio_gain;
+
}
if (c == 45) //- key, decrement aout_gain
{
- if (state->aout_gain > 0)
- state->aout_gain--;
- //probably won't use aout_gainR with new short and float systems
- if (state->aout_gainR > 0)
- state->aout_gainR--;
+ // if (state->aout_gain > 0)
+ // state->aout_gain--;
+ // //probably won't use aout_gainR with new short and float systems
+ // if (state->aout_gainR > 0)
+ // state->aout_gainR--;
+
+ if (opts->audio_gain > 1)
+ opts->audio_gain--;
+
+ state->aout_gain = opts->audio_gain;
+ state->aout_gainR = opts->audio_gain;
}
if (c == 122) //'z' key, toggle payload to console
diff --git a/src/nxdn_deperm.c b/src/nxdn_deperm.c
index 285b4b0..828d114 100644
--- a/src/nxdn_deperm.c
+++ b/src/nxdn_deperm.c
@@ -950,6 +950,13 @@ void nxdn_message_type (dsd_opts * opts, dsd_state * state, uint8_t MessageType)
memset (state->nxdn_sacch_frame_segment, 1, sizeof(state->nxdn_sacch_frame_segment));
sprintf (state->nxdn_call_type, "%s", "");
}
+
+ if (MessageType == 0x07 ||MessageType == 0x08 || MessageType == 0x11)
+ {
+ //reset gain
+ if (opts->floating_point == 1)
+ state->aout_gain = opts->audio_gain;
+ }
}
diff --git a/src/p25p1_hdu.c b/src/p25p1_hdu.c
index 164c8b3..515c780 100644
--- a/src/p25p1_hdu.c
+++ b/src/p25p1_hdu.c
@@ -502,5 +502,9 @@ processHDU(dsd_opts* opts, dsd_state* state)
fprintf (stderr, " HDU FEC ERR \n");
fprintf (stderr, "%s", KNRM);
}
+
+ //reset gain
+ if (opts->floating_point == 1)
+ state->aout_gain = opts->audio_gain;
}
diff --git a/src/p25p1_tdu.c b/src/p25p1_tdu.c
index 616675d..f2c748f 100644
--- a/src/p25p1_tdu.c
+++ b/src/p25p1_tdu.c
@@ -38,4 +38,8 @@ processTDU (dsd_opts* opts, dsd_state* state)
//reset some strings -- since its a tdu, blank out any call strings, only want during actual call
sprintf (state->call_string[0], "%s", " "); //21 spaces
sprintf (state->call_string[1], "%s", " "); //21 spaces
+
+ //reset gain
+ if (opts->floating_point == 1)
+ state->aout_gain = opts->audio_gain;
}
diff --git a/src/p25p1_tdulc.c b/src/p25p1_tdulc.c
index 17eef24..f52b5dc 100644
--- a/src/p25p1_tdulc.c
+++ b/src/p25p1_tdulc.c
@@ -447,4 +447,8 @@ processTDULC (dsd_opts* opts, dsd_state* state)
sprintf (state->call_string[0], "%s", " "); //21 spaces
sprintf (state->call_string[1], "%s", " "); //21 spaces
+ //reset gain
+ if (opts->floating_point == 1)
+ state->aout_gain = opts->audio_gain;
+
}
diff --git a/src/p25p2_xcch.c b/src/p25p2_xcch.c
index 200ee5b..02545f9 100644
--- a/src/p25p2_xcch.c
+++ b/src/p25p2_xcch.c
@@ -150,6 +150,10 @@ void process_SACCH_MAC_PDU (dsd_opts * opts, dsd_state * state, int payload[180]
// fprintf (stderr, "ENC");
}
+ //reset gain
+ if (opts->floating_point == 1)
+ state->aout_gain = opts->audio_gain;
+
}
if (state->currentslot == 0)
@@ -186,6 +190,10 @@ void process_SACCH_MAC_PDU (dsd_opts * opts, dsd_state * state, int payload[180]
// fprintf (stderr, "ENC");
}
+ //reset gain
+ if (opts->floating_point == 1)
+ state->aout_gainR = opts->audio_gain;
+
}
fprintf (stderr, "%s", KNRM);
}
@@ -216,7 +224,11 @@ void process_SACCH_MAC_PDU (dsd_opts * opts, dsd_state * state, int payload[180]
if (opts->mbe_out_f != NULL) closeMbeOutFile (opts, state);
//blank the call string here -- slot variable is already flipped accordingly for sacch
- sprintf (state->call_string[slot], "%s", " "); //21 spaces
+ sprintf (state->call_string[slot], "%s", " "); //21 spaces -- wrong placement!
+
+ //reset gain
+ if (opts->floating_point == 1)
+ state->aout_gain = opts->audio_gain;
}
if (state->currentslot == 0)
@@ -238,6 +250,14 @@ void process_SACCH_MAC_PDU (dsd_opts * opts, dsd_state * state, int payload[180]
//close any open MBEout files
if (opts->mbe_out_fR != NULL) closeMbeOutFileR (opts, state);
+
+ //blank the call string here -- slot variable is already flipped accordingly for sacch
+ sprintf (state->call_string[slot], "%s", " "); //21 spaces -- wrong placement!
+
+ //reset gain
+ if (opts->floating_point == 1)
+ state->aout_gainR = opts->audio_gain;
+
}
fprintf (stderr, "%s", KNRM);
}
@@ -406,6 +426,10 @@ void process_FACCH_MAC_PDU (dsd_opts * opts, dsd_state * state, int payload[156]
// fprintf (stderr, "ENC");
}
+ //reset gain
+ if (opts->floating_point == 1)
+ state->aout_gain = opts->audio_gain;
+
}
if (state->currentslot == 1)
@@ -441,6 +465,10 @@ void process_FACCH_MAC_PDU (dsd_opts * opts, dsd_state * state, int payload[156]
// fprintf (stderr, "ENC");
}
+ //reset gain
+ if (opts->floating_point == 1)
+ state->aout_gainR = opts->audio_gain;
+
}
fprintf (stderr, "%s", KNRM);
@@ -471,6 +499,10 @@ void process_FACCH_MAC_PDU (dsd_opts * opts, dsd_state * state, int payload[156]
//blank the call string here
sprintf (state->call_string[slot], "%s", " "); //21 spaces
+
+ //reset gain
+ if (opts->floating_point == 1)
+ state->aout_gain = opts->audio_gain; //reset
}
if (state->currentslot == 1)
@@ -492,6 +524,10 @@ void process_FACCH_MAC_PDU (dsd_opts * opts, dsd_state * state, int payload[156]
//close any open MBEout files
if (opts->mbe_out_fR != NULL) closeMbeOutFileR (opts, state);
+
+ //reset gain
+ if (opts->floating_point == 1)
+ state->aout_gainR = opts->audio_gain;
}
fprintf (stderr, "%s", KNRM);
}