Commit Graph

18 Commits (12844f67c5d746e267756a10b2056db9d719e4ff)

Author SHA1 Message Date
Mooneer Salem 12844f67c5
Second pass at pipeline optimization. (#975)
* Don't write UT features until the end of TX/RX.

* Attempt 2 at preventing spurious Linux asan failures.

* Add PR #975 to changelog.

* Revert "Attempt 2 at preventing spurious Linux asan failures."

This reverts commit 8f53d1a980.

* Another attempt at preventing spurious asan failures.

* Revert back to k6aq.net hosted wheels.

* Resolve warnings in pipeline tests.

* ResampleStep: skip processing if no samples available.

* TapStep: execute in separate thread.

* Fix issue causing mic audio to stop when using Speex.

* Add a bit more time between loads.

* Use -O3 for libsamplerate to see if that helps.

* Revert "Add a bit more time between loads."

This reverts commit 1273d6531e.

* Disable content caching during CI build.

* Add printout of sysctl for debugging.

* Try speexdsp resampling to see if we can reduce CPU usage.

* Slightly increase quality.

* Increase quality again.

* Fix monitor functions not producing audio.

* Reenable Instruments tracing.

* Experiment: update librade to grab sync and SNR while running RX.

* Update SNR retrieval to make sure it happens on RX thread.

* Bump up resample quality again.

* Go back to libsamplerate.

* Use same semaphore wait time calculation for macOS as with other platforms.

* Try 20ms time quantum.

* Try 40ms.

* Back to 60ms.

* Wait needs to be based on start of work.

* Revert "Go back to libsamplerate."

This reverts commit 86d1c640ff.

* Try maximum quality on speex resampler first.

* Go back to calling fwrite() immediately on FIFO read.

* Revert resampler changes, again.

* Try experimental RADE branch again.

* Out of left field: try 2.9ms quantum like what Chrome uses.

* Improve reliability of Linux rade_loss test.

* Smooth out longer than expected semaphore waits on macOS.

* Fix compiler errors.

* Put quantum back to 60ms.

* Fix compiler error.

* More experimentation with time quantums.

* Use relaxed atomic semantics for macOS worker counter.

* Back to 2.9ms due to mpp test failures.

* Disable processing stats.

* Time quantum should match buffer size.

* Remove unneeded variable.

* Time quantum was accidentally getting set to 0.

* Try to reduce standard deviation for macOS wait time.

* Revert previous change, try just halving the wait time.

* Try to reduce likelihood of scheduler contention on macOS.

* macOS: Set lower thread QoS for non-audio threads.

* Using infinite wait for ThreadedObject.

* Force lowest possible latency.

* We can reference the activity ID directly.

* Avoid crash on stop from previous changes.

* Revert recent PulseAudioDevice changes in case those are causing 22.04 tests to fail.

* Try different macOS flag to improve responsiveness.

* Remove memset call from TX handling.

* Disable real-time threading on macOS.

* Use setiopolicy_np() to make sure writing RADE features doesn't interfere with the rest of the app.

* Resample input file for rade_loss test to lower CPU usage.

* Try soxr resampler for further CPU usage reductions.

* Forgot missed file.

* On macOS CI runs, we should also use the Homebrew soxr package.

* Revert soxr adoption, does not meet real time safety guidelines.

* Try deferring feature file writes until the end again.

* Turn on PYTHONOPTIMIZE.

* Read/write entire blocks from FIFO, not just single samples.

* Warning cleanup.

* Allow partial output if FIFO gets empty.

* Remove unneeded memset().

* Fix race condition preventing user from properly being hidden from FreeDV Reporter on startup.

* Downgrade additional pipeline threads to Utility QoS.

* Try malloc-free FIFO for RADE steps.

* Use 2048 samples instead.

* Use PreAllocatedFIFO in RADE steps to avoid cache misses.

* Use MKL enabled version of numpy for Intel macOS.

* Try Intel MKL version of PyTorch for macOS.

* Fix GH compiler issue on macOS ARM.

* Replace sleep_for with semaphore for TapStep.

* Only signal semaphore every 100ms like with previous sleep_based impl.

* Replace additional sleeps with semaphore waits.

* Fix compiler error.

* Adjust timing thresholds for dumping feature debug data.

* macOS: reenable real-time threading as a test.

* Make sure both RX and TX threads start processing at the same time.

* Update missed shared_ptr reference.

* Remove hidden allocation due to use of lambdas.

* Undo FIFO size reduction.

* Suppress spurious PlaybackStep completion messages.

* Fix CI compiler error.

* Use Time Profiler to get a better idea as to why RADE steps intermittently take longer to execute.

* g_voice_keyer_tx should use acquire/release.

* Revert "Use Time Profiler to get a better idea as to why RADE steps intermittently take longer to execute."

This reverts commit 711f83be0c.

* Only grab TX status once through the GUI timer.

* Only get sync once per timer run.

* Remove use of wxThread from TxRxThread.

* Use relaxed for retrieving sync status.

* Test: disable Mic In plot.

* Try using relaxed memory ordering.

* Revert "Use relaxed for retrieving sync status."

This reverts commit 364bc62e8c.

* Revert "Try using relaxed memory ordering."

This reverts commit bac5a8a799.

* One more attempt at using Speex resampler.

* Add optimizations for PlotScalar in case it's impacting test runs.

* Reenable lower quality level for plots.

* Try quality level 6.

* Actually fix spurious playback complete log messages.

* Back to quality level 10.

* macOS: Begin wait from end of work.

* Try DISPATCH_TIME_FOREVER.

* Revert "Try DISPATCH_TIME_FOREVER."

This reverts commit a913e8573e.

* Revert "macOS: Begin wait from end of work."

This reverts commit 7c719a3e3c.

* Add crazy hack to inhibit the UI thread while the pipeline is executing.

* Try checking pipeline spinlock every time we have to redraw something.

* Try actually sleeping instead of yielding.

* Revert crazy hack.

* Use separate RX thread instead of ThreadedTimer.

* Begin splitting GUI timer work into separate timers.

* Only update sync and TX state on the timers that need it.

* Defer item updates until highlights are updated.

* Delete accidentally added files.

* Try smaller block sizes.

* Try bigger block size for comparison.

* Re-disable real-time threading.

* Preallocate what we need to output RX/TX features.

* No need to duplicate bitmap to draw onto graphics context. (Reduces number of mmap() calls req'd on macOS.)

* Reenable real time threading.

* Force 50ms time quantum regardless of buffer size.

* Update reporting timers to attempt to guarantee that only one is active at a time.

* Add safety offset to BlackHole virtual audio device.

* WIP: Reduce CPU usage in PlotWaterfall.

* Fix compiler errors and rendering bugs.

* Fix compile error for real this time.

* Don't update FreeDV Reporter window if it's not actually visible.

* Back to 60ms time quantum.

* Back to 50ms.

* Slightly adjust how IsShownOnScreen() suppresses updates.

* Just use an array instead of map for PlotScalar.

* Prevent propagation of changes to FreeDV Reporter window unless something actually changed.

* Tweak Speex resampler quality again.

* Resample level 7.

* Don't need to recreate ThreadedTimer thread every time we need to restart.

* Try not running xctrace to see if we're close to fixing the issues.

* Wait a bit more time between loop iterations when playing UT recordings.

* Revert "Try not running xctrace to see if we're close to fixing the issues."

This reverts commit decff7a5b2.

* Add Time Profiler to xctrace files.

* Make all FreeDV Reporter rows invisible when window is not visible.

* Make FreeDV Reporter object synchronous.

* Add support for queuing on parent object thread instead of own.

* Fix Linux segfault.

* Use macOS Dispatch for ThreadedObject.

* Try disabling threading in TapStep.

* Reenable threading for TapStep.

* More quality level tweaking.

* Re-disable separate threading.

* Only allocate memory for feature storage if necessary.

* Use GCD for TapStep.

* Fix compiler error on Linux.

* Tweak maximum sizes of FIFOs based on recorded max usage during ctests.

* Additional adjustments to FIFO sizes.

* More tweaks of FIFO sizes for Linux.

* Disable workflow telemtry for macOS runs.

* Fix syntax error.

* Revert "Use GCD for TapStep."

This reverts commit e1522a7ab3.

* Fix memory violations when using PlotScalar.

* Fix rendering bugs from previous optimization.

* Try only returning numInputSamples at a time from vocoders.

* Revert src/pipeline to last passed build.

* Quality level 8 works better locally.

* Try 40ms blocks on macOS.

* Reduce the number of context switches while handling FreeDV Reporter traffic.

* Try reducing FIFO sizes again.

* Try reverting PyTorch upgrade.

* Didn't fully revert PyTorch changes.

* SoX is ignoring errors from Core Audio, use buffer sizes known to work.

* SoX divides by 8 to produce frame size sent to CoreAudio.

* Reset resampler back to last known working level.

* Update Linux/macOS audio code to match Windows implementation more closely.

* Try 40ms blocks again.

* Add middle click reset support for speaker/mic level.

* Revert "Try 40ms blocks again."

This reverts commit 3ca16e0335.

* Have FreeDV itself load test.wav due to performance limitations in GH environment.

* GitHub Actions: Disable iCloud (!)

* Need to set config value and not the slider (middle-click).

* Disable xctrace collection.

* Disable mic/speaker level slider unless modem is active.

* Return to libsamplerate for ResampleStep.

* MacAudioDevice cleanup.

* Remove unneeded warning message.

* Need memory_order_acquire for legacy sync state.

* Try RADE main branch again.

* Debugging: see if anything else is running that shouldn't be.

* GitHub: disable Spotlight too.

* Fix typo in README.

* Reenable macOS runner debugging.

* Include mimalloc for a bit extra boost.

* Disable mimalloc ctests.

* Disable macOS debugging again.

* mimalloc wasn't actually being used on macOS.

* mimalloc: decrease purge interval.

* Fix hidden memory allocation during TX output handling.

* Fix additional hidden memory allocations.

* Unit test: make sure rade_loss shows sync state.

* More hidden memory allocation removals.

* Further reduce duplicate memory allocations.

* Fix voice keyer bug reported by @barjac.

* More cleanup of unneeded allocations.

* Fix mini versions of scalar plots (discovered during testing).

* Remove some wxAsyncCallEventFunctor instances from gprof profile.

* Fix compiler error.

* Additional refactoring and memory allocation reduction.

* Extend purge delay a bit just in case.

* Allow GitHub Actions to re-execute test in case of an intermittent failure.

* Fix typo in rade_reporting test.

* Minor reduction in allocations during FreeDV Reporter RX handling.

* Use std::atomic for PlaybackStep.

* Revert "Use std::atomic for PlaybackStep."

This reverts commit 0ee65a38eb.

* Return nullptr to PlaybackStep if not actively playing.

* PlaybackStep: wait for main thread to finish stopping TX instead of previous approach.

* Fix rendering issue going between TX and RX.

* Fix issue where VK monitor plays previously TX audio prior to current VK cycle.

* Fix segfault in Hamlib on pressing Stop.

* Add missed destroying check while setting PTT.

* Additional cleanup in rig_control due to previous commits.
2025-08-30 09:18:53 -07:00
Mooneer Salem cf50015088
Work around issues when using Bluetooth devices on macOS. (#971)
* Fix PortAudio compile issue on macOS.

* Tweak macOS audio device initialization.

* Add resample shortcut logic to avoid going through libsamplerate if in/out rates are the same.

* Initialize TX audio devices before RX in case sample rates change.

* Add optional debugging output for AudioPipeline.

* Avoid use of ParallelStep for RADE.

* Add extra protection in RADE TX step just in case.

* Partial revert of createReceivePipeline changes.

* Rewrite macOS audio code to use traditional Core Audio instead of AVAudioEngine.

* Try again at removing ParallelStep from RADE RX.

* Fix missed change in GH actions.

* Fix Linux test failure.

* Previous change was in the wrong place.

* Bring back CFString method of retrieving device names.

* Use higher device latencies if we detect a Bluetooth device.

* Try 30ms interval time to avoid GH failures.

* Revert "Try 30ms interval time to avoid GH failures."

This reverts commit f6bd8e1a57.

* Use integer math for calculating block sizes.

* Also use integer math for FRAME_DURATION.

* Add additional timeout for Windows builds.

* Rename MacAudioDevice.mm -> .cpp.

* Ignore required misspelling.

* Add PR #971 to changelog.

* Fix Registry update issue during GH Windows tests.

* Allow rade_loss ctest to work better in RT context.

* Attempt to avoid the spurious Reporter-related LeakSanitizer failures on shutdown.

* We don't need to have latency so high for Bluetooth.

* Let's try memcpy for GenericFIFO.

* Another attempt at eliminating the LeakSanitizer error.

* Try previous RX implementation again.

* Revert "Try previous RX implementation again."

This reverts commit cc0f08f2e9.

* Slightly increase block times.
2025-07-15 22:44:36 -07:00
Mooneer Salem 469b22dbc7
Make explicit various codec2 dependencies to avoid compile race condition. (#957)
* Make explicit various codec2 dependencies to avoid compile race condition.

* Add PR #957 to changelog.

* No need to use build_rade as the dependency if we're using rade.

* Forgot to check in a change.

* Looks like we need the larger FIFO after all.

* Use SRC_SINC_FASTEST for plots.

Should be low to no-impact as previous RADE testing showed only a slight quality
decrease vs. SRC_SINC_MEDIUM_QUALITY.

* Update changelog.

* Back to SRC_LINEAR.

* Update comments.

* Don't fail fast for Linux builds.

* Add libsamplerate deps where appropriate.

* Add sndfile deps.

* Revert "Add sndfile deps."

This reverts commit dc00a3b7cd.

* Revert "Add libsamplerate deps where appropriate."

This reverts commit 65c4766c20.

* Reenable processing stats.

* Try building with -O3.

* Try building using LTO.

* Revert "Try building using LTO."

This reverts commit 2536a15dd2.

* Revert "Try building with -O3."

This reverts commit 8b9b824a88.

* Revert "Reenable processing stats."

This reverts commit 5b0d31b1a2.
2025-07-05 10:37:10 -07:00
Mooneer Salem d5aa1d9eb4
Various code changes to reduce dropouts/pipeline execution jitter. (#949)
* Experimental changes to resampling to reduce pipeline execution jitter.

* Cap the number of times through the TX and RX loops.

* Faster resampler for ComputeRfSpectrum step (RX only).

* Ensure we're not overrunning FIFOs on RX.

* Force all Linux tests to run to see how many end up failing now.

* Fix RADE reporting test failures.

* Revert "Force all Linux tests to run to see how many end up failing now."

This reverts commit 6ba267b758.

* Only try processing FRAME_DURATION ms at a time for TX.

* Fix intermittent RADE reporting failure.

* Make sure runner can exit ASAP when ParallelStep is being destroyed.

* Make sure we can only do one stop() at a time.

* Force all Linux tests to run to see how many end up failing now.

* Remove caps on number of cycles through TX and RX loops.

* Reenable all tests on Ubuntu 22.04.

* We don't need to call opus_select_arch() every single time through the loop.

* Python 3.11 works better on 22.04.

* Forgot to update AppRun for 3.11.

* Revert fail-fast for AppImage tests.

* Revert other fail-fast.

* Slightly increase PulseAudio latency to avoid RADE dropouts.

* Test change.

* Test change.

* Test change.

* Revert "Test change."

This reverts commit 2eee1e538d.

* Revert "Test change."

This reverts commit 8205c3b097.

* Revert "Test change."

This reverts commit c9ba8b45b2.

* Revert latency changes.

* For some reason, increasing the wait in the UT code makes the RADE test pass more reliably on 22.04.

* Increase wait time to 5s.

* Revert "Increase wait time to 5s."

This reverts commit 1ca459a02a.

* Revert "For some reason, increasing the wait in the UT code makes the RADE test pass more reliably on 22.04."

This reverts commit f267814b50.

* Try another way of increasing sleep time.

* Revert "Try another way of increasing sleep time."

This reverts commit 5a11c59167.

* Re-arrange sleeps.

* Increase time again.

* Revert "Increase time again."

This reverts commit 44073477ef.

* Revert "Re-arrange sleeps."

This reverts commit edbe451601.

* Wrap globals relevant to TX in atomic.

* Slightly increase default FIFO size.

* Trigger build.

* Trigger build.

* Trigger build.

* Trigger build.

* Trigger build.

* Revert "Trigger build."

This reverts commit 7210e745de.

* Revert "Trigger build."

This reverts commit 3fc2059d76.

* Revert "Trigger build."

This reverts commit 66d64cfe8a.

* Revert "Trigger build."

This reverts commit df745e8a77.

* Revert "Trigger build."

This reverts commit 80945de3b8.

* Add macOS 15 to GitHub tests.

* Code cleanup.

* Create ifdefs for disabled logic.

* Add PR #949 to changelog.

* See if reducing default FIFO size will work.
2025-07-04 15:45:36 -07:00
Mooneer Salem 420890f672
PulseAudio: Make sure we can only do one stop() at a time. (#955)
* Make sure we can only do one stop() at a time.

* Add PR #955 to changelog.

* Run all ctests on Ubuntu 22.04.
2025-07-01 21:14:47 -07:00
Mooneer Salem 1cb14f6d8a
Build AppImages as part of CI workflow. (#937)
* Initial check-in of files from Peter's repo.

* NO_STRIP isn't necessary on Ubuntu.

* Build AppImage as part of CI workflow.

* Try copying user's Python libraries.

* Force setting PYTHONHOME/PYTHONPATH inside FreeDV code.

* Fix PYTHONHOME paths.

* Clean up unneeded code.

* Have GitHub sanity check AppImage on clean build agents.

* Forgot to install pipewire and X inside test agent.

* Build AppImage on 22.04 instead due to glibc incompatibilities.

* apt update prior to building AppImage.

* Need GTK if we're going to build our own wxWidgets.

* Need to use Python 3.10 when building AppImages on 22.04.

* Restructure Linux tests to hopefully take less time to run.

* Forgot keyword.

* Fix typo.

* Need to run UT in debug mode.

* ASan needs to be run with gcc.

* Use PulseAudio instead of pipewire when testing AppImage on 22.04.

* Include version number in AppImage filename.

* Fix typo.

* Fix filename for AppImage testing.

* Build dependencies ourselves.

* Forgot that we duplicated the Sanity Check step.

* Ensure sanity check step fails if we lose sync.

* Run unit tests on 22.04 as well.

* Add missed GDK_BACKEND export.

* Transmit at least 2x during rade_reporting_* tests.

This is because the logic to calculate RTT between "rig" and FreeDV doesn't
fully complete until after the first TX->RX transition. By transmitting 2x,
we ensure that this logic is also exercised and thus reduce the number of
failures in the GitHub environment.

* latency_msec doesn't work with PulseAudio.

* On 22.04, limit tests to fullduplex_* to avoid GH environment problem.

* Add minimum requirements to user manual.

* Fix rendering issue while debugging test problem in local Ubuntu 22.04 environment.

* Forgot to add a tee command to the 24.04 test.

* Try 10ms latency for Pulse audio.

* Remove std::vector from RADE TX/RX steps just in case that's causing problems.

* CLOCK_MONOTONIC seems to have higher reliability for Linux tests.

* Fix compiler warning.

* WIP user manual update.

* Revert UI fix as it breaks things on macOS.

* Experiment: try to test AppImage in Fedora on GitHub.

* Try again without rtkit.

* Forgot to remove systemctl calls

* FUSE is required for AppImage.

* Use alternate method of running AppImage.

* Try third-party Fedora 41 systemd image to stop dropouts.

* Pass --init to Fedora container.

* Try another container for Fedora.

* No ps in container.

* Use podman to run container instead.

* Add missed DBus packages.

* Forgot to start pipewire.

* Start pipewire after dbus is set up.

* Use different way to start pipewire.

* podman might need to run as root.

* Forgot quote.

* Fix environment not getting passed to podman.

* Experiment: see if Fedora 41 can be tested too.

* Revert "Experiment: see if Fedora 41 can be tested too."

This reverts commit c751ab2c77.

* Bring back previous GUI bugfix but limit it to wxWidgets < 3.2.

* Fix timespec bug discovered during performance profiling.

* Forgot to capture rv.

* Revert back to CLOCK_REALTIME.

* Remove additional sleep on semaphore timeout.

* Need to use sem_clockwait if we're going to use monotonic time.

* Remove comment that no longer applies.

* Add PR #937 to changelog.

* Fix memory leak reported by ASan.

* Deploy GTK dependencies as part of AppImage.

* Add additional protection to avoid dropouts.

* Use deque instead of vector for function queues due to better worst-case complexity.

* Warning cleanup.

* Documentation update.

* Fix macOS compiler error.

* Eliminate the need to install Octave in GitHub environment.

* Have all macOS jobs run at once to save time.
2025-06-24 08:57:46 -07:00
Mooneer Salem 5bd401b03a
Fix compiler errors when using wxWidgets 3.0. (#914)
* Fix compiler errors when using wxWidgets 3.0.

* Add GH action to make sure we can compile on Ubuntu 22.04.

* Fix package name.

* Add PR #914 to changelog.

* Ensure only one build per branch happens at a time.
2025-06-05 12:36:24 -07:00
Mooneer Salem e9ec9347d9
Make sure RTSan-related code isn't added if not installed. (#900)
* Make sure RTSan-related code isn't added if not installed.

* Enable RTSan checks in GH Actions.

* Fix syntax error in GH action.

* Fix GCC compile failures.

* Use different GH workflow to get correct Clang installed.

* Split RTSan test into separate build and test steps

* Move LLVM installation to beginning in case there are side effects.

* Prevent dynamic resampling in AudioPipeline when playing back files.

* Mixed up sample calculation, causing tests to fail.

* Additional changes to see if it still hangs.

* Update cmake-macos.yml

* Do completion check after queuing to output FIFO.

* Fix buffer overflow.

* Some additional changes based on local testing.

* GH tests weren't actually being run through the resampler.

* Remove ExclusiveAccessStep files as they're not being used.

* Remove some logging that shouldn't be in RT context.

* Add reset() to IPipelineStep to avoid repeated deallocations and reallocations of the TX pipeline.

* Fix segfault from previous changes.

* Remove RADE specific logging in RT context and suppress RTSan for RADE EOO handling.

* Disable RTSan for RADE text handling.

* Try disabling real-time for macOS.

* Force Windows 2022.

* Revert "Try disabling real-time for macOS."

This reverts commit c8ee871406.

* Experiment: use O(1) heap allocator for Codec2.

* Fix patch commands.

* thread_local is only in C++11 and above.

* Force codec2 folder to be removed every call.

* Update codec2 patch.

* Fix Windows compiler error.

* Oops, should be _aligned_malloc.

* Integrate codec2 into source tree so we don't need to deal with patch.

* Update Codec2 README.

* mbest needs to use o1heap too.

* Remove rtsan disable from FreeDV TX/RX steps.

* Bring back AudioPipeline change previously removed by master merge.

* Result resampler needs to be initialized on construction.

* Create resampler only if input and output rates don't match.

* Increase Codec2 RT heap size.

* Fix Windows failures.

* Ensure separate threads spawned from PipelineStep are also checked by RTSan.

* Support RTSan builds on macOS if user has appropriate LLVM.

* Remove no longer needed patch.

* Remove unneeded resettingThread property.

* Fix issue discovered during testing.

* Test: match Linux and macOS requested latency to Windows.

* Add PR #900 to changelog.
2025-06-05 08:17:24 -07:00
Mooneer Salem 30c9e5b9c6
Remove 800XA, 700C, 2020 and 2020B. (#889)
* Remove 800XA, 700C, 2020 and 2020B from UI,

* Remove additional 700C references in UI.

* Remove 2020/AVX detection logic from codebase.

* Remove LPCNet from build scripts.

* Add PR #889 to changelog.

* Forgot to remove LPCNet from Windows installer generation.

* Generate Release build for GH workflows.

* Disable PSK Reporter reporting during test execution as invalid callsigns are used.

* Build type was being overwritten.

* Missed mutex removal.

* Temporarily use Instruments to trace macOS CI execution.

* Minor update.

* Use 2 minute window in xctrace to actually capture wanted events.

* Disable xctrace execution but keep in tests just in case.

* Hide main window during tests to prevent GUI from interfering.

* Experiment: set infifo2 max length to 30 seconds

* Oops, forgot to remove division from previous commit.

* Deallocation of PulseAudio stream should occur while mainloop is locked.

* Revert "Hide main window during tests to prevent GUI from interfering."

This reverts commit 69689bb927.

* Based on online code snippets nullptr for neg is fine.

* Clear PYTHONHOME if set on the user's system (Windows/macOS only).

* Bring back locking in TxRxThread just in case.

* Remove unneeded backslash.

* Revert "Bring back locking in TxRxThread just in case."

This reverts commit fc6a9f8797.

* Manually back out the changes instead of using git checkout.

* Use shared_ptr for LinkStep.

* Try removing the TX mode change mutex again.

* Try moving actual codec activity out of RT context.

* Fix compiler error.

* Fix issue preventing legacy modes from transmitting.

* Another attempt at preventing RX dropouts.

* Try putting mode TX into separate threads again.

* Only limit output samples if input samples were provided.

* Put codec RX back into RT context.

* Put TX on RT context.

* Remove unused code.

* Deallocation should occur only in the destructor.

* Fix Windows spectrum plot formatting issues.

* Prevent buffer overflow during TX/RX processing.

* Bring FRAME_DURATION back down to 10ms.

* We want to feed samples into the RADE/FreeDV TX/RX FIFOs regardless of whether there's room in the output.

* ParallelStep should only feed FRAME_DURATION ms worth of samples at a time.

* Sleep fallback should track FRAME_DURATION.

* Don't execute the parallel steps if there isn't enough room in the output FIFO.

* We really can only inject a portion of EOO samples at a time.

* Queue EOO as a single unit to ensure it gets transmitted as a unit.

* Allow ParallelStep to provide up to 4x the number of input samples as output.

* Back to processing 20ms frames.

* Run GH Linux tests using asan enabled.

* Suppress Python related memory leaks and Hamlib related invalid memory accesses.

* Forgot suppressions= in test execution.

* Add more leak suppressions based on GH output.

* Resolve memory leaks.

* Fix broken RadeTextTest.

* Additional suppressions from GH.

* Go back to processing TxNumSpeechSamples every TX cycle.

* Revert "Go back to processing TxNumSpeechSamples every TX cycle."

This reverts commit abe816d00b.

* Fix 1600 mode dropouts.

* Make TX single-threaded again.

* Revert back to last working pipeline logic (for fullduplex_* anyway).

* Revert most EOO behavior.

* Run AddressSanitizer tests separately as they interfere with real time audio.

* Need to start Xvfb etc. before asan tests.

* Only a subset of tests need to run with asan enabled.

* Fix issue causing PTT input not to work.

* Maybe we don't need to restart servers after all.

* Try using rtkit to ask for high priority instead of RT.

* Clear FIFOs a different way.

* Windows: determine minimum number of audio channels supported.
2025-05-26 12:29:47 -07:00
Mooneer Salem 2a290d809a
Enable color emojis in the FreeDV Reporter window (#861)
* WIP patch to wxWidgets to enable color emojis on Windows.

* WIP rewrite of FreeDV Reporter window to use wxDataViewCtrl.

* Apparently we need to associate the model before adding columns.

* Force render the Msg column using Direct2D, causing emojis to display in color.

* Move ReportMessageRenderer to a separate file.

* Only use ReportMessageRenderer on Windows. Also, make sure we don't show ellipsis unless for the Msg field.

* Bring back preservation of sort column.

* Bring back preservation of Msg column width.

* Support Request QSY functionality again.

* Fix rendering issues on macOS.

* Fix Windows compiler errors.

* Fix rendering issue on Windows from previous commits.

* Use correct selection foreground color when rendering with Direct2D.

* Set minimum column widths.

* Column headings should be centered.

* Batch up item changed notifications during refresh.

* Reenable clipboard and tooltip support.

* Ellipsize message text on Windows.

* Allow tooltips to at least show when clicking on a row.

* Have emojis display in color in tooltips as well.

* Add warning message when not building wxWidgets ourselves.

* Only notify of adding new connection if visible.

* Add additional checks around ItemAdded/ItemDeleted.

* Add/remove items individually every refresh to avoid intermittent Linux crashes.

* Defer memory deallocation until after the UI actually removes the item from view.

* Another attempt at fixing the crash.

* Need to validate pointer in GetAttr() too.

* Undo previous changes, try locking allReporterData_ instead.

* Fix Hamlib compiler failure due to changes in 4.6.

* Add some missed locks.

* Replace locks with assertions that we're on the main thread.

* Probably don't need to defer delete.

* Add additional checking around query methods.

* Warning cleanup.

* Make sure items are unselected before deleting.

* Unselect selected user once QSY request has been sent.

* Force a complete redraw when rows go away.

* Try another way of forcing a redraw.

* We only need to call Cleared() once per row.

* Improve CPU usage.

* Aggressively clear selected users when not actively interacting with them.

* Sort by connect time if no columns are selected for sorting.

* PAIn thread should be RT too (missed from previous PR).

* Force a re-sort on connect.

* Resort on every update from the server.

* Sort fix that hopefully doesn't crash.

* Some minor additional changes.

* Disable PAIn thread and just rely on the normal PulseAudio callbacks for passing audio in and out.

* Make re-sorting happen only once a second.

* Try putting mutexes around all data access.

* Increase RLIMIT_RTTIME just in case.

* Add missed locks.

* RT limit was set too high.

* Sleep for less time than latency if possible.

* Fix crash in TapStep while stopping.

* Defer FreeDV Reporter initialization on startup to make sure GUI is up beforehand.

* Try again to get RTKit to work in the GH environment.

* Try capping maxlength to avoid RX FIFO full errors.

* Increase max buffer size due to overrun errors.

* Default maxlength for output devices to prevent overruns.

* Try bringing back PAin thread. WIP

* Add missed PulseAudio locking.

* Remove more missed mallocs from RT path.

* Remove unneeded code from PulseAudio logic.

* Tab cleanup.

* Increase RX FIFO size.

* Force sleep if we take much longer than expected (avoids kill by rtkit).

* Forgot to check in file.

* Fix compiler error for real.

* Fix issue causing occasionally being unable to get the mic input on macOS.

* Add timeout for EOO in case we lose input devices.

* Add additional protection to prevent the OS from killing the app.

* macOS: get device names an alternate way to avoid empty names for certain devices.

* Make RX plots more reliable when pipewire sends multiple seconds of RX audio at once.

* Oops, used wrong comparison for EOO timeout.

* Catch SIGXCPU in case we exceed RT limits.

* Prevent RX processing from occurring if there's no space in the output FIFO.

* Apparently I was setting the soft and hard rlimits to be the same.

* Lower soft RT limit to 10ms.

* Disable RT scheduling on Linux.

* Added additional protection against server-caused race condition.

* Defer add to table until after we get connection successful message.

* Add missed lock on connect successful message.

* Add missed visibility check.

* Fix issue on Linux.

* Add additional logging to help diagnose duplicate callsign issue.

* Downgrade additional logging to debug/verbose only.

* Fix bug where incorrect SNR was being reported for RADE signals after EOO received.

* Back out previous change buffering rows until fully connected as it doesn't work properly on Windows.

* Fix right-click menu regression.

* Fix issue preventing column sorting on Windows.

* Upgrade wxWidgets to 3.2.8.

* Right-click should not select items.
2025-05-01 12:29:38 -07:00
Mooneer Salem 439e54035f
Request real-time priority from the operating system for audio pipeline (#866)
* Bound requested frames between both min and max.

* Request real-time scheduling for pipeline threads (currently macOS-only).

* Ensure pipeline threads never execute at the same time as audio threads.

* macOS: ask for 5ms audio blocks.

* Temporarily re-enable stress test.

* Suppress codespell for .mm files.

* Swap times/buffer sizes.

* Fix compiler error.

* Go back to previous frame size and time.

* Re-disable stress test.

* Try adjusting time quantum.

* Move audio priority handling to audio layer.

* Set helper thread to real-time on Windows.

* Temporarily disable audio workgroup code.

* Disable periodicity in macOS RT request

* Forgot to define variable.

* Only allow a max of 50% CPU time for audio helpers.

* More tuning of the duty cycle.

* Make sure we sleep some amount of time every time through the loop.

* Go back to smaller time quantum.

* Another quantum tweak.

* Increase audio sample block size to 20ms.

* Use 2.5ms for audio block time.

* Try increasing FIFO sizes for RX.

* Oops, forgot to comment out the / 1000 too.

* Get faster turnaround for macOS GH builds.

* Revert FIFO changes.

* Add additional debugging.

* Fix compiler error.

* Fix typo.

* Use semaphores to notify TX/RX worker threads.

* Try dividing duty cycle by 2 to avoid starvation.

* Reenable audio workgroups.

* No point in having parallel threads if only one mode is active.

* Ensure that ParallelStep gets added to the audio workgroup too.

* Anything for GUI consumption shouldn't be in the RT path.

* Go back to 10ms audio blocks to see if reporting tests can more reliably pass.

* Fix issue causing audio to not work on certain Macs.

* Support real-time threading on Linux when using PulseAudio/pipewire.

* Fix misspelling.

* dbus needs to be installed in the environment.

* macOS: try a smaller block size again.

* Revert "macOS: try a smaller block size again."

This reverts commit 1d21ad6934.

* Try architecture-specific audio block times.

* rtkit itself also needs to be installed in the environment.

* Revert ordering changes to macOS CI builds.

* GH user needs to be added to rtkit group.

* Implement semaphores on Windows.

* Don't exit the render/capture threads unless requested by higher level code.

* Don't take address of a pointer.

* macOS: set thread QoS for RT threads.

* Move RADE RX/TX memory allocations out of real-time path.

* Moving additional memory allocations outside of RT context.

* Move all remaining allocations in pipeline outside of RT except for legacy FreeDV modes.

* Longer audio block times don't seem to be making a difference.

* Move legacy mode memory allocations out of RT context.

* Prevent unbounded mutex locks inside pipeline.

* Windows: fallback to a simple sleep if we can't lock the semaphore.

* Increase maximum wait time to match what Windows returns for buffer size.

* PulseAudio: fallback to simple sleep if we can't wait on semaphore.

* Prevent unbounded locking in TapStep.
2025-04-23 00:18:24 -07:00
Mooneer Salem 149d37230b
Move to using native audio on macOS and Windows (#847)
* Initial implementation of macOS audio handling using native APIs.

* Fix minor calculation issue in Easy Setup when generating sine waves.

* Fix spelling error.

* Fix issue causing distorted output audio.

* Refactor audio device info retrieval to a separate method.

* Get channel information for discovered macOS audio devices.

* Add support for retrieving default audio devices.

* Try using AVAudioSinkNode for getting mic/RX audio.

* Use AVAudioSourceNode for output side too.

* Fix compiler error.

* Set minimum macOS version to 10.15 due to PyTorch and new audio code requiring it.

* Disable universal build in GH action to make it run a bit faster.

* Additionally use Homebrew packages as deps instead of building own for GH action.

* Don't build hamlib if BUILD_DEPS is 0.

* Use matrix to test macOS build on both x86_64 and ARM64.

* Experiment: always sleep for 10ms every time through the TX/RX loop.

* Temporarily enable longer tests to make sure previous pass wasn't a fluke.

* Remove logic not available in 10.15.

* Revert "Experiment: always sleep for 10ms every time through the TX/RX loop."

This reverts commit 6019c9a522.

* Need to query valid sample rates from Core Audio.

* Validate provided sample rate and channel data when creating audio object.

* Set device sample rate to user-configured option.

* Sample rates could be different between input and output.

* Revert "Temporarily enable longer tests to make sure previous pass wasn't a fluke."

This reverts commit f90c4cd081.

* Remove now unused code.

* Harmonize native vs. PortAudio config across build scripts.

* Zero out audio by default to prevent buzzing.

* Update README to use new environment variable for audio driver control.

* Add COM wrapper class around ThreadedObject. Prerequisite for WASAPI audio support.

* Disable OLE 1.0 per Windows documentation.

* WIP WASPI device enumeration.

* Forgot to check in some changes.

* Fix compiler errors.

* Avoid deadlock during sample rate list retrieval.

* s/WASPI/WASAPI/g

* WIP WASAPIAudioDevice design.

* Full WASAPIAudioDevice implementation.

* Increase priority of audio tasks to prevent dropouts.

* Add missed nullptr initialization.

* Increase buffer time to 40ms

* Fix issue where non-English device names were getting corrupted.

* Add additional logging.

* Need to create macOS audio device name just like with Windows.

* Update README to document new config options.
2025-03-31 22:35:35 -07:00
Mooneer Salem d14ba38ed6
Port ezDV FreeDV Reporter implementation to freedv-gui (#836)
* Embed sioclient source code into FreeDV codebase.

* Exclude 3rdparty from spellcheck.

* Revert "Embed sioclient source code into FreeDV codebase."

This reverts commit 2021118544.

* Embed ZIP file with sioclient code instead of individual files.

* Generate tarball on Linux as CMake behaves weird with a macOS-created ZIP file.

* Add json and websocketpp source files.

* Add ThreadedTimer (prerequisite for own socket.io implementation).

* Adapt ezDV implementation of sioclient.

* Update FreeDVReporter to use our SocketIoClient.

* Fix bugs preventing connection to FreeDV Reporter server.

* Read all data available every 50ms.

* Fix bug preventing hide/show from working properly.

* Remove sioclient tarball and build logic.

* Fix Linux build issue.

* Work around exception bug on object destruction.

* Fix Windows build failure.

* Ensure that connection is actually closed if we stop being in contact with the server.

* Fix additional segfault on exit.

* Sockets on Windows aren't actually fully POSIX.

* Use ulog for websocketpp logging.

* Update comments in recently added files.

* Additional logging cleanup.

* Show IP address that failed connection.

* Reduce websocketpp buffer size to match what's used in our read logic.

* Fix spelling error.

* Fix issue with corrupted IP addresses being logged.

* Add additional logic to make absolutely sure we're done with DNS.

* Make sure whichIndex is valid once we complete DNS.

* Widen Mode field on bottom of main window.
2025-03-06 12:37:41 -08:00
Mooneer Salem 93770acdde
Add support for sending callsigns using RADE (#783)
* Prevent EOO from being repeatedly sent during TX stop.

* Make sure we don't accidentally overflow the output FIFO when transmitting EOO.

* Add additional logging to verify EOO behavior.

* Fix issue preventing EOO from being sent on voice keyer completion.

* Scale EOO the same as the primary waveform.

* Remove #ifdef code per PR comment.

* Use main branch for RADE.

* Add initial support for RADE callsign handling.

* Add additional logging and try different way to calculate amps.

* More debugging. We should also make sure all of EOO is initialized to 'zero'.

* Testing and other changes:

1. Add RadeTextTest to rule out any issues with freedv-gui.
2. Calculate RMS magnitude across all EOO bits, not just the ones used by RADE text.

* Fix test so it actually runs on Linux.

* Disable temporary fprintf of symbols.

* GH environment gave different BER, so let's try positive ROT45.

* set_eoo_bits should be receiving OFDM symbols.

* Don't fault if we don't have a RX callback.

* Fix issue preventing ctest from working in GH environment.

* Reenable interleaving.

* Initial code cleanup.

* Reformat code to make it easier to read.

* Inject noise into the TX sample in the ctest.

* Add initial test scripts for verifying RADE reporting.

* Add some sleeps since the UT framework can issue GUI events faster than the audio can escape FreeDV.

* Add ctest for test_rade_reporting.sh.

* Add RADE reporting noise test.

* Use codec2 ch tool to generate noise.

* Add raw/coded BER debugging output for tests.

* Fix formula used for BER.

* Update ctest to use mpp instead of AWGN, similar to RADE repo.

* Bring back AWGN test.

* Add Octave to build environment.

* Update cmake-macos.yml

* Fix buffer overrun from previous changes.

* Accidentally included previous change.

* Ensure we have defaults for txattempts and txtime.

* Coded BER should use output of LDPC decode.

* Install octave-signal in macOS CI environment.

* Need to pass -forge in to install signal properly.

* Need octave-control too.

* Need gcc to build control/signal.

* Some additional stuff is needed to get gfortran working.

* Need to use gcc 14 instead.

* Add debugging.

* Fix typo.

* Homebrew uses /opt/homebrew.

* Clarify logging as we also report to FreeDV Reporter.

* Forgot to update ctest acceptance criteria due to logging change.

* Add logic to output TX/RX floats to files.

* rade_text should handle stuffing of unused EOO bits, not upstream code.

* Test framework: remove hardcoded 5s delay after startup request.

* Calculate raw BER across entire EOO, not just the used portion.

* Code cleanup and EOO calculation fixes.

* FreeDV Reporter: only highlight for 2 seconds if there's no RX callsign.

* Switch RADE branch to main as EOO changes have now been merged.
2024-12-27 15:08:24 -08:00
Mooneer Salem 0d40130f2e
Add tests to verify lack of sync loss in RX (#761)
* Add logic for automatically running RX/TX tests.

* Add GH action to load loopback audio driver.

* Add ctest configuration file.

* Try loading modules after installing packages.

* Add additional required packages.

* Add automated test script.

* Temporarily disable GH action changes.

* Have RX take 60 seconds as well.

* Ubuntu upgrade broke /bin/sh.

* Fix issue preventing no zero message from printing.

* Print sync status once per second and validate no resyncs.

* Fix spelling error.

* Switch to RADE main.

* Another attempt at enabling aloop in the GH action.

* Use _ instead of - for module name.

* Use pacmd to create virtual sound devices instead.

* Check sync state every 100ms instead of every 1s.

* Fix issue preventing sync changes from making it to the log.

* Add full duplex test.

* Add full duplex tests to CMakeLists.

* Generate sine wave for TX.

* Update GH action to allow new ctests to run.

* Add debugging for UT.

* pipewire-pulse is needed to actually use PipeWire.

* Install suggested packages to get additional required commands.

* Can't use --install-suggests, so explicitly mention packages.

* Enable pipewire service.

* Fix call to helper Python script.

* Show status of pipewire prior to running tests.

* Remove status display from GH action.

* Use module-loopback to simulate TX plugged into RX.

* Try explicitly starting pipewire.

* Use strict 20ms cadence for TX/RX thread instead of relying on the audio subsystem.

* Need to install wireplumber as well.

* Update regular expression in ctest as sync change message isn't printed unless there's a problem.

* Add RADE to ctests.

* RADE ctest pass wasn't actually a pass.

* Need to explicitly check for LINUX for PulseAudio based ctests.

* Reenable PortAudio build.

* Invert test criteria.

* Show pipewire status just before thye test run.

* List sink info prior to each test.

* Make sure virtual devices aren't suspended.

* Need to have the suspension disable code in another file.

* Actually, installing pulseaudio isn't a good idea.

* Need a window manager for things to refresh properly.

* Display wireplumber info after FDV start.

* Add additional sleep to guarantee that FreeDV is listening when wireplumber status is printed.

* Add pw-top for additional info.

* dbus needs to be running for pipewire to work.

* Need to wait a bit for Xvfb to become available.

* Get additional pipewire logs prior to UT run.

* Install/run rtkit too.

* Attempt to get pipewire logs after test execution.

* Looks like we still need to start pipewire manually.

* Further increase pipewire debugging.

* Too much debugging output before.

* Upgrade packages first before installing new ones.

* We weren't actually running 24.04 on GH.

* Adjust packages due to using 24.04.

* Suppress spellcheck issue.

* Disable pipewire debugging.

* Test changes to PulseAudioDevice to improve dropouts.

* Update tests to reflect 1 resync per 120s proposed threshold.

* Disable additional debugging output.

* Allow override of test audio devices from the command line.

* Enable ctests on macOS.

* getSync() isn't thread safe, causing false UT failures.

* Install virtual audio devices in CI environment for macOS.

* Use script to build drivers instead.

* Oops, forgot to remove some code first.

* Adjust permissions of script.

* Make tests work on Linux again with loopback devices.

* Attempt change to make virtual audio devices actually build.

* Try building on x86 macOS.

* Fix quote escape issues.

* More quote escape issues.

* Forgot missed folder change.

* Enable mirrored virtual audio devices.

* Fix incorrect device names in ctest execution.

* Need to append '2ch' to the other device names too.

* Clear sync when transmitting.

* Grant microphone access to FreeDV.

* Need to back out one of the changes due to voice keyer problems.

* Attempt to fix CI failures.

* Take screenshot of macOS CI environment for debugging.

* Let's try running the script separately to get a screenshot.

* Screenshot was in the wrong place.

* Need to grant access to provisioner for microphone.

* Alternate way of granting permissions.

* Oops, remove call to tccutil.

* Per PLT meeting, we shouldn't drop sync at all.

* Shorten test time to 60s.

* More tweaks to make sure that the devices are correct on Linux.

* Disable screen capture.

* Additional fixes to resolve script problems on macOS.

* I don't think previous PulseAudio changes made anything better.

* Improve dropouts when using PulseAudio/pipewire.

* Revert "Improve dropouts when using PulseAudio/pipewire."

This reverts commit f16c27f4d3.

* Have stream write callback get audio data from higher level code.

* Add PowerShell script for Windows testing.

* Move ctest files into a separate location for organization purposes.

* Add parameters for PowerShell test script.

* Add help text for the script.

* Update conf file path due to previous commits.

* Fix syntax errors in script.

* Experiment: Test Windows installer on GH action.

* Try actually running full duplex test inside Windows.

* Add 5 seconds to allow Xvfb to fully come up.

* Update other actions to use latest checkout.

* Need VS command prompt.

* Add additional debugging.

* Maybe we need to throw an exception to make the GH action fail.

* List devices another way.

* Add yet more debugging.

* Fix audio devices.

* Try with 700D to at least make sure we're on the right track.

* Fix GH action.

* Fix syntax errors.

* Try installing VAC instead as FreeDV is crashing with Scream.

* Fix syntax error.

* Try different hardware ID.

* Ignore error code that actually means success.

* Oops, fix syntax error.

* Try earlier version of VAC.

* Fix archive commands.

* Fix path.

* Probably need to start AudioEndpointBuilder too.

* Stop services first.

* Print out any errors that might be getting thrown.

* Revert "Print out any errors that might be getting thrown."

This reverts commit 15e3908c80.

* Disable test GH action for Windows and investigate failure later.

* Reenable Windows testing with new way of debugging.

* Add logging based on clues from Windows event log.

* Revert "Add logging based on clues from Windows event log."

This reverts commit de4f11362e.

* Use procdump to get a crash dump.

* Full dump seems to take a while.

* Run procdump in the background.

* Log audio errors.

* Print device name in error message.

* Make sure message box doesn't display.

* Enable additional PortAudio debugging.

* Add yet more logging.

* Add additional Registry key to ensure FreeDV has microphone permissions.

* Need to add Registry key.

* Add more keys to try to force microphone permission.

* Clean up debugging, add tests for RADE/700E/1600.

* More cleanup.
2024-11-23 08:08:40 -08:00
Mooneer Salem e7f7b35646
Integrate RADE into FreeDV application (#748)
* Include very basic Python install in the FreeDV Windows installer.

* Bump version to 2.0.0 devel.

* Adjust pth file to allow pip to work.

* Create post-install script. Not tied into the installer yet.

* Install needed packages during setup.

* Fix issue preventing uninstall commands from being properly added to the installer.

* Add RADE binaries to installer for initial tests.

* Suppress RADAE/RADE in code spelling check.

* Fix additional compiler errors.

* Fix GitHub actions on Linux and macOS.

* Print API version later on startup so it'll actually show up in the Windows console.

* Enforce minimum 16 kHz sample rate for voice keyer files.

* Disallow sample rates lower than 16000 in audio config.

* Initial support for RX using librade.

* Adjust dependencies in CMake infrastructure to make sure RADE/Opus build before FreeDV code.

* Add GUI for RADE.

* Add forgotten files.

* Add initialize/finalize calls for RADE.

* Add progress text to post-install script.

* Adjust paths based on recent RADE commits.

* Add basic support for RADE TX.

* Output EOO on end of TX.

* Fix error preventing Windows installer from being created without 2020 mode.

* Change working directory to folder containing freedv.exe.

* Remove quotes from messages in post-setup script.

* Fix compiler errors.

* Fix assertion failure in PlaybackStep.

* Fix assertion failure in FreeDVInterface.

* Suppress warnings during post-install.

* Get missed bugfixes from previous PR.

* Test changes to get GH actions working again for Windows.

* Forgot to install WINE in GH action.

* Try win64 instead of win32 for WINE.

* wine32 and not wine64

* Try different way of installing wine.

* Remove packages that don't exist.

* Oops, actually installed Python 3.12.7.

* Use normal Python installer instead of wenv.

* Need to make sure wine runs in console-only.

* Use Wine from Ubuntu.

* Install wine32 too.

* Ignore return value.

* Use xvfb since trying to bypass doesn't work for winecfg.

* s/xvfb/xvfb-run/

* Separate WINE install from Python.

* More tweaks to the GH workflow.

* wine64 instead of wine

* Use WINEARCH when creating env.

* test changes

* Start xvfb separately.

* xvfb -> Xvfb

* Add debugging

* Forgot :

* Make WINE think it's Windows 10.

* Back to using wine-staging.

* Reenable xvfb.

* Fix cmake invocation.

* Integrate BuildOpus changes from RADE.

* Ensure Opus is built for minimum supported FreeDV version.

* Warning cleanup.

* Ensure RADE is actually built as a universal binary.

* Include basic Python into the .app file.

* macOS version now builds. Still need to figure out how to get modules installed.

* Resolve problems preventing proper execution of the macOS binary.

* torchvision isn't necessary.

* Fix reporting so that we report RADE instead of 'unk'.

* Expire devel versions of FreeDV after six months.

* Attenuate RADE TX by 4dB to avoid needing to adjust TX Attenuation dial just for that mode.

* Disable 2020/2020B on all platforms.

* Stop building 32 bit Windows builds.

* Move RADE mode to the top of the mode list.

* Tweak preprocess function for RADE.

* Update Windows Python to 3.12.7.

* Re-disable ARM Windows builds while we figure out how to build it.

* Build Wine in signing environment.

* Update wxWidgets to 3.2.6.

* Workaround time display issue in FreeDV Reporter on macOS.

* Limit number of numpy/OpenBLAS threads due to known issues with their interaction with Python/C++ threading.

* Add additional guarding around Codec2 FIFO calls.

* Split off DMG creation into separate target to save time during development.

* Use dr-reset for initial release.
2024-10-20 18:09:11 -07:00
Mooneer Salem 9bddc18b66 Run ctests when GitHub workflow executes. 2022-04-25 00:16:21 -07:00
Mooneer Salem 89a5e7012f Remove Mac build, create Windows one. 2022-03-24 22:48:28 -07:00