From b996d95b1c3242c81fcd7ff3efeb6f9712a34dd2 Mon Sep 17 00:00:00 2001 From: lwvmobile <59371473+lwvmobile@users.noreply.github.com> Date: Fri, 25 Feb 2022 15:09:06 -0500 Subject: [PATCH] Append WAV Files Append to WAV files as opposed to overwriting them each time Minor Tweaks to NCURSES terminal in regards to NXDN, update call log on systems with RAN of 0 --- src/dsd_file.c | 16 +++++++++++----- src/dsd_main.c | 15 ++++++--------- src/dsd_ncurses.c | 9 +++++---- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/dsd_file.c b/src/dsd_file.c index c4a74e8..c08a2b5 100644 --- a/src/dsd_file.c +++ b/src/dsd_file.c @@ -89,7 +89,10 @@ saveAmbe2450Data (dsd_opts * opts, dsd_state * state, char *ambe_d) fputc (b, opts->mbe_out_f); } - //fprintf(stderr, "\n"); + if (opts->payload == 1) + { + fprintf(stderr, " err = [%X] [%X] ", state->errs, state->errs2); + } b = ambe_d[48]; fputc (b, opts->mbe_out_f); fflush (opts->mbe_out_f); @@ -237,8 +240,12 @@ closeMbeOutFile (dsd_opts * opts, dsd_state * state) fclose (opts->mbe_out_f); opts->mbe_out_f = NULL; strftime (datestr, 31, "%Y-%m-%d-%H%M%S", &timep); - //sprintf (newfilename, "nac%X-%s-tg%i%s", state->nac, datestr, talkgroup, ext); + sprintf (newfilename, "%s%s", datestr, ext); //this one + if (state->lastsynctype == 0 || state->lastsynctype) + { + sprintf (newfilename, "%s-nac%X-tg%i%s", datestr, state->nac, talkgroup, ext); + } sprintf (new_path, "%s%s", opts->mbe_out_dir, newfilename); #ifdef _WIN32 sprintf (shell, "move %s %s", opts->mbe_out_path, new_path); @@ -307,13 +314,12 @@ void openWavOutFile (dsd_opts * opts, dsd_state * state) { - // opts->wav_out_f = fopen (opts->wav_out_file, "w"); - SF_INFO info; info.samplerate = 8000; //8000 info.channels = 1; info.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16 | SF_ENDIAN_LITTLE; - opts->wav_out_f = sf_open (opts->wav_out_file, SFM_WRITE, &info); + //opts->wav_out_f = sf_open (opts->wav_out_file, SFM_WRITE, &info); + opts->wav_out_f = sf_open (opts->wav_out_file, SFM_RDWR, &info); //RDWR will append to file instead of overwrite file if (opts->wav_out_f == NULL) { diff --git a/src/dsd_main.c b/src/dsd_main.c index 9e2f45a..616b8bb 100644 --- a/src/dsd_main.c +++ b/src/dsd_main.c @@ -294,7 +294,7 @@ initState (dsd_state * state) state->debug_header_errors = 0; state->debug_header_critical_errors = 0; - state->nxdn_last_ran = 0; + state->nxdn_last_ran = -1; #ifdef TRACE_DSD state->debug_sample_index = 0; @@ -328,17 +328,14 @@ usage () fprintf (stderr," -z Frame rate for datascope\n"); fprintf (stderr,"\n"); fprintf (stderr,"Input/Output options:\n"); - //fprintf (stderr," -i Audio input device (default is /dev/audio, - for piped stdin, rtl for rtl device)\n"); fprintf (stderr," -i Audio input device (default is pulse audio, - for piped stdin, rtl for rtl device)\n"); - //fprintf (stderr," -o Audio output device (default is /dev/audio)\n"); fprintf (stderr," -o Audio output device (default is pulse audio)\n"); fprintf (stderr," -d Create mbe data files, use this directory\n"); fprintf (stderr," -r Read/Play saved mbe data from file(s)\n"); fprintf (stderr," -g Audio output gain (default = 0 = auto, disable = -1)\n"); - //fprintf (stderr," -n Do not send synthesized speech to audio output device\n"); fprintf (stderr," -w Output synthesized speech to a .wav file\n"); - fprintf (stderr," -a Display port audio devices\n"); - fprintf (stderr," -W Monitor Source Audio When No Sync Detected (WIP!)\n"); + //fprintf (stderr," -a Display port audio devices\n"); + //fprintf (stderr," -W Monitor Source Audio When No Sync Detected (WIP!)\n"); fprintf (stderr,"\n"); fprintf (stderr,"RTL-SDR options:\n"); fprintf (stderr," -c RTL-SDR Frequency\n"); @@ -382,8 +379,8 @@ usage () fprintf (stderr," (default=36)\n"); fprintf (stderr," -M Min/Max buffer size for QPSK decision point tracking\n"); fprintf (stderr," (default=15)\n"); - fprintf (stderr," -n Reset P25 Heuristics and initState variables on mixed decoding signal\n"); - fprintf (stderr," Helps when decoding multiple signal types at same time\n"); + fprintf (stderr," -n Reset P25 Heuristics and initState variables on mixed signal decoding\n"); + fprintf (stderr," Helps when decoding mixed signal types at same time\n"); fprintf (stderr," (WiP! May Cause Slow Memory Leak - Experimental)\n"); fprintf (stderr," -Z Log MBE Payload to console\n"); fprintf (stderr,"\n"); @@ -786,7 +783,7 @@ main (int argc, char **argv) case 'w': strncpy(opts.wav_out_file, optarg, 1023); opts.wav_out_file[1023] = '\0'; - fprintf (stderr,"Writing audio to file %s\n", opts.wav_out_file); + fprintf (stderr,"Writing + Appending audio to file %s\n", opts.wav_out_file); openWavOutFile (&opts, &state); break; case 'B': diff --git a/src/dsd_ncurses.c b/src/dsd_ncurses.c index 13fc49e..98057d7 100644 --- a/src/dsd_ncurses.c +++ b/src/dsd_ncurses.c @@ -106,6 +106,7 @@ void ncursesOpen () init_pair(5, COLOR_MAGENTA, COLOR_BLACK); //Magenta for no frame sync/signal noecho(); cbreak(); + //fprintf (stderr, "Opening NCurses Terminal. \n"); } @@ -164,7 +165,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) //if ( (state->nxdn_last_rid != src && src > 0) || (state->nxdn_last_ran != rn && rn > 0) ) //find condition to make this work well, probably if last != local last variables //if ( (call_matrix[9][2] != src && src > 0) || (call_matrix[9][1] != rn && rn > 0) ) //NXDN working well now with this, updates immediately and only once - if ( call_matrix[9][2] != src && src > 0 && rn > 0 ) //NXDN working well now with this, updates immediately and only once + if ( call_matrix[9][2] != src && src > 0 && rn > -1 ) //NXDN working well now with this, updates immediately and only once { for (short int k = 0; k < 9; k++) { @@ -260,7 +261,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) } if (opts->wav_out_file[0] != 0) { - printw ("| Writing Audio WAV to file %s\n", opts->wav_out_file); + printw ("| Appending Audio WAV to file %s\n", opts->wav_out_file); } printw ("------------------------------------------------------------------------------\n"); @@ -295,7 +296,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) src = state->nxdn_last_rid; //rn = state->nxdn_last_ran; } - if (state->nxdn_last_ran > 0 && state->nxdn_last_rid != rn); + if (state->nxdn_last_ran > -1 && state->nxdn_last_rid != rn); { //src = state->nxdn_last_rid; rn = state->nxdn_last_ran; @@ -344,7 +345,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) printw("| ALG: [0x%02X] ", state->payload_algid); printw("KEY: [0x%04X] ", state->payload_keyid); //printw("MFG: [0x%X] ", state->payload_mfid); //no way of knowing if this is accurate info yet - if (state->payload_keyid != 0 && state->carrier == 1) + if (state->payload_algid != 0x80 && state->carrier == 1) { attron(COLOR_PAIR(2)); printw("**ENC**");