4/6/23 |
Version 6.8.4
- Download
- Contents
- Overview
-
This release focuses on an Aircraft Survivability Equipment (ASE) sonification, past
sonifier
refinement, and AvadeServer improvements.
-
slab3d is now maintained by the U.S. Army Futures
Command, Combat Capabilities Development Command, Aviation & Missile
Center, Technology Development Directorate, Human-Systems Interface
Branch.
- Modification Details
- SRAPI - Slab3d Render API library
- slabmath.cpp - Bug Fix: fixed a pitch error in the previously
unused functions WrapPitchRads() and WrapPitchDegs().
- slabwire
- envelope.h - CEnvelope::SetPulse() now supports multiple
pulses.
- gslab - slab3d signal generators
- airsurv - the airsurv Aircraft Survivability Equipment (ASE)
generator was added that generates verbal ID (RWR "radar", MWS
"missile", and "lidar"),
mode, and clock position alerts, as well as lethality-based
rhythms.
- SlabSharp - C# extensions to the MSRAPI assembly
- SonAirSurv.cs - the AirSurv sonifier uses the airsurv
generator to support augmented-reality and diotic legacy ASE
cueing.
- SonLineTTCGen.cs - the sweeping emitter now extends beyond the
stanchion.
- SonObstacleLinearTTCGen.cs - now supports a warning mode
setting for risk space-based warnings versus distance-based
warnings.
- GenManager.cs - a A440 calibration sine preset was added for
the fiveosc generator.
- MapRangeToEnvLinearTTC.cs, MapRangeToEnvTTC.cs,
MapRangeToAmpTTC.cs - the blade radius was changed from 25' to
27'.
- AvadeServer application - spatial audio and sonification server
- The amp() command was added to support stream scalar gain
adjustment.
- The genset() command was added to allow the setting of
generator parameters.
- Fractional dB gain values can now be entered in the GUI.
- The Help page now supports search.
- The Help text now resides in AvadeDocumentation.rtf
in the executable directory. If this file does
not exist, hard-coded v6.8.4 alpha documentation is displayed.
- AvadeServer Script Files
- Several AvadeServer script files (avs_*.avf) were
added to the .\bin\ directory to support auditory display design and
sonification development for the "Operator State Monitoring and
Decision Making" studies conducted at Fort Eustis (OSM-DC1) and
Moffett Field (OSM-DC2).
- WinSpeak application - Text-To-Speech (TTS) utility
- An option now exists that causes each line of text to be
written to its own TTS wave file.
- .\wavs\ directory
- .\wavs\comm\ - artificial radio communication wave files
were added that were created using three TTS voices. Custom processing
was added based on three real-world radios.
- Comments
- I thank the U.S. Army Futures Command
for funding this iteration of slab3d development.
- One should consider this a beta release near the
release date and a final release a few weeks later unless otherwise
noted. A bug notice will be added to the Version History should any
be found.
|
8/23/18 |
Version 6.8.3
- Download
- Contents
- Overview
-
This release focuses on new Sonifier development, past Sonifier
refinement, XScape Sonifier testing, AvadeServer improvements, and listener-ownship virtual-environment placement.
-
This release also upgrades the build environment from: Visual Studio 2015 to
Visual Studio 2017, XNA 4.0 to MonoGame 3.7, and .NET 4
to .NET 4.5.
- Modification Details
- SRAPI - Slab3d Render API library
- New functions added: LstPosOwnshipLLH(), helper
ownLstToWorldLst(), LstPosOwnship() (added to SetDefaults()),
GetOwnPos(), GetOwnSrcHBearing(), GetOwnSrcBearing().
- New UpdateWaitMode added
that causes a function to block waiting on a DSP update of the
listener-relative source bearing angles and range (defaults
false/off) (see functions SetUpdateWaitMode() and
GetUpdateWaitMode()). SetDefaults() resets mode false.
Supported functions (ones that cause az,el,r updates):
SrcLocate(), SrcLocateLLH(), SrcLocatePolar(), SrcLoc(),
LstPosition(), LstPositionLLH(), LstPosOwnshipLLH(),
LstPosOwnship(), LstPos(), LstSensorPos(). Mode also added
to SrcEnable().
- SLABScape - C++ Direct3D Audio-Visual Virtual-Environment
(legacy app, see XScape)
- slabtools - MATLAB tools
- spread.m - source radii text added to curves. Bug fixes:
radius begin and 1/d curve 0 dB reference.
- MSRAPI - Managed SRAPI assembly
- New functions: LstPosOwnshipLLH(), LstPosOwnship(),
GetOwnPos(), GetOwnSrcHBearing(), GetOwnSrcBearing(),
SetUpdateWaitMode(), GetUpdateWaitMode().
- SlabSharp - C# extensions to MSRAPI assembly
- SonObstacleLinearTTCGen.cs added [1]: New TTC Caution
and Warning Obstacle Avoidance sonifier with
sonifier command ThresholdsLinearTTCFps.
- SonLineTTCGen.cs added [2]: New TTC version of "line" sonifier
with sonifier command ThresholdsAmpTTCFps. Uses
UpdateWaitMode.
- SonHeightErrorGen.cs added [3]: New "height error" sonifier
with sonifier
commands HeightError, ThresholdsMinMaxM, FreqAboveBelowHz.
- SonImpactTTCGen.cs added [3]: New "impact point" sonifier
with sonifier
command ThresholdsLinearTTCFps. Requires DSP Update Wait
Mode for minimal latency.
- SonObstacleLinearGen.cs, SonObstacleTTCGen.cs,
SonObstacleLinearTTCGen.cs: Pitch
scaling made relative to new ownship bearing query. Thus,
LLH and XYZ obstacle placement will now behave identical to the
AzElR design where pitch scaling does not change with a
head-tracked listener.
- SonLineGen.cs: Speed consumed but not used (for
polymorphic behavior with SonLineTTCGen). Added
UpdateWaitMode.
- Sonifiers.cs: Support added for the new sonifiers and
sonifier commands above. ThresholdsTTCFt command renamed
ThresholdsTTCFps. Lock/Wait SrcLocate*s replaced by
use of SetUpdateWaitMode(). The Enabled property lock/wait
code replaced by SetUpdateWaitMode().
- New sonification mappings:
- MapRangeToEnvLinearTTC.cs: map range to envelope
pulse period using two TTC alert range thresholds.
- MapHErrorToHeight.cs: map height error to height
offset from ownship and stream amplitude on/off using
min/max error thresholds.
- MapRangeToAmpTTC.cs: map range to stream amplitude
on/off using two TTC alert range thresholds.
- MapVertToPitch.cs: map vertical angle (pitch or
elevation) to a pitch offset.
- GenManager.cs: Added SetFrequency(), STK Preset 3
using "Whistle" instrument.
- References:
- [1] Miller, J. D., Godfroy-Cooper, M., & Wenzel,
E. M.(2018). An Augmented-Reality Spatial Auditory Display
for Obstacle Avoidance during all Phases of Flight,
Proceedings of the American Helicopter Society 74th Annual
Forum and Technology Display, Phoenix, Arizona, USA.
- [2] Godfroy-Cooper, M., Miller, J. D., Bachelder,
E., Wenzel, E. M. (2018). Isomorphic Spatial Visual-Auditory
Displays for Operations in DVE for Obstacle Avoidance, to be
presented at the 44th European Rotorcraft Forum, Delft, The
Netherlands, 18-21 September 2018.
- [3] Bachelder, E., M. Godfroy-Cooper, A. Kahana,
J. Miller, Multimodal Cueing and Assessment of Pilot
Engagement During Low Level Flight, AHS International 74th
Annual Forum. Phoenix, AZ, 2018.
- SlabX - MonoGame/XNA development support assembly
- Development transitioned from XNA to the Development Build
of MonoGame 3.7 (built and tested with 3.7.0.1467 and
3.7.0.1681).
See: http://www.monogame.net/downloads/
- CamYPR.cs: The SpeedFB front-back speed is now updated
and queryable. GamePad LstYaw, LstPitch, and LstRoll added
(state only, no camera behavior).
- Obj3D.cs: SrcY sound source location property added.
- Objects.cs, MSGeometricPrimitive.cs:
DrawIndexedPrimitives() call updated for XNA-to-MonoGame
transition.
- AvadeServer application - Spatial Audio and Sonification Server
- Support added for all new sonifiers and sonifier commands.
- New commands:
- ownshipLLH() and ownship() specify the 6-DOF location of
ownship and the 3-DOF orientation of the listener. The
listener is assumed to be 0.178 m up and 3.175 m forward
from COG.
- gain() specifies the gain of a sound source in dB.
- radius() specifies the radius, spread exponent, and 0 dB
distance of a sound source.
- IgnoreTime option added that ignores the UDP time index.
This setting allows multiple clients to control AvadeServer at
once.
- UpdateWaitMode added that causes a sonifier to wait for the
update of listener-relative source bearing angles and range
(defaults off).
- "Server Commands" added. These allow client
commands to be entered from the AvadeServer interface. GUI
parameters with a "Cmd" button also support this feature via the
GUI (e.g., Gain and the Radius/Spread/0dB_Distance parameters).
- Listener and ownship "command" poll window display updated.
These entries display the values received for the listenerLLH(),
ownshipLLH(), and ownship() commands.
- Windows dimensions changed for longer poll window.
- Poll window flicker reduced.
- AvadeFile format: UpdateWaitMode and IgnoreTime added.
- Help updated for new commands, sonifiers, and features.
- HelpCommands and HelpSonifyCommands strings added that list
all client and sonifyN() commands and parameters.
- AvadeClient utility - AvadeServer command testing and
demonstration
- Hard-coded command names migrated to AvadeServer
HelpCommands.
- XScape application - C# MonoGame/XNA Audio-Visual Virtual
Environment (for legacy app, see SLABScape)
- Camera tab: 60 m/s forward-back speed radio button
added.
- AvADE tab: Line and Sensor (alone) demos removed
because
commands in BeaconLineSensor. Added
ImpactPoint and HeightError sonifier demos. Hard-coded
10.0 m/s speed replaced by camera speed (for TTC
(time-to-collision) sonifiers). ownshipLLH test added and
ownship() used. Object's sound source emitter's location
now used instead of object location. enable() now sent
immediately after sonreset() so that enable-checked initial
conditions are set properly.
- Listener speed added to FPS (frames-per-second) display.
- Only one type of controller can be active during a given
update (to make speed display accurate).
- XNA 4.0 migrated to MonoGame 3.7 (see SlabX above). The cbuilder project, associated models, and the space scape
file were moved to the src\archive\ directory because the
content did not build well when migrating.
- RotorCraft application - Control surface signal generator patch
editor
- Roland A-PRO keyboard support added for STK.
- .NET Version: Most apps were previously compiled with
".NET 4 Client Profile". All apps are now 4.5.
- usrlib - 3rd-party libraries and source
- "3D Math Primer" book matrix library added to 3d_math\
directory (test.cpp is an SRAPI ownLstToWorldLst() test
utility).
- Comments
- I thank the U.S. Army AMRDEC
for funding this iteration of slab3d development.
- One should consider this a beta release near the
release date and a final release a few weeks later unless otherwise
noted. A bug notice will be added to the Version History should any
be found.
|
2/6/18
revised
2/23/18 |
Version 6.8.2
- Download
- Contents
- Overview
-
This release focuses on Sonifier and Generator Plugin development:
- Pulse envelope processing was moved from
various generators to general sample stream input (slabwire/SRAPI/MSRAPI).
- Gen-suffixed sonifiers use the new
SonifierGen and GenManager classes to encapsulate the fm,
fiveosc, looper, and stk (Synthesis ToolKit) generators, generator presets,
and sample loops.
This enables multitimbral sonifiers, i.e., mixing and matching
sonifiers to different auditory icons and earcons.
- A multi-waveform oscillator was created and
used to develop the fiveosc (five-oscillator) signal generator
that can serve as a sonifier earcon synthesizer. New
wavetables were created that greatly increase the number of
harmonics (11 to 35) for better spatialization,
discriminability, and sound quality.
- A 0 dB distance parameter has been added to
the spherical spreading loss gain model for better control of
looming effects.
- The delay lines can now be configured per
source to eliminate undesired auditory artifacts due to
propagation delay effects, e.g., large spatial jumps.
- The following sonifiers were developed using
the components above:
BeaconGen and BeaconStream are auditory beacons with Advisory,
Caution, and Warning rings, the Obstacle* sonifiers respond to
nearest/second-nearest obstacle sensor updates (1 Hz), mapping
ranges to pulse periods, and LineGen uses emitter animation to
sonify the location of a power line.
- Some Obstacle Sensor sonifiers support an
azimuth bearing angle to pitch offset mapping that helps reduce
front-back reversals.
- An Obstacle Sensor reference sonifier was
created that alerts via spatial clock hour callouts. This
provides a comparison between an incremental display and one
employing augmented-reality earcons.
- The RotorCraft slab3d generator settings tool
was created that maps arbitrary generator settings to control
surface rotories and sliders. This allows for quick and
convenient settings permutation when designing sonifier earcons.
Settings can be saved to XML files. These can then be
copied to GenManager presets.
- AvadeServer, AvadeClient, and XScape were
updated to support and test the features above.
- The AvadeServer Help tab and the Sonifiers.cs
file are the best sources of documentation.
- Modification Details
- slabwire – StreamIn-to-DSP-to-StreamOut signal processing chain
- CEnvelope (envelope.h) - New class added for creating
single-shot or pulse-train envelopes applied to sample stream
input. Envelope code was moved and integrated from gslab signal generators.
- CSIMemory, CSIGen, CSIDevice, CSIAsio,
CSIUrl, CSITrack, CSISubmix, CSIUser, CSIDISRadio2, and
CSI_RT_DIS_Radio now use AllocFormat() in their constructors to
call
m_env.SetFs(). CSIFile calls m_env.SetFs() directly.
- CSIMemory, CSIGen, CSIUrl, CSITrack, and
CSIFile now call base class in SSInRewind() for m_env.Reset().
- The Envelope reorg resulted in new CSSI functions: SampleAmp(), SampleGetAmp(),
SampleEnvPulse(), SampleGetEnv(), SampleGetEnvRewind(), and
SampleEnvUnity().
- HeadMatch, slabcon, mcon, SLABScape,
SLABWireDemo, and SLABLatency updated accordingly.
- CTracker (tracker.h) - DefSmoothTime() 15 ms added.
- CWaveform and CWaveTable -
SetFreqSmoothing() and SetPhaseSmoothing() added.
- CWaveforms (waveforms.h) - new class containing
CWaveform subclasses, serves as a multi-signal generator.
Output parameter tracking added.
- gslab generator plugin (gslab DLL and gslab.h generator parameters)
- All amplitude and pulse parameters removed and replaced
by the new CSSI envelope functions above.
- As a result, "ntpulser" renamed "noisetone2", "fmpulser" renamed "fm",
"tpulser" renamed "tonesum", and "noisepulse" removed.
- The "fm" generator now has carrier and modulator time constant
parameters
for leaky integrator parameter tracking (smoothing).
- The new "fiveosc" generator contains a five-oscillator
synthesizer patch where oscillators 1 and 2 are modulated by
oscillator 3 and the result summed with oscillator 4 modulated
by oscillator 5. The pitches for oscillators 1, 2, and 4
are
set using semitone offsets from a fundamental frequency.
The output of the oscillators can be parameter tracked to model
analog transients.
- The new "fiveosc1" generator is similar to "fiveosc"
except the frequencies for oscillators 1, 2, and 4 are set
independently, phase parameters exist, and there is no output
parameter tracking.
- CWaveFileMem class added that supports reading WAV files
into memory. Used by new "looper", "clock", and "lurpp"
generators.
- "looper" generator added that presently loops three wave files:
helicopter, power line, and tree. Requires wave files
loop1_helicopter.wav, loop2_power_line.wav, and
loop3_tree.wav. These use Freesound.org files:
49481__lorenzosu__helicopterpassage-28sec.wav,
169942__felix-blume__electricity-going-trough-a-post-in-the-desert.wav,
78955__juskiddink__aspen-tree-in-strong-wind.wav.
- "clock" generator added that plays pre-recorded TTS
clock hour samples, e.g., "one o'clock".
Requires wave files oclock01.wav - oclock12.wav.
- "lurpp" Low-Update-Rate Pulse-Period generator added.
Presently just a proof of concept for short ping-like samples. In place of
an applied envelope, lurpp uses varying silence to implement a pulse period (based on the "clock" method). Requires lurpp.wav.
- Gfiveosc, Gstk, Gclock, and Glurpp parameters added to gslab.h.
- Wavetables with harmonics up to harmonic 35 added (originally
designed for a
fundamental of 622 Hz): fTableTri35, fTableSaw35, and
fTableSqr35.
- SRAPI - Slab3d Render API
- Spherical spreading loss gain model updated: SrcRadius() default changed from 0.1 to 0.0889 m (interaural
radius). The new "0 dB distance" parameter was added to
allow better control of looming effects (see gain model in
Spatial renderer), defaults to 0.0889 m. SrcDistance0dB(), GetSrcDistance0dB(), and GiDistance0dB()
added.
- New StreamIn pulse envelope functions: SiAmp(), SiGetAmp(),
SiEnvPulse(), SiEnvUnity(), and SiGetEnv*().
- LLHToSlab3d() added to convert LLH coordinates to slab3d
XYZ.
- rspatial and rmixer renderers now use GiDelayLength() to
determine
stream input delay line length.
- Delay line length added as a parameter to all SiAlloc*()'s,
thus eliminating the need for the general functions SetDelayIn()
and GetDelayIn() which were removed. slabcon and mcon
updated accordingly.
- GetSrcGain() now returns SC::GainMutedB() instead of 0.0 if
bad source ID.
- slabdefs.h: The following SC Slab3d Constants were added
SmoothTime() = CTracker::DefSmoothTime() = 15 ms, DefDelayIn = 500 ms,
DefSampleRate = 44,100 samples/s, DefUrlPreBuf = 1 buffer, and
DefUrlBuf = 8192 bytes. SmoothTime(),
SetSampleRate(), and SilAlloc*() default accordingly. Polar
struct renamed CoordPolar and the following coordinate structs
were added CoordLinear, CoordLLH, CoordECEF, and CoordENU.
- slabmath.h: Meter/feet conversion functions added: dM2Ft(), dFt2M(), fM2Ft(),
and fFt2M().
- Spatial renderer
- Gain model now supports a 0 dB distance
parameter which used to default to the center of the head but now
defaults to the interaural radius. Closer than the 0 dB
distance yields 0 dB, beyond uses the gain model.
- slabtools - MATLAB tools
- asdread.m added - reads an AvadeServer data collection file,
determining the number of float columns from the asd# prefix.
- gen.m: Saw now starts at 0 instead of -1. Can
now include arbitrary number of harmonics when generating
wavetables.
- spread.m: Added 0dB distance and simplified
parameters.
- MSRAPI - Managed SRAPI
- The following functions were added: SiAmp(), SiGetAmp(),
SiEnvPulse(), SiEnvUnity(), SiGetEnv*(), GetSrcGainScalar(),
GetSrcDistance0dB(), four parameter SrcRadius(), Coord structs,
and LLH2Slab3d().
- Added delay line length parameter to all SiAllocs.
- GP_ and GPL_ defines were added to GPList.
- SlabSharp - C# extensions to SRAPI
- All Sonifiers now use the new stream input Envelope
functions in place of individual generator pulse methods.
Amplitudes were often increased in the process to reflect
general use.
- Each Sonifier now has its own Son*.cs file.
- Sonifier base class: Sonify() to SonifyUpdate(),
SetFloats() and SetParams() to SonifyN() (where N = 1 to 7) with several
corresponding Sonifier Commands added (see SonCmd enum). Locked
functions added: Enabled, LocatePolar(), LocateXYZ(), and
LocateLLH(). These are locked so that listener-relative
geometry will be correct after calling. TimeSpan()
function added for emitter animation and spatial gestures.
- MapAzSliceToPitch class added that maps azimuth to scale and
cent offset values.
- MapRangeToEnvLinear class added that maps range to envelope
pulse periods using two alert range thresholds. The pulse
period is linearly scaled between one distance/period pair and
another.
- MapRangeToEnvTTC class added that maps range to envelope pulse
period or duration using time-to-collision distance thresholds
(Advisory, Caution, and Warning). A map range to silence
interval is provided as an alternate pulse period method.
- MapRangeToEnvDistance class added that maps range to envelope
pulse period using fixed distance thresholds (Advisory, Caution,
and Warning) (from and used by SonBeaconGen (previously
SonObstacleFM)).
- SlabBinder made serializable (primarily to record envelope
parameters using the RotorCraft application). Added
SrcDistance0dB().
- SonAzImpTone - disabled spherical spreading loss.
- SonifierGen and GenManager classes added to manage generator settings
and setting presets. Together, they enable
generator-polymorphic multitimbral Sonifiers where the envelope
mappings remain the same while generators and presets can
change. Additionally, some generator commands can be
polymorphic as well, e.g., Frequency handled by both the fm and
fiveosc geneators. The corresponding Sonifiers use a
Son*Gen naming convention and subclass from SonifierGen instead
of Sonifier. SonifierGen provides a GenManager object and
handles generator commands. The generators fm, fiveosc,
looper, and stk are currently supported along with a few initial
presets.
- The BeaconGen sonifier evolved from ObstacleFM using the same logic (MapRangeToEnvDistance)
but now supports the fm, fiveosc, stk, and
looper generators and presets via GenManager and
SonifierGen. The mosquito and UFO variants can still be assigned
using presets. ThresholdsDistanceM and ThresholdsDistanceFt commands
have been added for setting
Warning, Caution, Advisory ring thresholds.
- BeaconStream is a new Sonifier that applies BeaconGen
envelope mapping to any stream selected using the AvadeServer
GUI. Intended for use with wave File sample loops.
- ObstacleTTCGen is a new time-to-collision (TTC) Sonifier
designed to work with 1 Hz radar updates of the two nearest
obstacles. It uses the new SonifierGen and GenManager
classes to support "fiveosc" and "fm" signal generator variants
with two earcon presets each representing the nearest and the
second-nearest obstacles (i.e., urgency can be mapped to timbre).
Obstacle locations are provided via three commands,
AzElRSpeed for ownship-relative coordinates, LLHSpeed for
aircraft simulator world coordinates, and XYZSpeed for local
coordinates. It implements the MapRangeToEnvTTC
sonification mapping for mapping obstacle-ownship range to
envelope pulse period and the MapAzSliceToPitch mapping for
mapping bearing angle to pitch offset. The latter was
added to help reduce front-back reversals. The first
iteration used the "fm" generator with two oscillators, a carrier
and modulator. This yielded a somewhat limited palette
relative to the sound design goals of spatializability,
discriminability (avoid merging), low annoyance factor, and
semantic association (nearest, second nearest, class of alert).
This
prompted the development of "fiveosc", a more general five
oscillator synthesis topology.
- ObstacleTTCClock is a new ObstacleTTC Sonifier that uses the
"clock" generator to play clock hour TTS messages. Obstacle
azimuths are mapped to the twelve hour positions in azimuth
while elevation is preserved. Propagation delay is
disabled to reduce audible artifacts by placing sources at the
interaural radius. To provide a perceptual distance cue,
slab3d's distance-based spherical spreading loss gain model is
applied to gain directly. This sonifier is primarily a
proof-of-concept prototype.
- ObstacleTTCLurpp is a new SonObstacleTTC Sonifier that uses
the "lurpp" generator for earcon playback. It implements the
AzElRSpeed command's spatial placement but uses the Clock
Sonifier's approach to distance and pulse period rendering.
Like the "lurpp" generator, this sonifier is primarily
proof-of-concept. The current lurpp file is very basic and
was created for development and testing.
- ObstacleLinearGen is a variant of ObstacleTTCGen that
replaces the TTC sonification mapping with a mapping based on
distance rings and a linear pulse period scaling between them
(MapRangeToEnvLinear).
- LineGen is a new Sonifier that sonifies a line (e.g., a
power line) by sweeping an
auditory icon back and forth along the line using emitter
animation. LineGen uses SonifierGen and GenManager to
implement its default auditory icon, a power line loop played by
the looper generator. A couple "buzzing"
STK physical model earcons can also be selected (as well as
other GenManager generators and presets).
- AvadeServer application
- !!!! AvadeServer client commands are now case
sensitive. Sonifier Commands now exist (see sonifyN()) that
are also case sensitive.
- !!!! The following commands are now in meters instead
of feet: originLLH(), locateLLH(), and listenerLLH() .
- New AvadeServer client commands: sonreset() to reset
sonifier, sonifyN() (where N is 1-7) to pass commands with N
parameters (including command) to Sonifier,
nearest2AzElRSpeed()/nearest2LLHSpeed()/nearest2XYZSpeed() to render a
low-update-rate ownship-sensor nearest and second-nearest
obstacle display, udpsync(), and datastart() and datastop() to stream
nearest2*() and listener() float values to
binary files.
- New AvadeServer config files avs_*.avf for use with
AvadeClient and XScape.
If the filename contains "n2", the configuration contains the
"nearest1" and "nearest2" sources required by the AvadeServer
nearest2*() commands. In some instances, stream delay
lines have been zeroed in an effort to reduce audible artifacts
due to a low update rate and jumps from one obstacle to another.
- The command names origin(), listenerwgs84(), and
obstacle() have been removed. The LLH-suffixed versions should be used instead.
- locateLLH() replaces obstacleLLH() (the six trailing unused bounding box
parameters have been removed).
- All of the new Sonifiers have been added to the AvadeServer Sonifier droplist.
- New AvadeFile entries (and user interface options):
- PollSonGenInfo: Whether to poll sonifier and
signal generator information.
- SendReturnValues: Whether to send return values to
client, now defaults false (for UDP).
- DelayLineLength: Input stream delay line length in ms, can be set to 0 ms to
effectively disable propagation delay effects (e.g., Doppler,
time of arrival), this might help to reduce audible
artifacts when large spatial jumps occur, e.g., nearest hit
jumping from one obstacle to another.
- Distance0dB: The 0dB distance for a sound source
allowing the spherical spreading loss curve to be
positioned in space.
- Generator: The GenManager signal generator used
(if any).
- Preset: The GenManager signal generator settings
preset (if any).
- Command line options added, -F to load AVF config file, -L
to start listening, and -A to start audio rendering.
- Help updated to reflect new features, e.g., new Sonifiers,
sonifyN() commands, etc.
- Polled Status display improved. Polling sonifiers and
generators is now optional. Server (S) and Client (C)
times are now shown offset from the first client UDP datagram
received after a Listen. Each UDP datagram contains a timestamp
that updates the Client value. When the corresponding UDP
datagram is received, a server timestamp occurs that updates the
Server value.
- UDP packets received out of order are now discarded.
- Log clear button added.
- Local and remote UDP packet times displayed.
- Sonifier allocation moved to SlabSharp (AllocSonifier()).
Supports new Generator and Preset paradigm.
- AvadeClient utility
- LLH height from feet to meters.
- Added Sonify tab droplist that specifies the command to send
to the AvadeServer sonifier.
- Added Update-Rate Demo droplist and Parameters dialog:
- "play(),listener()..." plays "alert" and yaws listener.
- "listener(),locate()..." demos an auditory beacon scene
by positioning two beacons and a listener over a span of
time.
- "nearest2AzElRSpeed()..." tests a
sensor-mounted-to-ownship display, using the sources from
"listener(),locate()" as if they are sensor hits.
- XScape application
- AvADE tab added that sends UDP
initialization and update commands to AvadeServer providing an
alternative to AvadeClient for testing. Demos for Beacon,
Line, and Obstacle Sensor sonifiers have been added (see
XAvadeClient.cs). XScape allows for flexible listener movement
and better emitter visualization. AvadeClient provides
scripting (e.g., repeatability) and accurate positioning.
- HeadMatch utility
- Decreased starting gain to -36 dB.
- RotorCraft application
- RotorCraft is a new application that maps slab3d signal
generator parameters to Roland A-PRO control surface rotories
and sliders. It is a sound design tool for generators with
several interrelated parameters, e.g., fiveosc.
- The RotorCraftSettings XML file format
saves the Generator Parameter List values.
- Revision 2018.02.23
- SlabSharp, AvadeServer
- Bug Fix: LineGen sonification could
occur before the first end point for some line lengths.
- Bug Fix: The ThresholdsLinearFt
sonifier command resulted in defaults being set instead of
arguments.
- Comments
- I thank the U.S. Army AMRDEC
for funding this iteration of slab3d development.
- One should consider this a beta release near the
release date and a final release a few weeks later unless otherwise
noted. A bug notice will be added to the Version History should any
be found.
|
4/17/17
revised
5/4/17 |
Version 6.8.1
- Download
- Contents
- Overview
-
This release focuses on AvadeServer improvements
and the addition of two new spatial sonification alerts for obstacle
avoidance, ObstacleFM and ObstacleFMSin. The alerts are triggered
by virtual environment obstacle-listener distance thresholds where
an obstacle is a sound source / sonifier pair in AvadeServer. Two new
corresponding AvadeServer commands have been added, obstacleLLH() and listenerLLH(), where the LLH
suffix indicates the use of WGS84 Latitude-Longitude-Height (LLH)
coordinates. LLH coordinates were introduced in an effort to
ease integration with aviation simulators and aircraft.
AvadeServer support for the UDP network protocol was added to improve
client/server update-rate timing behavior. And the CCRMA
Synthesis ToolKit slab3d generator plugin gstk was updated from STK
v4.2.0 to the current v4.5.1. gstk provides access to
a set of "off-the-shelf" synthesis algorithms and provides an
initial platform for the application
of physical models to sonification. The sonifications and UDP
network protocol are demonstrated by the new avs_2son_helmet.avf
AvadeServer configuration file and AvadeClient "Update Rate Demo".
Together, they demo the Sample Drift Trajectory discussed in the AHS
conference paper "3D-Sonification for Obstacle Avoidance in Brownout
Conditions".
- Modification Details
- slabwire
- CWaveform, CWaveTable, CSaw - The CWaveform base class was added to
provide a single interface for waveform subclasses, e.g., the existing CWaveTable and
the new non-band-limited sawtooth CSaw. This simplifies
waveform selection for generators that support multiple
waveforms, e.g., the new "fmpulser" generator.
- gslab generator plugin
- The new "tpulser" Generator Plugin has been
added (class CGenTPulser). tpulser implements a hard-coded pulsed
four-waveform additive synthesis algorithm. Its only
parameter is amplitude as it is, by design, a template for
implementing basic few-component complex waveforms. It
presently consists of four sine waves at 500, 1000, 2000, and
3000 Hz. The pulse envelope has a period of 1 s, a
duration of 350 ms, and fade in/out ramps of 10 ms.
- The new "fmpulser" Generator Plugin has been
added (class CGenFMPulser). fmpulser implements a pulsed frequency-modulation
algorithm with carrier and modulator parameters: waveform,
amplitude, frequency, and phase, and pulse envelope parameters:
period, duration, and fade.
The algorithm: Out =
Envelope*Car.Amp*Car(Car.Freq+Mod.Amp*Mod(Mod.Freq)).
The waveforms: sin, band-limited triangle (up to harmonic 11),
band-limited sawtooth (up to harmonic 11), band-limited square
(up to harmonic 11), and non-band-limited sawtooth (can alias). Note, waveform indices are parameter tracked with leaky
integrators so all modulations and parameter changes should be
fairly smooth.
- gstk generator plugin - CCRMA Synthesis ToolKit (STK)
Instruments
- STK was revisited as an Open-Source "off-the-shelf"
software synthesizer solution. STK contains a collection of physical-model
Instruments. The STK release used to build gstk was
upgraded from v4.2.0 to v4.5.1.
- STK is now fully integrated into the slab3d release in
slab3d\usrlib\.
- The STK wave data was moved from slab3d\wavs\ to STK's default slab3d\usrlib\stk-4.5.1\rawwaves\.
- Note: The STK v4.2.0 test utility stk1 was not updated to
v4.5.1.
- The gstk parameter list: inst, amplitude, setFreq,
noteOn(Freq), onAmp, noteOff(Amp), ctlChange(Num), and ccValue.
- The gstk instruments: BandedWG, BlowBotl,
BlowHole, Bowed, Brass, Clarinet, Drummer, Flute, BeeThree,
FMVoices, HevyMetl, PercFlut, Rhodey, TubeBell, Wurley, Mesh2D,
ModalBar, Plucked, Mandolin, Resonate, Moog, Saxofony, Shakers,
Simple, Sitar, StifKarp, VoicForm, and Whistle.
- STK (c) 1995-2016 Perry R. Cook and Gary P. Scavone. All
Rights Reserved.
STK website:
https://ccrma.stanford.edu/software/stk/
- SRAPI - Slab3d Render API
- The coordLLH struct was added for Latitude-Longitude-Height (LLH)
coordinates.
- The coordECEF struct was added for Earth-Centered, Earth-Fixed
(ECEF) coordinates.
- The coordENU struct was added for East-North-Up (ENU)
coordinates.
- The LLH2ECEF() and LLH3ECEF() helper functions were added
for LLH to ECEF coordinate conversions.
- The ECEF2ENU() helper function was added for ECEF to ENU
coordinate conversions.
- The EnvLLHOrigin() function was added to specify the slab3d
local coordinate system tangent point to the globe for LLH
conversions to the local coordinate system.
- The SrcLocateLLH() function was added to position a sound
source using LLH coordinates.
- The LstPositionLLH() function was added to position the
listener using LLH coordinates.
- LLH conversion verification: Google Earth Pro
LLH data ==> AvadeClient scripts ==> modified AvadeServer ==>
logged coordinate data ==> MATLAB analysis
The corresponding files:
slab3d\bin\ - avc_listenerwgs84.xst, avc_listenerwgs84ypr.xst,
avc_listenerwgs84.png, avc_listenerwgs84.txt
slab3d\src\AvadeServer\wgs84\ - Google Earth Pro data (*.kml),
AvadeServer log output, and matlab verification scripts
- slabtools
- ecef2enu() - ECEF to ENU
verification script for SRAPI helper function
ECEF2ENU().
- llh2ecef() - LLH to ECEF verification script for SRAPI
helper function LLH2ECEF().
- vallh() - simple utility that calls vall() to view all
horizontal-plane azimuths in an HRTF database.
- mat2slab() - a matlab version issue was addressed where the
script might have failed when the measurement grids were
identical.
- MSRAPI - Managed SRAPI
- The following functions were added: SiGenEnum(),
SiGenStop(), EnvLLHOrigin(), SrcLocateLLH(), LstPositionLLH(),
and OutFile().
- The SiType() return type was changed from int to StreamType.
- SlabSharp - New Sonifiers
- SonDrift is presently an
axis-thresholds-mapped-to-generators test script. It plays one
of three generators from the direction of threshold crossing
using the sonifier parameter interface (versus environment
state) with (x,y,z) displacements in meters,
where an x threshold crossing is indicated by a tpulser generator,
y by fmpulser, and z by noisepulse. The threshold is 1
meter.
- SonGeneric is another 1-meter threshold
crossing sonifier like SonDrift but it uses the generator
attached to the source instead of selecting generators.
So, this tests the sound of a given generator from one of
the 3*9-1 = 26 threshold crossing locations about the listener.
Note, AvadeServer does not presently have a user interface for
selecting generators other than the default noise generator.
Generator selection is left to the sonifiers.
- SonObstacleNT was used to test the
source-listener AHS paper range rings. A different
combination of noise and two tones is used for each distance.
- SonObstacleFM is the Mosquito sonifier
mentioned in the AHS paper. It uses a sawtooth as a
carrier and a parameter-tracked band-limited (i.e., subtle)
square as the modulator. Distance thresholds are indicated
by changing pulse periods.
- SonObstacleFMSin is the UFO sonifier
mentioned in the AHS paper. It functions identically to
SonObstacleFM except it uses a sine as the carrier.
- AvadeServer
- A "Defaults" button has been added for setting all
AvadeServer settings to their defaults.
- The enable( idSource, state_bool ) command was
added to control
the SRAPI rendering enable state of a sound source. Enable
state is shown as the third item in the sound source parenthetical in
the Polled State display. Enabled sound sources consume
CPU, so if several sound sources exist, infrequently used ones
can be left disabled and only enabled when needed. If the
source is a Sonifier, Sonifier enable state is set, otherwise
the SRAPI SrcEnable() function is called.
- The pre-v6.8.1 locate() command has been renamed
polar( idSource, az_degrees, el_degrees, r_meters ) to
reflect its polar placement of a sound source.
- The locate( idSource, x_meters, y_meters, z_meters ) command
has been added for positioning a sound source in the local
slab3d coordinate system using metric cartesian coordinates.
- The listener( x_meters, y_meters, z_meters, yaw_deg,
pitch_deg, roll_deg ) command has been added for
positioning the listener in the local slab3d coordinate system
using metric cartesian coordinates and orientation angles.
- LLH Latitude, Longitude, Height commands have
been added to support integration with aviation simulators and
aircraft. LLH coordinates conform to the World Geodetic
System 1984 (WGS84) standard for navigation and GPS.
- The originLLH( lat_deg, lon_deg, height_feet ) (aka
origin()) command has been added
for specifying the local coordinate system tangent point to
the globe.
- The obstacleLLH( idSource, lat_deg, lon_deg,
height_feet, yaw_deg, pitch_deg, roll_deg, size_height_feet,
size_width_feet, size_depth_feet ) (aka obstacle()) command has been
added for specifying the location of an obstacle. This
command differs from locate() by using both WGS84 and US
Customary (USC, e.g., feet) units. It also provides a
future upgrade path for more sophisticated obstacle
collision detection algorithms by including dimension
parameters (currently unused).
- The listenerLLH( lat_deg, lon_deg, height_feet, yaw_deg,
pitch_deg, roll_deg ) (aka listenerwgs84()) command has been
added to position the listener using LLH WGS84 coordinates.
It calls the new SRAPI function LstPositionLLH() and updates
all Sonifiers.
- Support for the following SlabSharp Sonifiers has been
added: Drift, Generic, ObstacleNT, ObstacleFM, and
ObstacleFMSin.
- Sonification can now occur based on SRAPI state, e.g.,
virtual environment updates, in addition to the sonify()
command. The following commands presently trigger Sonifier
updates: listenerLLH(), listener(), obstacleLLH(),
locate(), polar(), and, of course, sonify().
- The most recently received listener() and listenerLLH()
coordinates are now shown in the Polled State display.
- The new "Relative" button causes the Polled State source
location values to switch from the local coordinate system to
listener-relative azimuth, elevation, range.
- Support for the UDP network protocol has been added and made
the default. The UDP protocol is preferable to TCP/IP for
high-update rates (e.g., 30Hz, 120Hz). But, command packet
delivery is not guaranteed. One method for verifying
delivery is to use command return values (Settings tab, set by
default). The selection of UDP or TCP/IP is an option on
the Settings tab.
- Incoming commands can now be logged to an XScript log
file playable by AvadeClient.
- Server-to-client command return values are now optional.
Sending command return values is the default setting on the Settings tab.
- More I/O allocation error checking had been added.
- Multi-channel stream input support has been improved.
- The ability to split the Spatial plugin's binaural
sound device output to a wave file has been added. See Settings tab.
- The listener's HRTF database in the slab3d SLH format can
now be specified on the Settings tab.
- Logging client commands is no longer the default.
However, infrequent commands are always logged in an
abbreviated format. Infrequent commands are those commands
not likely to be updated regularly in an update loop, i.e.,
commands other than listener(), locate(), polar(),
listenerLLH(), obstacleLLH(), and sonify(). The old
verbose format and the logging of all client commands,
regardless of frequency, is enabled via the "Log All Client
Commands (Verbose)" button.
- TCP/IP command return values are now logged.
-
A
new AvadeServer configuration has been added, avs_2son_helmet.avf.
This configuration is nearly identical to the
one used for the experiment discussed in the Overview AHS paper.
The son1 sound source is mapped to the ObstacleFM (aka "Mosquito")
sonifier, the son2 sound source is mapped to the ObstacleFMSin
sonifier (aka "UFO"), and a pair of hard-left and hard-right panned
sources are used to play a binaurally-recorded background noise loop
(recorded under the helmet earcups in a Blackhawk helicopter).
Note, for the experiment, ASIO was used to reduce audio output
latency. For the demo, ASIO is avoided to reduce potential
sound device conflicts. Latency, in this instance, is not an issue because the
listener is not head-tracked or responding to stimuli.
To test the configuration one can use the new AvadeClient "Update Rate Demo" which updates listener
position using a linear drift trajectory (identical to the AHS paper
"Sample Drift Trajectory") (see the figure to the right). One first
opens the AvadeServer configuration file
avs_2son_helmet.avf, then starts rendering audio using the "Audio" button and
starts listening for UDP
commands using the "Listen" button. The AvadeClient "Update Rate Demo"
button can then
be used to drift the
listener past the sonified obstacles, both at the origin, using a 60
Hz update rate. The listener drifts through the alert rings:
Advisory, Caution, Warning, Caution, Advisory (end, pictured). Higher
urgency is indicated by higher pulse rates with Warning > Caution >
Advisory. The first drift pass demonstrates the ObstacleFM
sonifier, the second, the ObstacleFMSin sonifier.
- AvadeClient
- Support for the UDP network protocol was added.
- Command return values are now optional.
- Support was added for all of the new AvadeServer commands:
originLLH(), obstacleLLH(), listenerLLH(), locate(), polar(),
and enable().
- The new "Update Rate Demo" was added for
demonstrating and testing a 60 Hz virtual environment update
rate.
As mentioned earlier, the script generates the Sample Drift Trajectory from the
Overview AHS paper.
However, to ease implementation, it uses the local slab3d coordinate system instead of
LLH.
Note: Update Rate Scripts are not displayed in the
Script Editor in an effort to preserve timing accuracy during script
execution and to not impose limits on script length.
- The Update Rate Demo makes use of the Open-Source
HighPrecisionTimer project by Mike Zboray. This project
allows C# access to C++ "Multimedia Timers". Multimedia
Timers are needed for the short update periods that correspond
to high update rates.
- To allow "Update Rate" scripts besides the Update Rate Demo
to be Run, two new checkboxes have been added. The "Update
Rate Script" checkbox, when checked, disables the Script Editor
in order to improve script timing. The "High-Rate Timer"
checkbox, when checked, causes a Multimedia Timer to be used in
place of a Windows Timer. This lowers the minimum script
time resolution from 56 ms to 1 ms. However, error
handling is not as robust (hence the "risky" designation).
- slab3d User Manual
- Minor updates have been made to the Open-Source Software,
Coordinate Systems, and AvADE Server Software sections.
- Revision 2017.05.04
- AvadeServer
- There are now three states for command logging: completely
disabled, infrequent commands, all commands (verbose).
- Bug Fix: The enable() command previously only worked
when IdSource and IdStream matched if the source was not a
Sonifier. If the source was a Sonifier, the Sonifier's
enable interface was used which was not impacted by this
behavior.
- Bug Fix: The new LLH commands were only executed if
their in-development names were used (origin(), obstacle(), and
listenerwgs84()). originLLH(), obstacleLLH(), and
listenerLLH() now execute properly. The in-development
names still execute as well for backwards compatibility.
- Bug Fix: listener() command state was incorrectly
listed under [Commands] in the state poll window. It has
been moved to [Engine] since it is, in fact, polled engine
state.
- AvadeClient
- Unchecking the Update Rate Script checkbox now displays the
currently active script. It used to default to the Spatial
Demo.
- The AvadeClient scripts and corresponding documentation were
renamed avc_listenerwgs84*.* to avc_listenerLLH*.* to reflect
the migration from in-development command names to LLH command
names. The script initial conditions are now set with LLH
commands alone. Note, obstacleLLH() is essentially an LLH
locate() with six additional, presently unused, parameters.
The unused parameters were included to allow for more advanced
collision detection in the future.
- Due to the scene dimensions, the LLH test scripts (XSTs)
work best with a large source radius and/or a low source spread.
With the default AvadeServer values, the source level will be
quite low. A corresponding log note was added to the LLH
scripts.
- TCP/IP and UDP port use comments were added to the source
code. TCP/IP uses one port for client-to-server and
server-to-client communications whereas UDP uses two. The
UDP return port is specified by the client.
- cleanrel.bat: *.vc.db files are now cleaned.
- Comments
- I thank the U.S. Army AMRDEC
for funding this iteration of slab3d development.
- One should consider this a beta release near the
release date and a final release a few weeks later unless otherwise
noted. A bug notice will be added to the Version History should any
be found.
|
8/12/16 |
Version 6.8.0
- Download
- Contents
- Overview
- This release contains the modifications required
to upgrade the slab3d development environment from Visual Studio
2010 to Visual Studio 2015. Given that Microsoft no longer
supports XNA, a third-party package is required to allow VS2015 to
support legacy XNA projects. Thankfully, the excellent "XNA
Game Studio 4.0.5.zip" package exists for this purpose (available at
https://mxa.codeplex.com/releases/view/618279). This zip
contains all required DirectX dependencies, XNA installation files,
and Visual Studio Extension configuration files organized in a
simple five-step installation procedure.
- Modification Details
- DIS Transmitters (slab3d.v6.8.0\usrlib\rtdis\pa_dis_radio\pa_dis_radio.sln)
- pa_dis_radio.cpp/h: std/cli array ambiguity addressed
by prefixing array with cli:: where necessary.
- PA_DeviceInfo.cpp and PA_DeviceInfo.h appear to be unused
and were thus moved to slab3d.v6.8.0\usrlib\rtdis\common\cpp\audio\jdm_unused\.
- assemblyinfo.cpp: SecurityAction::RequestMinimum is
obsolete and, hence, removed.
- SLABLatency
- Visual Studio 2015's removal of _inp() and _outp() support
disabled the use of the parallel port. slab3d latency
measurements have migrated to the serial port so this isn't an
issue.
- SLABWireDemo
- fft.cpp: <xcomplex> include removed (crashed
compiler), appeared to clash with <complex>.
- paint.cpp: abs() to fabs().
- WINVER and _WIN32_WINNT
- These defines frequently found in StdAfx.h files indicate
the target platform. VS2015 does not support 0x0500
indicating Win2k and WinME and above. Thus, these were
migrated to 0x0501 indicating WinXP and above.
- Clean Scripts
- Minor mods to cleanrel.bat and cleandev.bat to address
evolving detritus.
- The new slab3d\bin\Microsoft.Xna.Framework.* DLL and XML
files were left in place.
- Float Casts
- Several float warnings were fixed with casts:
wavetabs.h, gslab.cpp, slabcon.cpp, dlggen.cpp, and fftdata.cpp.
- AvadeClient
- Bug Fix: The Spatial Demo script
priorities for speak() "azimuth 20 caution" and "and warning"
could cause an enqueuing of the former so that it played again
after the latter. The priorities were changed from 4 to 5
and 3 to 5, respectively, to eliminate potential unintended
repetition.
- Comments
- I thank the U.S. Army AMRDEC and NASA Ames
for funding this iteration of slab3d development.
- This is a slab3d Visual Studio 2015 beta release.
Future work will continue with this code base and development
environment.
- To modify existing slab3d projects that
"Reference" srapi or slab3d, one can eliminate the srapi
"Reference" for the app or slab3d assembly to prevent slabw and
srapi rebuilds (an srapimr.lib library input might have to be
added). The release cleaning causes Visual Studio to flag
slabw and srapi as needing to be rebuilt (and, thus, usrlib
libraries as well).
|
8/12/16 |
Version 6.7.5 Known Issues
- AvadeServer Application Persistence After
Closing
-
After closing, the AvadeServer process was noticed to remain active
at times, leveling off at about 15% CPU use (typically increasing
from single digit simple rendering tests). Having both
"Listen" (listening for and/or having an active TCPI/IP connection)
and "Audio" (audio I/O streaming and rendering) states active seemed
to increase the likelihood of this occurring. If this state
occurs, the task can be ended using Task Manager.
- DIS Radio Long-Term Uninterrupted Audio
Streaming Latency Increase
- When using DIS Radio in a long-term uninterrupted
network audio streaming context, it was sometimes noticed that the
voice communication latency would increase over time. This
state appeared to be triggered by a system load event, e.g.,
starting a CPU-intensive application. Note, in practice, one
typically uses push-to-talk or automated push-to-talk via dB-thresholding
(e.g., DIS Transmitter "Voice Activation") which results in
relatively short communication segments. These occur with the
reproducible low latency discussed in the user manual and technotes.
- DISRec DIS Radio Receiver Application
Stop/Start Frequency Mapping
- If the receiver is stopped and restarted and the
DIS sound source has existing frequency mappings, those mappings
will still be shown. But, they are not activated until the Set
button is pressed for a given frequency.
- AvadeClient Spatial Demo Script TTS Timing
- The priorities for speak() "azimuth 20 caution"
and "and warning" could cause an enqueuing of the former so that it
played again after the latter. In v6.8.0, the priorities were
changed from 4 to 5 and 3 to 5, respectively, to eliminate potential
unintended repetition.
- Note: Except for the preceding bullet,
these issues have not been directly addressed in v6.8.0.
|
7/26/16 |
Version 6.7.5
- Download
- Contents
- Overview
- This release focuses on various improvements to
the AvADE (Aviation Auditory Display Engine) Server and Client
applications. The Text-To-Speech (TTS) priority queue was
extended to include wave files as well. A script editor was
added to the client. Assorted usability and robustness
modifications were made and a simple latency analysis performed (see
technote tn20160616_avade_latency.pdf). The new technote
tn20160725_avade_setup.pdf provides an AvADE Client/Server setup
guide. To improve future AvADE TTS
support, test SAPI voices, and generate TTS wave files, the WinSpeak
application was extended to support both the .NET and COM SAPI 5.4
APIs (see technote tn20160414_text_to_speech.pdf). A WinSpeak executable is now released.
- Modification Details
- AvADE Server Application
- Priority parameter added to playstream()
command.
- The sonify() sonification value parameters
have been increased from one to three.
- The same source can now be used with the
speak() and playstream() commands.
- The stream name can now be changed by
clicking on the name in the stream list.
- The stream parameters can now be changed by
double-clicking the name in the stream list.
- The default source range has been reduced
from 0.5m to 0.1m (the listener is typically stationary at the
origin).
- latency() command added for client-to-server
and server-to-audio_out latency measurement (see LatencyMeasure
below). If a source ID parameter is provided, latency()
behaves similarly to the play() command (SRAPI SiRewind()/SiPlay())
allowing SRAPI playback latency to be captured (e.g., using a
one-shot square wave stream mapped to the source). If no
parameter is provided, latency() simply returns to the client
enabling the client to measure the minimum round-trip network
time.
- A latency analysis build of AvadeServer can
be created by defining LatencyMeasure. This adds Stopwatch
timestamps and serial port event externalization for
oscilloscope capture. When defined, the latency() command
will pulse the serial port upon receipt, log Stopwatch
parameters to the debug window and AvadeServerDump.txt, and
enable serial port loopback tests with values logged to
AvadeServerStat.txt (unhiding the "Loopback" button on the
Settings tab). See tn20160616_avade_latency.pdf.
- Improved robustness.
- AvADE Client Application
- A scripting editor has been added.
- The demo (and documentation) files
avc_demo_mixer.xst, avc_demo_mixer_comments.xst, and
avc_demo_spatial.xst have been removed and are now generated by
AvadeClient. The comments are now in Log commands and the
Help tab.
- A Sonify tab with three sliders has been
added allowing sonification values (sonify() commands) to be
streamed to AvadeServer.
- Stopwatch-based timestamps have been placed
around the network send/receive code to capture and display
round-trip network transport time.
- A LatencyMeasure build can be created similar
to the one described above for AvadeServer. The latency()
command will pulse the serial port just prior to sending a
network packet to AvadeServer. Two additional buttons will
be unhidden, "StatStart" and "StatStop". These enable and
disable the logging of send/receive timestamps to
AvadeClientStat.txt.
- Socket write and read timeouts of 500ms have
been added.
- Additional Help text added.
- WinSpeak Utility
- The simple COM SAPI test code was expanded to
mirror the .NET SAPI implementation with the GUI reorganized
accordingly. The user can now choose between .NET and COM
for accessing a voice. The two APIs were found to behave
differently with the same voice, especially regarding SAPI and
SSML XML tag support and behavior (e.g., .NET does not support
SAPI tags, but appears to support SSML tags better than COM).
- Note, SRAPI was used to play COM TTS memory
in place of .NET's System.Media.SoundPlayer() due to the speech
wave data being raw samples (no header). This provides a
good example of how to use Managed SRAPI with the Diotic
renderer and synchronous rendering to play memory-buffered sound
samples.
- A WinSpeak executable has been added to the release and
the system Start Menu.
- The readme.txt file was revised. The
slab3d TTS documentation is split between the readme (examples
and notes), the Form1.cs comments (MSDN SAPI 5.4 .NET and COM
links), and the tn20160414_text_to_speech.pdf technote (TTS
overview and third-party voice options).
- Sonifier and Audio Locator Reorg
- Sonifiers.cs: Updated the names of all
Sonifiers and Locators, e.g., prefixed all Sonifiers with "Son".
Simplified the Sonifier interface and made all existing
Sonifiers compatible in regards to the setting of sonification
values. This enabled all existing Sonifiers to be
selectable by AvadeServer (as well as future Sonifiers).
Moved the Sonifiers enum from AvadeServer to Sonifiers.cs and
added missing Sonifiers. The LocAzNoiseTone and
LocAzImpTone Audio Locators were moved from Sonifiers.cs to
AudioLoc.cs.
- The SonAzNoiseTone and SonAzImpTone
SrcLocatePolar() functions were replaced by SrcLocateRel()
(these Sonifiers were previously used with the listener at the
origin).
- SlabSharp Assembly
- Stat.cs: Added a time base init in the
constructor so Perf() can be relative to app start or most
recent Stat.Start(). Added FilenameStat and FilenameDump
properties to allow user to set the name of the output files.
These default to the old hardcoded names of "stat.txt" and "dump.txt",
respectively.
- XScript.cs: SetCurIndex() added for
random access script start.
- SRAPI Library
- SiPaused() added for checking stream paused
state.
- Slab3d Assembly
- SiAllocMemory() and SiPaused() added.
- Netcom/VoIP: Netcom renamed DISRec (DIS
Receiver) to reflect it's pairing with the DISTrans (DIS
Transmitter) app. Also, the JVoIP-based VoIP support has been
removed from Netcom as well as slab3d, in general. JVoIP was
no longer supported, had somewhat high latency, and was superseded
by two DIS implementations that provide lower latency and more
features.
- slabtools
- ahm2sarc.m was updated from the 2006 HeadZap
AHM file I/O API to a 2015 version of the HRTFDevKit API.
The 2006 API ahm2sarc.m was renamed ahm2sarc1.m.
- The 2006 API zap2sarc.m was renamed
zap2sarc1.m to be consistent with ahm2sarc.m. (An
HRTFDevKit version does not exist.)
- ahm2slab.m created to convert AuSIM AHM files
to slab3d HRTF database (SLH) files. The AHM file format
is fairly flexible and complex. ahm2slab only converts the
AHMs that contain data compatible with the SLH format.
- hen() bYaw flag added to narrow IID color axis for yaw error
visualization.
- hencbview.m: critical-band IID visualization added.
- Documentation
- Added technote tn20160414_text_to_speech.pdf:
Discusses Windows managed SAPI interfaces, SAPI/SSML XML markup,
and third-party voices.
- Added technote tn20160616_avade_latency.pdf: Describes an Avade Client/Server
latency analysis comparing the MOTU PCI 424 and the USB RME Fireface UFX audio peripherals. Both network and server
audio latency were examined.
- Added technote tn20160725_avade_setup.pdf: Provides an AvADE
Installation, Configuration, and Interaction Setup Guide.
- The technote tn20050228_asio_latency_reduction.pdf was
created from the slab3d User Manual appendix.
- Comments
- I thank the U.S. Army AMRDEC and NASA Ames for funding this iteration of
slab3d development. I also thank CereProc for providing the
Isabella and Katherine voices for research use. These proved
useful for WinSpeak development and TTS wave file creation.
- One should consider this a beta release near the
release date and a final release a few weeks later unless otherwise
noted. A bug notice will be added to the Version History should any
be found.
|
3/10/15 |
Version 6.7.4
- Download
- Contents
- Overview
- This release focuses on fog and lighting effects,
space camera motion, XNA 4 timing, latency analysis, and audio-visual
synchronization, translation sonification, and DIS Radio network
communications. Two executables were added to the
distribution, DISTrans, a DIS Radio transmitter app, and Netcom, a
DIS Radio and VoIP receiver test app. The AvADE Server
receiver was changed from VoIP to DIS Radio to reduce latency, to
support DISTrans, and to conform to a network communications
standard (IEEE Standard 1278).
- Modification Details
- slabwire library
- DISManager: RT_DIS support added to
CDISManager functions GetRadioNum(), GetFreqNum(), GetRadioID(),
and GetFreq(). Note, though, the pre-RT_DIS DIS API (aka
2009 API) takes precedence so if both APIs used in the same
execution, the 2009 API values are returned.
- SSIn_RT_DIS_Radio_Set_UDP_Receiver_Port() (and Get) implemented.
- StreamInDISRadioRT DEF_DISR2PB prebuffered zeroes constant
lowered from 200ms to 10ms (tested well and matches RT_DIS default).
- Bug Fix: 2009 DIS API 16-bit PCM data needed to be
byte swapped.
- Bug Fix: 2009 DIS API read/write locks updated to
avoid sample rate error assert.
- SRAPI Library
- The high-latency StreamInDISRadio stream type
was removed (StreamInDISRadio was essentially replaced by StreamInDISRadioRT
back in 2009; if file
output desired, real-time output can be split to a file).
The corresponding changes were made to SiAllocDISRadio() and
SiAllocDISRadios(). The DisSilence constant was removed
and DisPreBuf was lowered from 600ms to 10ms (to better reflect
StreamInDISRadioRT use).
- The DIS Manager functions DMGetRadioNum(),
DMGetFreqNum(), DMGetRadioID(), and DMGetFreq() now support
RT_DIS.
- The ntpulser (noise + two tones pulser) signal generator was added to
the gslab generator plugin.
- SlabSharp Assembly
- StreamInDISRT (RT_DIS API) added to StreamType enum.
- Two sonifiers were added to Sonifiers.cs. The SonAzElRange sonifier uses
spatialized noise and tone pulses to sonify azimuth,
elevation, and range. The SonTrans sonifier uses spatialized
noise and tone pulses to sonify x, y, and z translations.
- SlabX Assembly
- GtTimer and Panel.Draw() time accuracy
improved.
- Shader.cs: New classes added to support fog
and lighting.
- XScapeFile.cs: Fog and Lighting added
to XScapeFile format. PreTrain bool to string.
- Obj3D.cs:
- Fog and Lighting properties added.
- GraphDev, BasicEffect, Content, and Cam now static.
BasicEffect creation moved from Game to GraphDev set.
This simplifies 3D object initialization as illustrated by
changes made to XScape Game1.cs.
- Default Cam added.
- Objects.cs:
- ObjReticle added.
- ObjGround now supports fog and lighting
(old ground now ObjGroundColor).
- Models support new fog and lighting.
- The skybox is not rendered when fog
enabled.
- Skybox now moves with cam in y as well as
x,z and supports collision detection (both changes for ground
off, e.g., space simulations).
- ObjectsMS.cs: Fog supported.
- CamYPR.cs:
- Up/Down added to Move(), MoveKey(), and
MovePad(). Roll added to MoveKey().
- The MatCam and Look properties were added
for use by objects placed relative to camera, e.g.,
ObjReticle.
- FlightRoll property added to disable
flight model for space motion. Defaults false.
- SpaceMotion property added to support new
MoveSpace() space motion (Move() now MoveGround()).
- Bug Fix: Update period counter accuracy
improved in LowVis.cs.
- XScape Application
- Fog added to LowVis tab.
- Lighting tab added.
- SpaceMotion checkbox added to enable space
camera motion.
- The new XScape file scape_space.xsc (in bin\)
demos the use of the space camera (xbox controller recommended).
- Additional motion information added to XScape
help.
- Update() time accuracy improved.
- AvADE Server Application
- The VoIP stream input option was replaced by
DIS radio to reduce latency, to support DISTrans, and to conform
to a standardized form
of network communications.
- Netcom Application
- The GUI was expanded to allow different
network communication configurations to be tested without source
code modification.
- DIS radio and frequency query features were added for
the RT_DIS API.
- Detailed ASIO information is now displayed at
app start.
- DIS radio and VoIP latency tests were
performed. Results are available in the slab3d user manual.
On a single PC, DIS transmitter-to-receiver (DISTrans/Netcom)
latencies were measured between 27-34ms.
The SLABCall/Netcom latencies were measured: VoIP ID stream 98ms, VoIP Port
stream 134ms.
- WinSpeak Utility
- A default-voice COM SAPI 5.4
(i.e., SpVoice versus SpeechSynthesizer) speak option was added to test SAPI XML
tags (versus SSML).
- XTime Utility
- GamePad and GameTime.ElapsedGameTime.Ticks
analysis added.
- XTime was used to perform the latency analysis reported in
the new technote tn_av_latency_2014.docx.
- XMap Application
- The XMap executable is no longer
released or added to the Start Menu links.
- RT_DIS 3rd-Party Library and Application
- pa_dis_radio (DIS transmitters making use of PortAudio)
- DISTrans: A DIS transmitter Forms
app was created based on John Stewart's DIS_Radio WPF
application. It simplifies DIS API access for the
purposes of testing and experimenting.
- rt_dis_radio (DIS radio library used by
SRAPI)
- Radio ID and frequency query features
added.
- Bug Fixes: See
mc_DIS_radio_transceiver.cpp.
- Note: Since this is a 3rd-party
library, all modifications are noted with "JDM".
- Documentation
- The new technote tn_av_latency_2014.docx
discusses the timing, latency analysis, and synchronization of
the xbox controller, XNA 4, and slab3d.
- Comments
- I thank NASA Ames for funding this iteration of
slab3d development.
- One should consider this a beta release near the
release date and a final release a few weeks later unless otherwise
noted. A bug notice will be added to the Version History should any
be found.
|
1/12/01
|
Welcome to the slab3d home page! The slab3d software and documentation are works-in-progress. Please report bugs or
comments to the
slab3d
mailing list. |