where possible audio devices that disappear are not forgotten until
the user selects another device, this should allow temporarily missing
devices or forgetting to switch on devices before starting WSJT-X to
be handled more cleanly. If all else fails, visiting the Settings
dialog and clicking OK should get things going again. Note that we
still do not have a reliable way of detecting failed audio out
devices, in that case selecting another device and then returning to
the original should work.
Enumerating audio devices is expensive and on Linux may take many
seconds per device. To avoid lengthy blocking behaviour until it is
absolutely necessary, audio devices are not enumerated until one of
the "Settings->Audio" device drop-down lists is opened. Elsewhere when
devices must be discovered the enumeration stops as soon as the
configured device is discovered. A status bar message is posted when
audio devices are being enumerated as a reminder that the UI may block
while this is happening.
The message box warning about unaccounted-for input audio samples now
only triggers when >5 seconds of audio appears to be missing or over
provided. Hopefully this will make the warning less annoying for those
that are using audio sources with high and/or variable latencies. A
status bar message is still posted for any amount of audio input
samples unaccounted for >1/5 second, this message appearing a lot
should be considered as notification that there is a problem with the
audio sub-system, system load is too high, or time synchronization is
stepping the PC clock rather than adjusting the frequency to maintain
monotonic clock ticks.
uses a settings file to define log sink back-ends, by default uses
:/wsjtx_log_config.ini from the resources file-system. Users may
override by placing their own wsjtx_log_config.ini into the WSJT-X
config location. The settings file format is as described in the Boost
log
documentation (https://www.boost.org/doc/libs/1_74_0/libs/log/doc/html/log/detailed/utilities.html#log.detailed.utilities.setup.settings_file)
with the additional feature that allows some pre-defined variables to
be expanded. The predefined variables refer to standard locations in
the file-system, and allow log files and rotation target directory
paths to be specified. The pre-defined variables are:
DesktopLocation
DocumentsLocation
TempLocation
HomeLocation
CacheLocation
GenericCacheLocation
GenericDataLocation
AppDataLocation
and must be used enclosed on braces and preceded by a '$'
character. E.g. to define the pattern for a sink's log file:
FileName="${AppLocalDataLocation}/wsjtx_syslog.log"
this would place the log file wsjtx_syslog.log in the WSJT-X log files
directory, on all platforms.
Requires Boost libraries to be available as an external library.
On Debian style Linux distributions:
sudo apt install boost-dev-all
On Red Hat style Linux distributions:
sudo dnf install boost-dev
On macOS install Boost from a suitable Open Source package manager,
e.g. MacPorts:
sudo port install boost
If building WSJT-X packages on macOS for distribution you must build
boost and its dependants from sources with a suitable macports.conf
file specifying the target macOS version (10.12 at present). To build
Boost from sources in this case:
sudo port -s install boost
On MS Windows boost must be built from sources using the correct MinGW
compilers, i.e. the Qt tools 32- or 64-bit g++ for each target
bit-width respectively. To build boost something along the lines of
the following recipe should be used:
1) Download the boost ZIP source archive from
https://sourceforge.net/projects/boost/, the latest release should be
OK, at the time of writing that was 1.74,
2) create a directory for the sources:
MKDIR C:\boost-install
and extract the boost sources there.
3) Bootstrap and build Boost.Build. If you are building both 32- and
64-bit variants then do this twice, each from the correct MinGW
terminal session for the necessary tool-chain. Specify a unique
install directory for each variant (--prefix=). I use C:\Tools as a
root directory for external libraries and tools, choose whatever suits
your development environment.
CD C:\boost-install\boost_1_74_0\tools\build
bootstrap.bat gcc
b2 --prefix="C:\Tools\boost-build\MinGW32" install
CD C:\boost-install\boost_1_74_0\tools\build
bootstrap.bat gcc
b2 --prefix="C:\Tools\boost-build\MinGW64" install
4) Build Boost. If you are building both 32- and 64-bit variants then
do this twice, each from the correct MinGW terminal session for the
necessary tool-chain. Specify a unique build and install directory for
each variant (--build-dir= and --prefix=). I use C:\Tools as a root
directory for external libraries and tools, choose whatever suits your
development environment.
SET Path=%Path%;C:\Tools\boost-build\MinGW32\bin
CD C:\boost-install\boost_1_74_0
b2 --build-dir="C:\boost-install\boost_1_74_0\build" ^
--build-type=complete ^
--prefix="C:\Tools\boost\MinGW32" ^
toolset=gcc install
SET Path=%Path%;C:\Tools\boost-build\MinGW32\bin
CD C:\boost-install\boost_1_74_0
b2 --build-dir="C:\boost-install\boost_1_74_0\build" ^
--build-type=complete ^
--prefix="C:\Tools\boost\MinGW32" ^
toolset=gcc address-model=64 install
5) Once successfully built the sources directory and build trees
within can be deleted. The build products are contained in the install
directories (C:\Tools\boost-build and C:\Tools\boost in my case).
6) Update your development environment to include the boost headers
and libraries. In my case I have scripts that set up 32- and 64-bit
environments, they need to be modified to include the appropriate
boost library directories on the Path environment variable so that
applications linked to Boost libraries can locate the DLLs. For
32-bit:
SET Path=C:\Tools\boost\MinGW32\lib;%Path%
For 64-bit:
SET Path=C:\Tools\boost\MinGW64\lib;%Path%
7) To build WSJT-X CMake will need to be able to locate the Boost
libraries. I do that using tool-chain files for each of 32- and 64-bit
in both Debug and Release configurations which are passed to the CMake
configuration invocation using the -DCMAKE_TOOLCHAIN_FILE= variable
assignment. In the tool-chain files you need to add the appropriate
Boost installation directory to the CMAKE_PREFIX_PATH variable,
something like:
set (BOOSTDIR C:/Tools/boost/MinGW32)
...
set (CMAKE_PREFIX_PATH ${BOOSTDIR} ${QTDIR} ...
adjust as needed for 32- or 64-bit variants.
polynomial fit is done over 400 Hz bandwidth for T/R periods longer
than 15s, and over approx. 600 Hz (10 times the signal bandwidth) for
T/R period of 15s.
polynomial fit is done over 400 Hz bandwidth for T/R periods longer
than 15s, and over approx. 600 Hz (10 times the signal bandwidth) for
T/R period of 15s.
Passing `--language en', '-l en-US', or `-l en_US` now takes a special
action to not load any translations using the current locale. This
allows the current system UI language not to influence an translations
loaded via the command line override when the native en-US is wanted.
This allows the Spanish UI translation to work, for now, for all
Spanish speaking locales. If necessary we can make it es-ES if other
translators feel it is not a good base for their Spanish variant. OTOH
if they just need to l10n a few strings then, say for Argentina, then
they can do that in an wsjtx_es_AR.ts and untranslated strings there
will fall back to the ones in wsjtx_es.ts automatically. This happens
because of teh way the application loads multiple translation files in
an order suitable for that to happen.
Xavi, EA3W, assures me that all Catalan dialects and variants are
essentially the same, so there's no need to have country variant
specific Catalan translation files.
Re-enabling the WSJT-X i18n facilities. This allows translation files
to be created for languages that are automatically used to lookup
translatable strings. To enable a new language the language name must
be added to the CMakeLists.txt LANGUAGES list variable in BCP47 format
(i.e. en_US, en_GB, pt_PT, ...). Do one build with the CMake option
UPDATE_TRANSLATIONS enabled (do not leave it enabled as there is a
danger of loosing existing translated texts), that will create a fresh
translations/wsjtx_<lang>.ts file which should be immediately checked
in with the CMakeLists.txt change. The .ts should then be updated by
the translator using the Qt Linguist tool to add translations. Check
in the updated .ts file to complete the initial translation process
for that language.
To aid translators their WIP .ts file may be tested by releasing
(using the lrelease tool or from the Linguist menu) a .qm file and
placing that .qm file in the current directory before starting
WSJT-X. The translations will be used if the system locale matches the
file name. If the system locale does not match the file name; the
language may be overridden by setting the LANG environment variable.
For example if a wsjtx_pt_PT.qm file is in the current directory
WSJT-X will use it for translation lookups, regardless of the current
system locale setting, if the LANG variable is set to pt_PT or pt-PT.
On MS Windows from a command prompt:
set LANG=pt_PT
C:\WSJT\wsjtx\bin\wsjtx
elsewhere:
LANG=pt_PT wsjtx
The tool record_time_signal is designed to measure the performance of
QAudioInput. The intended use is to record a short period of live
audio from an on-air time signal of known good quaility, the basic
required parameters are an audio input device, an output file name
(.WAV), a start second in a minute, and a duration in seconds. So for
example to record the time signal ticks and fast data at the top of
the minute:
$ record_time_signal -o wwv.wav -s 55 -d 15
will record 15s of audio at 48000Hz sample rate, stereo, from the
default audio input device, starting at second 55. This will use a
separate timer to stop the recording which is likely to leave the
output file a little short due to buffer latency. The buffer size can
be adjusted using the '-b <buffered-frames>' option.
The tool also supoorts a different mechanism to time the recording
which uses the audio progress via a notify signal. This should ensure
at least the requested duration is recorded The shorter the notify
interval the closer teh final size shoould be to the requested
duration. Use the '-d <interval-ms>' option to adjust the notify
interval.
$ record_time_signal -o wwv.wav -s 55 -d 15 -n 100
Non-default audio devices can be selected, use the '-I' option to list
the available input devices with an index number that can be used to
select the device using the 'R <device-number>' option.
Other options are available, use '-h' for details.