slab3d logo



All downloads:

Individual release downloads are included in the Version History below.

System Requirements

slab3d runs under Windows 2000 and above and supports WDM (DirectSound, Waveform-Audio) and ASIO sound device drivers.  If executing a slab3d application reports a missing DLL, you most likely require a more recent or more encompassing version of the "DirectX End-User Runtime" or "XNA 4.0 Redistributable" (see Microsoft Download Center).  The most recent slab3d libraries and executables are built using Microsoft Visual Studio 2010.  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
  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

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" package exists for this purpose (available at  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.


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