mirror of
https://github.com/lwvmobile/dsd-fme.git
synced 2026-11-13 09:17:20 -05:00
Merge pull request #38 from lwvmobile/lwvmobile-patch-2
Append WAV Files
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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 <num> Frame rate for datascope\n");
|
||||
fprintf (stderr,"\n");
|
||||
fprintf (stderr,"Input/Output options:\n");
|
||||
//fprintf (stderr," -i <device> Audio input device (default is /dev/audio, - for piped stdin, rtl for rtl device)\n");
|
||||
fprintf (stderr," -i <device> Audio input device (default is pulse audio, - for piped stdin, rtl for rtl device)\n");
|
||||
//fprintf (stderr," -o <device> Audio output device (default is /dev/audio)\n");
|
||||
fprintf (stderr," -o <device> Audio output device (default is pulse audio)\n");
|
||||
fprintf (stderr," -d <dir> Create mbe data files, use this directory\n");
|
||||
fprintf (stderr," -r <files> Read/Play saved mbe data from file(s)\n");
|
||||
fprintf (stderr," -g <num> 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 <file> 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 <hertz> RTL-SDR Frequency\n");
|
||||
@@ -382,8 +379,8 @@ usage ()
|
||||
fprintf (stderr," (default=36)\n");
|
||||
fprintf (stderr," -M <num> 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':
|
||||
|
||||
@@ -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**");
|
||||
|
||||
Reference in New Issue
Block a user