From 1b18139e411e0f97efef9a99bc3b6ac7652aaf81 Mon Sep 17 00:00:00 2001 From: lwvmobile Date: Wed, 19 Jul 2023 16:29:18 -0400 Subject: [PATCH] Custom User Wav File with -7 option; --- include/dsd.h | 1 + src/dsd_main.c | 67 +++++++++++++++++++++++++++++++++++------------ src/dsd_ncurses.c | 22 ++++++++-------- 3 files changed, 62 insertions(+), 28 deletions(-) diff --git a/include/dsd.h b/include/dsd.h index fa6bf35..186802e 100644 --- a/include/dsd.h +++ b/include/dsd.h @@ -233,6 +233,7 @@ typedef struct float audio_gainR; int audio_out; int dmr_stereo_wav; + char wav_out_dir[512]; char wav_out_file[1024]; char wav_out_fileR[1024]; char wav_out_file_raw[1024]; diff --git a/src/dsd_main.c b/src/dsd_main.c index c217a39..1e1d56d 100644 --- a/src/dsd_main.c +++ b/src/dsd_main.c @@ -517,6 +517,7 @@ initOpts (dsd_opts * opts) opts->split = 0; opts->playoffset = 0; opts->playoffsetR = 0; + sprintf (opts->wav_out_dir, "%s", "WAV"); opts->mbe_out_dir[0] = 0; opts->mbe_out_file[0] = 0; opts->mbe_out_fileR[0] = 0; //second slot on a TDMA system @@ -1136,7 +1137,9 @@ usage () 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 (" -w Output synthesized speech to a .wav file, legacy auto modes only.\n"); + 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"); printf (" -P Enable Per Call WAV file saving in XDMA and NXDN decoding classes\n"); printf (" (Per Call can only be used in Ncurses Terminal!)\n"); printf (" (Running in console will use static wav files)\n"); @@ -1736,22 +1739,51 @@ main (int argc, char **argv) fprintf (stderr,"Writing + Appending LRRP data to file %s\n", opts.lrrp_out_file); break; + case '7': //make a custom wav file directory in the current working directory -- use this before -P + strncpy(opts.wav_out_dir, optarg, 511); + opts.wav_out_dir[511] = '\0'; + if (stat(opts.wav_out_dir, &st) == -1) + { + fprintf (stderr, "%s directory does not exist\n", opts.wav_out_dir); + fprintf (stderr, "Creating directory %s to save wav files\n", opts.wav_out_dir); + mkdir(opts.wav_out_dir, 0700); + } + else fprintf (stderr,"Writing wav decoded audio files to directory %s\n", opts.wav_out_dir); + break; + case 'P': //TDMA/NXDN Per Call - was T, now is P - sprintf (wav_file_directory, "./WAV"); - wav_file_directory[1023] = '\0'; - if (stat(wav_file_directory, &st) == -1) - { - fprintf (stderr, "-P %s WAV file directory does not exist\n", wav_file_directory); - fprintf (stderr, "Creating directory %s to save decoded wav files\n", wav_file_directory); - mkdir(wav_file_directory, 0700); //user read write execute, needs execute for some reason or segfault - } - fprintf (stderr,"XDMA and NXDN Per Call Wav File Saving Enabled. (NCurses Terminal Only)\n"); - sprintf (opts.wav_out_file, "./WAV/DSD-FME-X1.wav"); - sprintf (opts.wav_out_fileR, "./WAV/DSD-FME-X2.wav"); - opts.dmr_stereo_wav = 1; - openWavOutFileL (&opts, &state); - openWavOutFileR (&opts, &state); - break; + sprintf (wav_file_directory, "%s", opts.wav_out_dir); + wav_file_directory[1023] = '\0'; + if (stat(wav_file_directory, &st) == -1) + { + fprintf (stderr, "-P %s WAV file directory does not exist\n", wav_file_directory); + fprintf (stderr, "Creating directory %s to save decoded wav files\n", wav_file_directory); + mkdir(wav_file_directory, 0700); //user read write execute, needs execute for some reason or segfault + } + fprintf (stderr,"XDMA and NXDN Per Call Wav File Saving Enabled. (NCurses Terminal Only)\n"); + sprintf (opts.wav_out_file, "./%s/DSD-FME-X1.wav", opts.wav_out_dir); + sprintf (opts.wav_out_fileR, "./%s/DSD-FME-X2.wav", opts.wav_out_dir); + opts.dmr_stereo_wav = 1; + openWavOutFileL (&opts, &state); + openWavOutFileR (&opts, &state); + break; + + // case 'P': //TDMA/NXDN Per Call - was T, now is P + // sprintf (wav_file_directory, "./WAV"); + // wav_file_directory[1023] = '\0'; + // if (stat(wav_file_directory, &st) == -1) + // { + // fprintf (stderr, "-P %s WAV file directory does not exist\n", wav_file_directory); + // fprintf (stderr, "Creating directory %s to save decoded wav files\n", wav_file_directory); + // mkdir(wav_file_directory, 0700); //user read write execute, needs execute for some reason or segfault + // } + // fprintf (stderr,"XDMA and NXDN Per Call Wav File Saving Enabled. (NCurses Terminal Only)\n"); + // sprintf (opts.wav_out_file, "./WAV/DSD-FME-X1.wav"); + // sprintf (opts.wav_out_fileR, "./WAV/DSD-FME-X2.wav"); + // opts.dmr_stereo_wav = 1; + // openWavOutFileL (&opts, &state); + // openWavOutFileR (&opts, &state); + // break; case 'F': opts.aggressive_framesync = 0; @@ -1767,10 +1799,12 @@ main (int argc, char **argv) strncpy(opts.audio_in_dev, optarg, 2047); opts.audio_in_dev[2047] = '\0'; break; + case 'o': strncpy(opts.audio_out_dev, optarg, 1023); opts.audio_out_dev[1023] = '\0'; break; + case 'd': strncpy(opts.mbe_out_dir, optarg, 1023); opts.mbe_out_dir[1023] = '\0'; @@ -1781,7 +1815,6 @@ main (int argc, char **argv) mkdir(opts.mbe_out_dir, 0700); //user read write execute, needs execute for some reason or segfault } else fprintf (stderr,"Writing mbe data files to directory %s\n", opts.mbe_out_dir); - // fprintf (stderr,"Writing mbe data temporarily disabled!\n"); break; case 'c': diff --git a/src/dsd_ncurses.c b/src/dsd_ncurses.c index ba8a1a1..ce63b64 100644 --- a/src/dsd_ncurses.c +++ b/src/dsd_ncurses.c @@ -635,7 +635,7 @@ void ncursesMenu (dsd_opts * opts, dsd_state * state) if (choicec == 5) { char wav_file_directory[1024]; - sprintf (wav_file_directory, "./WAV"); + sprintf (wav_file_directory, "%s", opts->wav_out_dir); wav_file_directory[1023] = '\0'; if (stat(wav_file_directory, &st_wav) == -1) { @@ -645,8 +645,8 @@ void ncursesMenu (dsd_opts * opts, dsd_state * state) } opts->dmr_stereo_wav = 1; //catch all in case of no file name set, won't crash or something - sprintf (opts->wav_out_file, "./WAV/DSD-FME-X1.wav"); - sprintf (opts->wav_out_fileR, "./WAV/DSD-FME-X2.wav"); + sprintf (opts->wav_out_file, "./%s/DSD-FME-X1.wav", opts->wav_out_dir); // + sprintf (opts->wav_out_fileR, "./%s/DSD-FME-X2.wav", opts->wav_out_dir); // openWavOutFileL (opts, state); openWavOutFileR (opts, state); @@ -2010,7 +2010,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) { //close old first, assign name based on time and radio, open wav file closeWavOutFileL (opts, state); - sprintf (opts->wav_out_file, "./WAV/%s %s NXDN - RAN %d - TGT %d - SRC %d.wav", getDateN(), getTimeN(), rn, tgn, src); + sprintf (opts->wav_out_file, "./%s/%s %s NXDN - RAN %d - TGT %d - SRC %d.wav", opts->wav_out_dir, getDateN(), getTimeN(), rn, tgn, src); openWavOutFileL (opts, state); //testing for now, will want to move to per call later } @@ -2047,7 +2047,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) { //close old first, assign name based on time and radio, open wav file closeWavOutFileL (opts, state); - sprintf (opts->wav_out_file, "./WAV/%s %s MS - CC %d - TG %d - RD %d.wav", getDateN(), getTimeN(), dcc, tg, rd); + sprintf (opts->wav_out_file, "./%s/%s %s MS - CC %d - TG %d - RD %d.wav", opts->wav_out_dir, getDateN(), getTimeN(), dcc, tg, rd); openWavOutFileL (opts, state); //testing for now, will want to move to per call later } @@ -2090,7 +2090,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) //close old first, assign name based on time and radio, open wav file closeWavOutFileL (opts, state); - sprintf (opts->wav_out_file, "./WAV/%s %s CC %d - TG %d - RD %d.wav", getDateN(), getTimeN(), dcc, tg, rd); + sprintf (opts->wav_out_file, "./%s/%s %s CC %d - TG %d - RD %d.wav", opts->wav_out_dir, getDateN(), getTimeN(), dcc, tg, rd); openWavOutFileL (opts, state); //testing for now, will want to move to per call later } @@ -2132,7 +2132,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) { //close old first, assign name based on time and radio, open wav file closeWavOutFileR (opts, state); - sprintf (opts->wav_out_fileR, "./WAV/%s %s CC %d - TG %d - RD %d.wav", getDateN(), getTimeN(), dcc, tgR, rdR); + sprintf (opts->wav_out_fileR, "./%s/%s %s CC %d - TG %d - RD %d.wav", opts->wav_out_dir, getDateN(), getTimeN(), dcc, tgR, rdR); openWavOutFileR (opts, state); //testing for now, will want to move to per call later } @@ -2173,7 +2173,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) { //close old first, assign name based on time and radio, open wav file closeWavOutFileL (opts, state); - sprintf (opts->wav_out_file, "./WAV/%s %s P1 - NAC %X - TGT %d - SRC %d.wav", getDateN(), getTimeN(), nc, tg, rd); + sprintf (opts->wav_out_file, "./%s/%s %s P1 - NAC %X - TGT %d - SRC %d.wav", opts->wav_out_dir, getDateN(), getTimeN(), nc, tg, rd); openWavOutFileL (opts, state); //testing for now, will want to move to per call later } @@ -3643,7 +3643,7 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) if (c == 80) //'P' key - start per call wav files { char wav_file_directory[1024]; - sprintf (wav_file_directory, "./WAV"); + sprintf (wav_file_directory, "./%s", opts->wav_out_dir); wav_file_directory[1023] = '\0'; if (stat(wav_file_directory, &st_wav) == -1) { @@ -3653,8 +3653,8 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) } opts->dmr_stereo_wav = 1; //catch all in case of no file name set, won't crash or something - sprintf (opts->wav_out_file, "./WAV/DSD-FME-T1.wav"); - sprintf (opts->wav_out_fileR, "./WAV/DSD-FME-T2.wav"); + sprintf (opts->wav_out_file, "./%s/DSD-FME-T1.wav", opts->wav_out_dir); + sprintf (opts->wav_out_fileR, "./%s/DSD-FME-T2.wav", opts->wav_out_dir); openWavOutFileL (opts, state); openWavOutFileR (opts, state); }