From b43e566f98b4d4b0838fb60e955e68ad51104382 Mon Sep 17 00:00:00 2001 From: lwvmobile Date: Tue, 26 Dec 2023 20:55:59 -0500 Subject: [PATCH] Patch - Test DMR Mono/Stereo Interleaving; #181 --- ...f_dmr_mono_stereo_interleaving_tests.patch | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 patch/wolf_dmr_mono_stereo_interleaving_tests.patch diff --git a/patch/wolf_dmr_mono_stereo_interleaving_tests.patch b/patch/wolf_dmr_mono_stereo_interleaving_tests.patch new file mode 100644 index 0000000..91dfc33 --- /dev/null +++ b/patch/wolf_dmr_mono_stereo_interleaving_tests.patch @@ -0,0 +1,105 @@ +diff --git a/src/dsd_audio2.c b/src/dsd_audio2.c +index a836afc..7b830c3 100644 +--- a/src/dsd_audio2.c ++++ b/src/dsd_audio2.c +@@ -906,8 +906,31 @@ void playSynthesizedVoiceSS3 (dsd_opts * opts, dsd_state * state) + //CHEAT: Using the slot on/off, use that to set encL or encR back on + //as a simple way to turn off voice synthesis in a particular slot + //its not really 'disabled', we just aren't playing it +- if (opts->slot1_on == 0) encL = 1; +- if (opts->slot2_on == 0) encR = 1; ++ // if (opts->slot1_on == 0) encL = 1; ++ // if (opts->slot2_on == 0) encR = 1; ++ ++ //this may have some unintended side effects that I haven't tested/explored yet, that's why its a patch only ++ //particularly in regards to 'Aero' Builds with their OSS Jank and slot_preference = 3 by default ++ //if rounds of testing in various scenaries looks good, I may expand this to P25p2 and the Float Variants as well ++ if (opts->slot1_on == 0 && opts->slot2_on == 1) //slot 1 is hard off and slot 2 is on ++ memcpy (state->s_l4, state->s_r4, sizeof(state->s_l4)); //copy right to left ++ else if (opts->slot1_on == 1 && opts->slot2_on == 0) //slot 2 is hard off and slot 1 is on ++ memcpy (state->s_r4, state->s_l4, sizeof(state->s_r4)); //copy left to right ++ else if (opts->slot_preference == 0 && state->dmrburstL == 16) //slot 1 is preferred, and voice in slot 1 ++ memcpy (state->s_r4, state->s_l4, sizeof(state->s_r4)); //copy left to right ++ else if (opts->slot_preference == 1 && state->dmrburstR == 16) //slot 2 is preferred, and voice in slot 2 ++ memcpy (state->s_l4, state->s_r4, sizeof(state->s_l4)); //copy right to left ++ else if (state->dmrburstL == 16 && state->dmrburstR != 16) //voice in left, no voice in right ++ memcpy (state->s_r4, state->s_l4, sizeof(state->s_r4)); //copy left to right ++ else if (state->dmrburstR == 16 && state->dmrburstL != 16) //voice in right, no voice in left ++ memcpy (state->s_l4, state->s_r4, sizeof(state->s_l4)); //copy right to left ++ //else if voice in both, and both slots on, and no preference on slot, then regular stereo interleave (left and right channels) ++ ++ if (opts->slot1_on == 0 && opts->slot2_on == 0) //both slots are hard off, disable playback ++ { ++ encL = 1; ++ encR = 1; ++ } + + //WIP: Mute if on B list (or not W list) + char modeL[8]; +diff --git a/src/dsd_main.c b/src/dsd_main.c +index 1d2616b..924bf00 100644 +--- a/src/dsd_main.c ++++ b/src/dsd_main.c +@@ -745,7 +745,7 @@ initOpts (dsd_opts * opts) + //slot preference is used during OSS audio playback to + //prefer one tdma voice slot over another when both are playing back + //this is a fix to OSS 48k/1 output +- opts->slot_preference = 0; //default prefer slot 1 -- state->currentslot = 0; ++ opts->slot_preference = 2; //default prefer slot 1 -- state->currentslot = 0; + + //hardset slots to synthesize + opts->slot1_on = 1; +diff --git a/src/dsd_ncurses.c b/src/dsd_ncurses.c +index 4646e77..fc3f28b 100644 +--- a/src/dsd_ncurses.c ++++ b/src/dsd_ncurses.c +@@ -2568,11 +2568,11 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) + { + printw ("| Voice Error: [%i][%i] Slot 1 (1)", state->errs, state->errs2); + if (opts->slot1_on == 0) printw (" OFF"); +- if (opts->slot1_on == 1) printw (" ON"); ++ if (opts->slot1_on == 1) printw (" ON"); if (opts->slot_preference == 0) printw (" *Preferred"); + printw ("\n"); + printw ("| Voice Error: [%i][%i] Slot 2 (2)", state->errsR, state->errs2R); + if (opts->slot2_on == 0) printw (" OFF"); +- if (opts->slot2_on == 1) printw (" ON"); ++ if (opts->slot2_on == 1) printw (" ON"); if (opts->slot_preference == 1) printw (" *Preferred"); + printw ("\n"); + } + printw ("------------------------------------------------------------------------------\n"); +@@ -3654,8 +3654,8 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) + //switching, but want to control each seperately plz + if (opts->slot1_on == 1) + { +- opts->slot1_on = 0; +- opts->slot_preference = 1; //slot 2 ++ opts->slot1_on = 0; if (opts->slot_preference == 0) opts->slot_preference = 2; ++ // opts->slot_preference = 1; //slot 2 + //clear any previously buffered audio + state->audio_out_float_buf_p = state->audio_out_float_buf + 100; + state->audio_out_buf_p = state->audio_out_buf + 100; +@@ -3680,8 +3680,8 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) + //switching, but want to control each seperately plz + if (opts->slot2_on == 1) + { +- opts->slot2_on = 0; +- opts->slot_preference = 0; //slot 1 ++ opts->slot2_on = 0; if (opts->slot_preference == 1) opts->slot_preference = 2; ++ // opts->slot_preference = 0; //slot 1 + //clear any previously buffered audio + state->audio_out_float_buf_pR = state->audio_out_float_bufR + 100; + state->audio_out_buf_pR = state->audio_out_bufR + 100; +@@ -3701,6 +3701,13 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state) + } + } + ++ if (c == 51) //'3' key, cycle slot preferences ++ { ++ if (opts->slot_preference < 2) ++ opts->slot_preference++; ++ else opts->slot_preference = 0; ++ } ++ + if (c == 43) //+ key, increment audio_gain + { +