slab3d logo

        Downloads


Downloads

All downloads:  http://sourceforge.net/projects/slab3d

Individual release downloads are included in the Version History below.

System Requirements

slab3d runs under Windows 7 and above and supports WDM (DirectSound, Waveform-Audio) and ASIO sound device drivers.  If executing a slab3d application reports a missing DLL, the likely candidate dependencies are, depending on slab3d version (see Version History):  .NET 4 or .NET 4.5, DirectX End-User Runtime June 2010 (for SLABScape), XNA 4.0 Redistributable (for pre-v6.8.3 XScape/SlabX), Visual Studio 2015 Redistributable (for all, see The Microsoft Download Center), or Visual Studio 2017 Redistributable (https://visualstudio.microsoft.com/downloads/).  The most recent slab3d libraries and executables are built using Microsoft Visual Studio 2017 and MonoGame (http://www.monogame.net/downloads/).  The Visual Studio 2015 XNA projects require the "XNA 4.0 Refresh (Visual Studio 2015)" (XNA Game Studio 4.0.5.zip) previously distributed by mklemarczyk on codeplex.  Due to the demise of codeplex, it is has been added to the slab3d SourceForge downloads (many thanks to mklemarczyk for making this package available).  More information on building slab3d is available in the slab3d User Manual.  See the Version History below for release contents and comments.  Multiple versions of slab3d can be installed on the same system.

Installation Instructions

  1. Download ZIP file from SourceForge.net.
  2. Unzip to preferred location.
  3. To create a slab3d Start Menu folder, execute SLABScape from the release bin\ directory, open the About dialog in the Help menu, and press the "Create slab3d Start Menu folder" button.

To get started, see the following items in the slab3d Start Menu or installation directory:

Version History

slab3d version number = major.minor.release

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.
      • Blackhawk drift trajectoryA 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.
     
asio logo   Versions 5.4.0 and beyond use ASIO Technology by Steinberg.  ASIO is a trademark of Steinberg Soft- und Hardware GmbH.

Prior Versions      Top