Prior Versions


Back to Downloads

ZIP Install

  1. Download ZIP file from SourceForge.net.
  2. Unzip to any location.
  3. Depending on version:
  4. slab3d is now installed.  To get started, see the following items in the slab3d Start Menu or installation directory:

MSI Install

  1. Double-click the saved slab3d MSI file.
  2. Follow the directions of the installer.
  3. The installer creates the folder "slab3d" under Start Menu | Programs.  The slab3d registry settings must be set before using the slab3d applications and libraries.  All users with individual accounts will need to do this.  Select the Start Menu item "SLABScape" to set the slab3d registry settings.  SLABScape automatically sets the registry settings if they are not already set.  The registry settings can be viewed under the menu slab3d | slab3d Registry Settings....  SLABScape is the main slab3d demo application.
  4. slab3d is now installed.  To get started, see the following items in the slab3d Start Menu folder:

 

6/30/14 Version 6.7.3
  • Download
  • Contents
  • Overview
    • This release focuses on AvADE Server and Client improvements.  The Mixer Render PlugIn is now supported, as is a wider range of ASIO peripherals (namely, the well-suited USB Focusrite Scarlett 18i20).  The AvADE Client application can use scripting and scripted screenshots to mimic a variety of client usage scenarios.  This release also includes ASIO and XNA latency analysis software, measurements, and documentation.
  • Modification Details
    • slabwire library
      • CSOAsio now supports audio peripherals that provide a range of buffer sizes specifiable via software.  CSOAsio will ensure the selected buffer size is a multiple of the audio processing frame size.  The GetAsioBufSize() function was added.
    • SRAPI Library
      • The GetASIOChIn() and GetASIOChOut() functions have been replaced by a more informative API: GetASIOInfo() and the ASIOInfo struct.
    • slabcon demo application
      • The demo_script1() demo uses the new ASIO info query API.
    • Slab3d Assembly
      • Added SrcMixGain(), SrcMixAux(), GetASIOInfo(), and the ASIOInfo struct.
    • XScript XML Scripting Language
      • No longer depends on XNA, e.g., Vector3 to floats (XScape updated accordingly).
      • XScript was moved from the SlabX assembly to the SlabSharp assembly.
      • The XsString command was added.
    • AvADE Server Application
      • Support for the Mixer Render Plugin was added including the new commands mixgain and mixhrtf.
      • A default sonifier was added as a proof of concept (XScape use more relevant).
      • An ASIO Details query capability was added (Settings tab) for querying buffer sizes and latencies.
      • Two ASIO devices have been tested for use and can be recommended for two different scenarios:
        • Minimum Latency: MOTU PCIe card and 24 I/O unit, estimated mean API latency for a buffer size of 64 samples is 4ms, I/O latency 5ms.
        • Convenience: Focusrite Scarlett 18i20 (USB, 2 headphone outs, 8 mic pres, simple and flexible configuration), estimated mean API latency for a buffer size of 2.0ms (89 samples) is 11ms, I/O latency 15ms.
    • AvADE Client Application
      • Scripting and two image windows (for screenshots) added.
      • Spatial and Mixer Render Plugin example scripts can be generated to test all client/server commands and to serve as script templates.  A commented version of the Mixer script has also been added.  The Spatial script tests the default server configuration - simply press Listen and Audio on the server and Host, Connect, and Run on the client.
    • HeadMatch Application
      • Lock used in place of sleep to allow DSP parameters to stabilize (see "DSP Parameter Caution" in slab3d User Manual).
    • SLABSurface Application
      • The SLABSurface executable is no longer released or added to the Start Menu links.
    • WinSpeak Utility
      • The readme.txt file contains updated info regarding SAPI voices.
    • XTime Utility
      • Unarchived and used to perform a quick Windows 7 and XNA4 audio-visual latency measurement.
    • Documentation
      • The following sections have been added to the slab3d User Manual: Appendices "AvADE ASIO Audio Peripheral Latency Comparison" and "Latency Reduction Techniques for Software-Based Real-Time Auditory Displays", "AvADE Server Software", and "DSP Parameter Caution".
      • The technote slab3d Audio-Visual Latency Analysis was added that discusses C#-based latency analyses performed in 2012 and 2014.
    • slabtools matlab scripts
      • Minor changes and additions related to figure generation: gridprint.m, hencbview.m, latbar.m, latbar2.m, latmc.m, and vcfreqlog.m.
  • 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.
11/2/13 Version 6.7.2
  • Download
  • Contents
  • Overview
    • This is primarily a slabtools and low-latency DIS beta release.  The new slabtools relate to the conversion and verification of the Listen and CIPIC HRTF database collections.  A corresponding user manual has been added to the docs.  Low-latency DIS radio support was provided by AFRL programmer John Stewart.  It includes a new set of SRAPI DIS functions (RT_DIS), a slabwire StreamIn class, a support library, and a DIS radio transmitter app.  An SRAPI network communications API test app, Netcom, was added that tests both the old and new SRAPI DIS interfaces.
  • Modification Details
    • Slab3d Assembly
      • DIS support was added for the low-latency RT_DIS API and the 2009 SRAPI DIS API.
      • The following functions were also added:  GetCPU(), SiTypeName(), GetSrcAlloc(), GetSrcNum(), and GetSrcStreamID().
    • SlabX Assembly
      • Modified SlabX.Panel meter color behavior.
    • SRAPI Library
      • RT_DIS API added.
      • slabwire wrapper functions were added for the 2009 DIS API.
      • New function: GetCPU() for CPU use query.
      • New functions:  SiTypeName() and GetSrcStreamID() for querying slabwire StreamIn/StreamOut types and strings.
    • slabwire library
      • New sample stream type StreamInDISRT (streams.h) and StreamIn class CSI_RT_DIS_Radio.
      • streams.h is now accessible from C# via SlabWire.StreamTypes (C++ enum to C++/C# struct).
    • usrlib\ directory
      • New rtdis\ directory:  John Stewart's low-latency DIS library and DIS transmitter app.
    • SLABScape Application
      • SLABScape's GetCPULoad() replaced by SRAPI's GetCPU().
    • HeadMatch Application
      • The HeadMatch HRTF listening utility binary is now included in the release.
    • Netcom Application
      • Netcom is a new app that demonstrates and tests the SRAPI network communication functions.  Netcom is not a general-purpose app; it is intended for use at the source-code level.
    • slabtools matlab scripts
      • Several scripts have been added to convert and verify the Listen and CIPIC HRTF database collections:  bound.m, ccheck.m, cfull.m, cipic2slab.m, cpath.m, ctest.m, dmap.m, lcheck.m, lfull.m, listen2slab.m, listcen2slab.m, ltest.m, vsym.m, hencb.m, hencbmat.m, hencbview.m, henitd.m, ithresh.m, p2r.m, r2p.m, poserr.m, serrvis.m, snow2sarc.m, vcen.m, vcenf.m, vcfreq.m, vcir.m, vcitd.m, vcsym.m, vsym1.m, and vsyms.m.
      • The new slabtools User Manual documents their use.
    • HRTF Databases
  • Comments
    • I thank NASA Ames for funding this iteration of slab3d development and John Stewart, Brian Simpson, and the AFRL for providing low-latency DIS support.  I also thank the Listen Project and CIPIC lab for making excellent spatial-audio resources publically available.
    • 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.  This release is a bit more beta than usual being the new features have not yet been used in experiments or prototypes.
8/5/13 Version 6.7.1
  • Download
  • Contents
  • Overview
    • This is a refinement release related to in-house experiment development.  The refinements mainly relate to XNA opacity, Audio Locator and Sonifier robustness, SRAPI function blocking, and a simple four-meter sprite-based 2D overlay for XScape-based 3D displays.
  • Modification Details
    • Slab3d Assembly
      • Added UpdateWait(), UpdateWaitReset(), Lock(), and Unlock().
    • SlabSharp Assembly
      • AudioLoc.cs and Sonifiers.cs - enable state now managed by Sonifier instead of sound source, added thread sync code for improved robustness.
    • SlabX Assembly
      • CamYPR.cs, LowVis.cs, Map.cs, Obj3D.cs, Objects.cs - RGB values now based on opacity (due to XNA 3.1 to 4.0 change in alpha rendering).
      • Map.cs - pixel texture moved to ViewMan (View Manager), Load() function now Create().
      • XScapeFile.cs - Trigger and ListTrigger fields added.
      • New file: ViewMan.cs (View Manager) was moved from XScape to SlabX to allow XScape-based displays to be easily integrated into other apps.  A simple selectable meter panel was added (see SpriteControls.cs).  "Triggers" were added to the layout map.  The 2D map's pixel texture was moved to ViewMan to support 2D drawing.
      • New file: SpriteControls.cs provides a hard-coded panel of four extremely simple "distractor" meters.  This was developed for an in-house experiment, but this file can serve as a starting point for adding 2D sprite-based controls to a SlabX-based 3D display.  A bit of commented-out test code remains in XScape - see mouseClick() and ViewMan.Select() use.
    • SRAPI Library
      • Added UpdateSet(), UpdateWait(), and UpdateWaitReset() to improve thread synchronization capabilities and to enable scene state function blocking (i.e., waiting for scene state to be applied to DSP before continuing).  Function blocking is helpful for the immediate use of DSP parameters in C#, e.g., GetSrcAz() (in update loops, polling often makes this unnecessary, e.g., if az not correct immediatly, it will be the next update).  Blocking is also useful for making sure the DSP has been updated after enabling a source with SrcEnable().  Note, though, blocking of the type described here is typically not needed.  See the AzNoiseTone.Enable source code in Sonifiers.cs for an example of use.
    • XScape Application
      • XNA 3.1 to 4.0 opacity update.
      • The placement of "triggers" was added to the Layout tab.  Triggers are saved in the XScapeFile output file for use by custom apps.
      • A previous/next block open feature was added to the Layout tab.
    • XMap Application
      • XNA 3.1 to 4.0 opacity update.
    • XUp Utility
      • An XScapeFile v6.6.0 to v6.7.1 update code block was added (see UpdateX() in Form1.cs).
    • XTime Utility
      • Archived (moved to slab3d\src\archive\).
    • slabtools matlab scripts
      • New script: c2r.m converts CIPIC interaural-polar coordinates to slab3d rectangular coordinates.
      • vitd.m - improved metrics and display.
      • grids.m - added HRTF grid specification, return, and the ACD (NASA Advanced Controls and Displays Group) grid type.
      • hen.m - added IID (Interaural Intensity Difference) visualization.
      • lrsphere.m (support script) - more view options.
      • Bug Fix: lrsurf.m (support script) - number of arguments check fixed.
  • Comments
    • Many thanks to 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.
12/17/12 Version 6.7.0
  • Download
  • Contents
  • Overview
    • The following development tools have been upgraded: Visual Studio 2008 to 2010, Windows SDK v6.0A/v6.1 to v7.0A, .NET 3.5 to 4.0, and XNA 3.1 to 4.0.  The new SlabSharp assembly is a C# extension to the C++/CLI Slab3d assembly.  This release also contains the new SRAPI client/server and speech synthesis beta applications: AvADE Server, AvADE Client, and WinSpeak.
  • Modification Details
    • Slab3d Assembly
      • Several SRAPI functions added (see the msrapi.h modification history).
      • Support added for the new SRAPI notification callback paradigm.
    • SlabSharp Assembly
      • The new SlabSharp assembly is a C# extension to the C++/CLI Slab3d assembly.  Thus, the SRAPI-related assemblies and libraries are layered high-to-low as: SlabSharp (C#), Slab3d (C++/CLI), SRAPI (C++), and slabwire (C++).  SlabX functionality independent of XNA was moved to SlabSharp (e.g., Audio Locator, SlabBinder, SlabScene, and Stat).
      • Sonifiers.cs - Sonifiers wrap SRAPI signal generators with added functionality in order to sonify a user-supplied parameter.
      • AudioLoc.cs - The Audio Locator now uses Sonifier subclasses instead of its own classes for sound source azimuth sonification.
    • SlabX Assembly
      • Functionality independent of XNA moved to SlabSharp.
      • The use of SRAPI from within SlabX was reduced as much as possible.  As the feature set of both MSRAPI and SlabX increased, the merged code was becoming increasingly complex and limiting.  SRAPI was completely removed from the camera, thus listener position is now set using MSRAPI.  3D objects still update sound source location and contain SlabBinder for data binding and SlabScene for serialization, but sound source and StreamIn allocation have been removed.  XScape demonstrates the new API paradigm.
    • SRAPI Library
      • SRAPI notifacations now occur via callbacks instead of window messages.  If the old behavior is desired, a PostMessage() can be placed in a callback.
      • SiAllocFile() and SiAllocUrl() notifications now occur using the new notification callback mechanism instead of window messages.
      • New SRAPI functions: SrcGetID() and SiGetID() for getting valid sound source and StreamIn IDs, SiDone() for checking StreamIn playback done state, and SiAllocMemory() for allocating memory buffer StreamIns.
      • New SRAPI constants were added to the slabdefs.h SC struct: NotifyDspDone, NotifyStreamDone, and AsioDevices.
    • slabwire library
      • CSIMemory - The memory buffer StreamIn data is now provided as float samples instead of bytes.
      • Bug Fix: CSIVoipID could cause an access violation if the app was closed while rendering a VoIP sound stream.
    • AvADE Client/Server Applications, WinSpeak Utility
      • Three new applications have been added to the slab3d\src\ directory: Avade (AvADE Server, AvADE = Aviation Auditory Display Engine), AvadeClient, and WinSpeak.  These applications demonstrate the use of SRAPI in a C# client/server environment.  Avade supports on-demand SAPI speech synthesis and spatialization.  WinSpeak is a simple SAPI demo and test utility.
      • Note: These applications are beta versions in the sense they are still in development and have not yet been used in an actual simulation or experiment setting.  But, the primary functionality is in place.
    • XScape Application
      • XScape was updated to reflect changes to SlabX, SlabSharp, and the Audio Locator.
    • XTime Utility
      • XTime was updated to reflect changes to SlabX, SlabSharp, and the Audio Locator.  These changes have not been tested (XTime is quasi-archived).
    • SLABScape Application
      • SRAPI notifacation changed from window to callback.
      • As part of the Windows SDK upgrade, the grammar compiler custom build step was removed.  See slab3d\src\SLABScape\grammar.txt.
    • SLABSound Utility
      • The WAV file RIFF information and audio device capability text files are now output to the current directory instead of the root directory.
  • Comments
    • Many thanks to 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.
7/9/12 Version 6.6.1
  • Download
  • Contents
  • Overview
    • This release contains mods related to XScape entity scripting, visual obstructions, camera spatial disturbances, and camera 6-DOF movement, audio-visual latency measurement and synchronization, HRTF listening, and panned rendering.  This is the last release based on Visual Studio 2008, Windows SDK v6.0A/v6.1, .NET 3.5, and XNA 3.1.  These components are being upgraded to Visual Studio 2010, Windows SDK v7.0A, .NET 4.0, and XNA 4.0, respectively.
  • Modification Details
    • slab3d assembly
      • More SRAPI functions added (see the msrapi.h modification history).
      • Several of the slabmath.h functions and constants were added to Slab3d via the Slab3d.SlabMath struct.
    • slabx assembly and XScript
      • CamYPR.cs - Pitch and roll disturbance model added, Move() API simplified, MoveArrow() and MovePad() added for arrow key and GamePad movement, simple GamePad flight model added, and full six degree-of-freedom movement now supported.
      • Map.cs - Added full window display, grid lines, and script path creation and display.
      • Physics.cs - New classes including a leaky integrator parameter tracker for parameter smoothing and lag modeling and sum-of-sines for disturbance modeling.
      • Stat.cs - New C# version of C++ stat.cpp timestamp functions.
      • XScapeFile.cs - Moved to the SlabX namespace, support for scripted paths added.
      • XScript.cs - Reorganized to be more flexible, moved from XScape to SlabX.
    • XScape
      • Added visual collision detection spheres for objects (vs just entities).
      • Added Camera tab supporting simple GamePad flight (disable lock y-axis), speed setting, and a spatial disturbance model.
      • Added XScript tab supporting the creation of scripted entity paths.
    • SRAPI
      • New SRAPI functions: SetDelayOut(), GetDelayOut(), GetDelayOutFrames(), LstHRTFHeader(), and SrcLocatePan().  GetSrcRel() changed to GetSrcLocType().
      • New SRAPI constants were added to the slabdefs.h SC struct: DelayOutMax(), SrcLocSpatial, SrcLocRel, SrcLocPan.
    • rspatial
      • Delayed audio output added (e.g., for synchronizing audio and visual displays).
      • Panned sound sources added so that spatial and panned sources can be displayed simultaneously.
    • gslab
      • One-shot playback was added to the "noisepulse" generator.
    • HeadMatch
      • The HeadMatch application was added for the quick comparison of multiple HRTF databases (beta, development paused).
    • cbuilder
      • A simple solution was added for building XNA content (slab3d\src\cbuilder).  This solution can be used with 3rd-party conversion tools to convert Google 3D Warehouse models into XNA XNB files loadable by XScape (by placing in slab3d\bin\Content).
    • slabtools
      • cbe.m - The Normalized Critical Band Energy is no longer returned in dB.
      • dist.m - New 5-sine SOS (sum-of-sines) pitch and roll disturbance model.
      • hcom.m - The Interaural Intensity Difference value has been added.
      • plotresp.m - Support for unwrapped phase and phase axis min/max added.
      • vitd.m - Source-listener distance parameter and diagonal bias metric added.  DIS metric display simplified.
    • SLABLatency and XTime
      • The SLABLatency application was unarchived and upgraded to v6.6.1.
      • The XTime application was created for conducting managed latency measurements similar to those provided by the unmanaged SLABLatency application.  XTime also tests and demonstrates the new delayed audio output feature.
  • Comments
    • Many thanks to 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.
10/6/11 Version 6.6.0
  • Download
  • Contents
  • Overview
    • This release includes the new C# XNA-based graphics engine slabx and virtual environment application XScape.
  • Modification Details
    • slab3d.dll
      • The msrapi assembly was renamed slab3d (still primarily contains the managed SRAPI wrapper class MSRAPI).  The name change reflects the namespace and the paired use of slab3d.dll with slabx.dll (slab3d.dll/Slab3d being the sound engine and slabx.dll/SlabX being the graphics engine).
      • The Src*() state functions now return bool.
      • The GetSrcLoc(), SetSharedMemory(), and GetSharedMemory() functions were added.
      • The SC (SRAPI Constants) and Version (SLAB_VER wrapper) structs were added.
      • XNA coordinate functions were added:  XSrcLocate(), XGetSrcLoc(), XLstPosition(), and XGetLstPos().
      • Bug Fix:  The C#/C++ SrcLocate() parameter mapping was x,y,x instead of x,y,z.
    • slabx.dll, XScape, XMap, XUp, and XScript
      • slabx is an XNA-based 3D-graphics engine providing a yaw-pitch-roll camera, skybox, low-visibility model, 2D map, ground surface, ground cursors, collision detection, slab3d sync/binding/serialization, basic model/object/primitive support, and the XScapeFile format.  The XScape application demonstrates the use of these features.
      • XScape is a C# 3D audio-visual virtual environment application.  It somewhat serves as a C#/.NET/XNA counterpart to the C++/MFC/DirectX SLABScape.  In the default "Auditory Beacon" configuration, XScape displays a 3D audio-visual simulation of a spatial-audio augmented-reality display.  The user is placed in the role of a telepresence operator controlling a rover on a Martian plateau from a nearby location.  Auditory icons are attached to five entities in the environment.  An Audio Locator can be used to assist with the location of entities (e.g., for low-visibility conditions).
      • XMap displays XScape's 2D map in a separate application (e.g., to be placed on a second monitor).
      • XUp is a utility for updating XScapeFile XML (.XSC) files.  It simply reads them in, optionally modifies a few fields (in source code), and writes them out.
      • XScript is part of XScape but it is also meant to be a simple reusable framework for XNA Update()-based script and modifier processing.  It is essentially the XNA/C# counterpart to SRAPI's SlabScript and Modifier functionality.
    • SRAPI
      • Sound source IDs can now be allocated in any order (they previously had to be allocated 0,1,2,...).
      • The enums and defines in slabdefs.h were replaced by the SC (SRAPI Constants) struct to enable managed use.
      • Script processing can now occur in its own thread (see ScriptOpen()).
      • Shared memory support was added via SetSharedMemory() and GetSharedMemory().
      • GetSrcGain() now returns SC::GainMutedB() for linear gain 0.
      • SiAllocFile() can now specify a sample start index (also added to Scene file and Modifier).
      • The Src*() state functions now check for a valid source index (false is returned if the index is invalid).
      • The GetLstX() etc. functions have been removed (GetLstPos() preferred).
      • GetSrcRel() has been split into GetSrcAz(), GetSrcEl(), and GetSrcRange().
    • slabwire
      • A sample start index parameter has been added to CSIFile::CSIFile().
    • rspatial
      • Exceeding the delay line is no longer an error.  It now results in the max delay supported.
    • gslab
      • The "noisepulse" generator has been added to gslab.
      • The gslab.h enums were converted to structs and ints for managed use.  C++ use requires "using namespace GenSlab;".
    • gstk
      • Bug Fix:  The gstk generator plugin wave directory was corrected.
    • SLABScape
      • Bug Fix:  Attempting to select the built-in default HRTF could fail after loading HRTF files.
    • slabtools
      • c2s.m - A new function to convert CIPIC coords to slab3d coords.
      • grids.m - Was cgrid.m.  x,y,z now in slab3d coords.  Listen grid added.
      • hcom.m - Energy stats are now returned.
      • hen.m - Energy stats are now returned.  A spherical display added.
      • map2map.m - A progress meter has been added.
      • mat2slab.m - HRIRs and ITDs can now be specified with unique spherical data grids.
      • sitds.m - Compares the Miller and Woodworth/Schlosberg ITD formulae.
      • sitdw - Computes Woodworth/Schlosberg spherical-head model ITD.
      • vall.m - The log frequency tick labeling was simplified to prevent resize label errors.
      • vsym.m - A new function similar to vall.m but focused on head symmetry visualization.
      • vitd.m - Additional stats are computed, displayed, and returned.
      • dustimg.m - A new function to generate images for slabx's low-vis model.
      • Bug Fix:  sitd.m - When using three parameters, the hr parameter was overwritten by the default.
    • archive
      • The src\archive\ directory was created for projects that are no longer regularly maintained or built.  The following projects were archived:  form320, rsar, rvbap, SLABForm, SLABLatency, and slabwcon (including usrlib\libresample-0.1.3).
    • documentation
      • The HTML "slab3d User Manual" has been replaced with MS Word and PDF versions.
  • Comments
    • Many thanks to 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.
    • The managed and XNA-based projects are works-in-progress.  Functionality is added on an as-needed basis.  The main source of documentation is the source code itself.  MSRAPI (Managed SRAPI, slab3d.dll) behaves very much like SRAPI as illustrated by the mcon and slabcon projects.  The slabx XNA-based classes are new.  Their use is best illustrated by the XScape source file Game1.cs.  One would most likely need some familiarity with XNA to make use of the slabx framework.  This is somewhat new territory for slab3d and myself.  So, any recommendations or comments welcome.
11/20/09 Version 6.5.0
  • Download
  • Contents
  • Overview
    • This release focuses on the Mixer render plugin, script processing, and managed code use.
    • The Mixer Settings dialog was added to SLABScape and the mixer settings were added to the XML scene file.  A block diagram was added to the slab3d User Manual.  The SrcMix API was refined.
    • To enable the use of SRAPI from XML scripts and managed code, the use of returned IDs, pointers, and slabwire objects was greatly reduced.  This has resulted in significant changes to the API (see details below).  A C++/CLI SRAPI wrapper DLL was created for managed code use (msrapi project).
    • Script and modifier allocation and initialization of streams was made more robust.  If audible artifacts are heard during script or modifier stream allocation, the original 1/2/4/8x resampling algorithm can be selected to reduce stream initialization CPU use.
    • Various SRAPI demos were integrated, simplified, and improved.  The SLABX and slabcom applications were removed with the most relevant portions moved to the slabcon application.  The C# mcon demo application was added.
    • The use of the ASIO SDK was simplified.
  • Modification Details
    • SRAPI
      • The source/stream distinction in SRAPI is now more explicit.  There is one source allocation function: SrcAlloc().  A "sound source" holds emitter state for the Spatial render plugin and channel strip state for the Mixer plugin.  A "StreamIn" refers to the specific sound sample stream streamed into the renderer.  StreamIns are allocated and controlled via the Si*() functions.  Sound sources are mapped to StreamIns (and StreamIn channels) with SrcStream().  Sound source IDs are now user-specified integer IDs (0 to MAX_SRC).  StreamIns are also referenced via user-specified integer IDs (0 to MAX_STREAM).  Modifiers and script processing were updated accordingly.  See the slabcon application for demos of the new paradigm.
      • The IDHRTF HRTF database ID has been replaced by a user-specified integer ID (0 to MAX_HRTF).  See slabcon for a demo.
      • SrcFree() no longer checks if SRAPI is in an error state before executing.  Its return value is now bool instead of SLABError.
      • SetResampler() was added to specify resampling options.  The upsample-delay-lines parameter was removed from SrcAlloc().  See slabcon for a demo.
      • SrcMixReturn() was merged into SrcMixGain().
      • SrcMixSend() was renamed SrcMixAux().  The SrcMixSend script command was renamed SrcMixHRTF.
      • SrcMixGain, SrcMixReturn, SrcMixHRTF, and RenderChange settings were added to the XML scenefile.
      • SrcMixAux() and SrcMixGain() were added to SetDefaults().
      • GetSrcMixGain(), GetSrcMixAuxEn(), and GetSrcMixAuxSet() were added to query Mixer plugin settings.
      • The Modifier command enums were converted to functions.  See slab3d\bin\slabscript.sls for a demo.
      • Several slabdefs.h SRAPI default defines were replaced by SRAPI function parameter defaults.  This allows initial state to be set using Set function defaults.
      • The default HRTF database resource has been integrated directly into the srapi library.  The slabcon function libgen() can be used to create the required header file.
      • GetASIOChIn() and GetASIOChOut() no longer add errors to the log stack and log file.
      • The xmlhelp.h XML read/write macros were integrated into a class.
      • The functions XmlApi() and XmlApiElement() were removed.  The Scenefile and Script functions provide similar functionality.
      • The script <User> element was added.  It causes a ScriptCallback() callback.
    • slabwire
      • The setting of predefined generator plugin parameters was simplified.  The Set() function was added, PSet() was renamed Apply(), and gslab.h was rewritten.  The new methodology is illustrated in the applications slabcon and SLABSurface.
      • The new CSSI::DelayInit() nResampler parameter allows the original CResampler resampling algorithm to be selected in place of CResampler2.  CResampler2's relatively long init time can cause audible artifacts when allocating wave files from the render thread, e.g., inside a script.
      • CScanTable no longer requires a persistent table.  This also impacts CSRAPI::ModSrcGainScalar().
      • Bug Fix:  The streams.h StreamStrings had "Memory" and "File" reversed.
    • SLABScape
      • The Mixer Settings dialog was added for setting Mixer render plugin settings.
      • Bug Fix:  In the Source Settings dialog, "File" and "Memory" were reversed, each actually specified the other.
    • slabcon, SLABX, slabcom, SLABCallFile
      • The SLABX application was removed with portions integrated into slabcon (demo_hrtf()).
      • The slabcom application was removed with portions integrated into slabcon (demo_submix()).  After slabcom was written, DIS testing switched to SLABScape.  The SLABScape files DlgLog.cpp and slab.cpp contain the most recent examples of slab3d DIS support.
      • The slabcon demos are now better integrated and can be performed one after the other.  The corresponding source code modifications demonstrate CSRAPI object reuse.
      • The SLABCallFile VoIP stress testing application was removed due to its need for a time consuming special-purpose build of jvoip.  The related usrlib\ libsndfile project was removed as well.
    • slab3d
      • The msrapi and mcon projects were added.  msrapi is a managed C++/CLI DLL wrapper for a subset of SRAPI.  mcon is a managed C# version of a subset of slabcon.  The managed/unmanaged interoperability features of slab3d are works in progress.  Suggestions (and/or code samples) are welcome (jdmiller at sonisphere).
      • The method for integrating the ASIO distribution files with slab3d has changed.  The Steinberg ASIO SDK should now be copied to the usrlib\ directory exactly as distributed by Steinberg, e.g., slab3d\usrlib\asiosdk2.2 (containing directories common\ and host\).  The project settings for slabw, srapi, SLABSound, SLABWireDemo, and SLABForm were modified accordingly.
      • SLABLatency is no longer kept in sync with SRAPI changes.
  • Comments
    • Many thanks to NASA Ames and the Air Force Research Laboratory (AFRL) 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.
7/20/09 Version 6.4.0
  • Download
  • Contents
  • Overview
    • Several areas of slab3d have been consolidated and simplified:
      • The script, modifier, and callback features have been rewritten and integrated into SRAPI.
      • The CScene class has been integrated into SRAPI.
      • The VMIX, HMIX, and HMIX2 render plugins have been merged into the new "Mixer" render plugin.
      • The slab3d render plugins have been integrated into SRAPI and are no longer DLLs.
      • The registry is no longer used by slabwire or SRAPI.
      • The previous stand-alone modes and registry mode for finding render and generator plugins and the default HRTF have been replaced by a new paradigm.  The slab3d render plugins are now built into the SRAPI library.  If additional render plugins or any generator plugins are to be used, they should be placed in the same directory as the SRAPI-linked application.  The default HRTF is now built into SRAPI applications as a resource.
      • The lib\src srapi and slabwire projects have been moved to the src\ directory.
      • The lib\src\SLABTrak project has been renamed "traklib" and moved to the usrlib\ directory.
    • Other new features:
      • A new XML slabscript format has been created by allowing time indices in scenefiles.
      • An XML scenefile can now be opened during render-time enabling XML macros.
      • The render-time replacement of streams has been improved.
  • Modification Details
    • SRAPI
      • The CScene class was merged into CSRAPI.  The conceptual container of auditory scene state is now the XML scene file.
      • Timestamps have been added to the XML scenefile feature to create an XML slabscript format.  The old slabscript format has been removed.  Demo Scape/Scene/slabscript files have been added to the bin/ directory.
      • The SRAPI Script and Modifier class was rewritten, simplified, and merged into SRAPI.  See Script*() and Mod*() functions in CSRAPI and IDMOD in slabdefs.h.  The SLABScape, SLABSurface, and slabcon applications were updated accordingly.
      • SceneOpen() can now be called while rendering enabling the creation of XML macros for dynamic scene settings.
      • XmlApi() and XmlApiElement() map XML to SRAPI calls.
      • The VMIX, HMIX, and HMIX2 render plugins have been replaced by the built-in "Mixer" render plugin.  The corresponding SrcMix*() functions have been added to SRAPI.  Demo Scape/Scene/slabscript files have been added to the bin/ directory.  The rvmix render plugin and the slabconv demo application have been removed.  The unfinished rvbap plugin is now in its own solution.
      • SrcStream(), SrcAllocFile(), SrcLocatePolar(), SrcRefEnable(), EnvPlanes(), and SrcMix*() functions added to XML support.
      • Being XML is human-readable and editable, XML radian specification has been changed to degrees.  In general, the XML API and the function API are kept as similar as possible.  This is an exception.
      • GetExeDir() returns the executable directory.
      • SHSrcEnable and SHSrcGain have been added to the Scene Hints.
      • LstHRTF( NULL ) specifies the default resource HRTF database.
      • SRAPI now supports initiating rendering with only emitters.  This allows streams to be set after rendering.
      • SrcAllocStream() allocates an arbitrary stream sound source for use with slabwire streams.
      • The m_cSSIList variable can be used to allocate streams for use by the SrcStream script command.  Demo of use added to slabcon.
      • GetASIOChIn() and GetASIOChOut() can be used to query the number of ASIO device I/O channels when not rendering.
      • The slab3d render plugins are now built into the SRAPI library (versus being DLLs).  The slab3d render plugins are enumerated by IDRender in slabdefs.h.  RENDER_DIOTIC_V was renamed RENDER_DICHOTIC.  RENDER_SPATIAL2 ("Spatial2") and RENDER_MIXER ("Mixer") are new.  The "SpatialVU" plugin and the slabconvu demo application have been removed.
      • slab3d no longer uses the registry to find render plugins, generator plugins, and the default HRTF.  All registry functions have been removed.  CRegistry has been moved from slabwire to SLABScape.  SLABScape still uses the registry for most-recently-used files, window placement, and tracker settings.  Render plugins are now either built in or found in the executable directory.  The generator plugin directory is either specified in the generator constructor or assumed to be the executable directory.  The default HRTF is a resource linked into the executable.  The new behavior replaces the previous registry mode and two stand-alone modes.
        • Note:  lib\srapi_hrtf.res must now be linked into all SRAPI-using executables.
      • CallRate() now sets the Callback, Modifier, and Script update rate.
      • SrcStream() no longer deletes the passed SSI if an error occurs.
      • SrcAlloc*() realloc can now occur during render-time and no longer returns NULL for realloc error.
      • The default Smooth Time was changed from 25ms to 15ms to increase dynamic responsiveness.
      • CHRTF::LoadFromResource() loads an HRTF database from a resource.
      • The slabdefs.h conversion defines were moved to slabmath.h.
      • Doxygen comments were added to slabmath.h.
      • Source and reflection image state memory use has been optimized.
      • Bug Fix:  Reflection spread and radius state now refer to the source state.
    • slabwire
      • The version defines in slabdefs.h have been moved to the new slabwire header file slabver.h.  The direct use of SLAB_VER replaces CSRAPI::GetVersion().
      • CSSIList::Remove() removes an SSI from an SSIList.
      • The CSIGen() constructor generator plugin directory default has changed from the current directory to the executable directory.
      • The default DirectSound buffer size (DS_BUFSIZE_OUT) was changed from 4096 to 8192 bytes to reduce DirectSound underflows.
      • $(NoInherit) was added to the ASIO file paths to re-enable the use of an \Apps\asio directory for ASIO files.  At some point (VS08?), the absolute paths were replaced by relative paths.  If slab3d is installed to a directory other than \slab3d, the corresponding Full Paths are incorrect.  $(NoInherit) disables Visual Studio's generation of relative paths.
    • rmyplugin
      • SetNSOffset() support added.
    • SLABScape
      • The slab3d Registry Settings dialog has been removed.  The "Create slab3d Start Menu folder" button has been moved to the About dialog.
      • The Fritz mesh and wall textures have been integrated into the SLABScape executable.
      • The slabscript editor has been removed.  This functionality has been replaced by an XML slabscript format and the Dynamic Settings dialog "Reload Script" button.
      • bin\slabscape.htm is now used for the help page instead of the doc\ page.
      • A null string HRTF database name now indicates the default resource HRTF database.
      • SmoothTime, number of displayed sources, and the script filename have been added to the Scape file.
    • slabcon
      • The slabconvu Spatial2 demo was merged into slabcon.
      • Two script demos were added that illustrate script control of the Mixer render plugin and real-time stream replacement.
    • slab3d
      • The float and double precision specification was revisited resulting in slight changes to srapi.cpp, 3DXFramework.cpp, view.cpp, and tracker.h.  This eliminated some instances of denormal math operations.
      • For consistency, the following project settings have changed:
        • slabw and srapi release mode and jvoiplib:  "Use MFC in a Static Library" to "Use Standard Windows Libraries".
        • all release projects:  all instances of "Program Database (/Zi)" changed to "Disabled".
        • all debug projects:  all instances of "Program Database for Edit & Continue (/ZI)" changed to "Program Database (/Zi)".
  • Comments
    • Many thanks to 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.
5/8/09 Version 6.3.1 Update
  • Known Issues
    • SLABScape defaults:  SLABScape v6.3.1 uses slab3d defaults instead of SLABScape-defined defaults:
      • Smooth Time:  25ms vs. 15ms
        • 15ms is more responsive and will most likely become the new SRAPI default.
      • Source Radius:  10cm vs. 5cm
      • DirectSound Output Buffer Size:  4096 bytes (23ms) vs. 8192 bytes (46ms)
        • Write Buffer Size in both cases is 512 bytes.
        • 4096/512 is prone to underflow, thus 8192 will most likely become the new slabwire default.
        • 4096/256 is less prone to underflow, but less robust than 8192/512.
        • Note:  ASIO is the preferred sound device driver interface.  It tends to have lower latency and better robustness than DirectSound.
    • Building slabwire:  This applies to users using an \Apps\asio directory for ASIO files (see Building slab3d).  The Visual Studio 2008 Relative Path for slabwire's ASIO files will result in a bad Full Path if slab3d is installed to a directory other than \slab3d.  If slab3d is installed elsewhere, the paths can be corrected using File Properties (Alt-Enter).  Users who do not use an \Apps\asio directory also have to update the ASIO File Properties before building slabwire.
    • Release-mode vs. debug-mode libraries:  Due to the size of debug-mode libraries, only release-mode libraries are distributed with slab3d.  The hope was that the release-mode libraries could be used with debug-mode user applications.  Unfortunately, this can result in linker issues.  It should be relatively easy to build the debug libraries if required.  First, build the usrlib jvoip.sln and slabDISInterface.sln solutions.  Next, build the slabw and srapi projects in the slab3d.sln solution.  See the slab3d User Manual - Building slab3d and the ASIO bullet above.
4/17/09 Version 6.3.1
  • Download
  • Contents
  • Additions
    • SRAPI/slabwire:  The CSIDISRadio2 RT (real-time) DIS radio stream was added.  RT radios use real-time sound output and DIS transmitter state information to reduce latency.  RT radio parameters were added to the SRAPI functions SrcAllocDISRadio() and AllocDISRadios().  To determine the lowest possible buffer size, the SLABScape Log window can be used to query the number of RT radio underflows.  For the truly adventurous, "stat" timestamp dumps can be enabled inside the code (three varieties: sidisradio.h (slabwire), sdiStat.cpp (slabDISInterface user), and PDUSorter.cpp (slabDISInterface packet reception)).  The timestamp output can be visualized using dis2.m.  This will graphically depict the amount of DIS buffering required as signal packet lag behind real-time.
    • SRAPI Scene:  Non-spatial gain functions SetNSOffset(), GetNSOffset(), and GetNSScalar() added.  The non-spatial monotic and diotic renderers now use this parameter to scale their gain.
    • SRAPI Scene:  Mute functions SrcMute() and GetSrcMute() added.
    • SRAPI:  SrcRadius(), SrcMute(), and SetNSOffset() state added to Scene file.
    • slabwire:  CSSI::SSInUnderflow() added to query DIS RT radio underflow.
    • SLABScape:  Support for RT DIS Radios was added.  This included improvements to the Scape and Scene files in order to save and open DIS radio configurations and improvements to gain management in order to hear DIS communications without attenuation.  Scape and Scene files demonstrating different DIS latency configurations have been added to slab3d's bin\ directory.
    • SLABScape:  Relative file path support was added.  This allows Scape and Scene files to be moved with their corresponding data files.  There are a variety of ways to set SLABScape's current directory (see SLABScape Help Page: Execution).  In SLABScape, the current directory path can be displayed using Interface | Log | General.  The Visual Studio 2008 Debugger path is set via Property Pages | Configuration Properties | Debugging | Working Directory.  I typically use $(TargetDir).  Unfortunately, this does not appear to be saved in the project.
    • slabtools:  The MATLAB function dis2.m can be used to visualize the "stat" timing data generated by the CSIDISRadio2 class, the sdiStat application, and the slabDISInterface library.
    • slab3d User Manual:  New sections were added regarding SRAPI and Scene defaults and the minimum SRAPI code required to render a sound source (see also slabcon.cpp).
    • slabDISInterface library:  The freq() callback now includes transmitter state.  getTimestampAbs() added to query relative or absolute DIS timestamp use.  Queue flush added for transmission end and outside-of-transmission signal.  "stat" timestamps added to capture DIS packet arrival times (see dis2.m).
    • slabDISInterface solution:  The sdiStat user application was added to acquire DIS timing information from the library user perspective (i.e., post DIS PDU queue and UDP reordering).  See dis2.m.
  • Modifications
    • slab3d:  All Known Issues from the "Version 6.3.0 Update" entry below were corrected.
    • slab3d:  All instances of WINVER and _WIN32_WINNT set to 0x0500 (Win2k or later).  All _WIN32_WINDOWS (WinME or earlier) removed.  WINVER and _WIN32_WINNT were added to JVOIPTestUtil.
    • SRAPI:  SetLinks() now sets the link working directory (aka shortcut "Start in" property).
    • SRAPI Scene:  SrcGain(), SrcMute(), SrcRadius(), and SrcRefOffset() were added to Reset().  SetRenderID() was removed from Reset().
    • slabwire:  CDISManager MAX_CONNECTIONS increased from 64 to 128.
    • slabwire:  CDISManager now receives DIS transmitter state notification.
    • slabwire:  stat.cpp dumps now occur to the current directory rather than root.  The StatEvent#() macros have been replaced by inline functions.
    • SLABScape:  Spatial gain, non-spatial gain, and mute state improved and moved to SRAPI Scene.
    • SLABScape:  Speech recognition grammar now part of app instead of loaded from file.
  • Known Issues
    • Scape and Scene files:  As noted for v6.3.0, the Scape and Scene XML file formats are in development.  The parameters implemented are listed on the SLABScape Help Page.  Although a goal is eventual backwards compatibility as the format changes, at this stage of development, this is not the case.
    • SLABScape build with Windows SDK v6.0A:  SLABScape v6.3.1 is built using Windows SDK v6.1.  v6.1 includes the grammar compiler used to build SLABScape's "grammar.cfg" file.  A pre-built version of grammar.cfg is distributed with slab3d, so v6.1 isn't necessarily required.  However, if errors are reported building SLABScape under v6.0A, v6.1 might help resolve them.  If you are not interested in speech recognition and Windows SDK v6.1, see the define _ENABLE_SAPI in SLABScape file sr.h.  Note, Microsoft's Speech API (SAPI) v5.1 SDK also contains a grammar compiler.  Both Windows SDK v6.1 ("Windows SDK for Windows Server 2008 and .NET Framework 3.5") and "Speech SDK 5.1" can be downloaded from the Microsoft Download Center.
    • slabDISInterface:  slabDISInterface uses a one-in/one-out queue to order DIS radio packets.  The queue is flushed when a transmission completes or a signal packet arrives outside of a transmission.  The queue size used by slabwire is five packets.  The one-in/one-out behavior could conceivably result in packet delays depending on the behavior of DIS transmitters, the most likely scenario being frequency changes outside of a transmission.
  • Comments
    • Many thanks to the Air Force Research Laboratory (AFRL) and NASA Ames for funding 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.
3/18/09

updated
4/17/09

Version 6.3.0 Update
  • Known Issues
    • SLABScape:  The Static Settings | Sound Sources | Generator droplist is not updated properly.  It does function for setting the generator type.
    • SLABScape:  The Beacon demo will only run properly if slab3d is installed to c:\slab3d.  beacon.scp and an internal speech recognition grammar path reference this directory.
    • SLABScape:  For sound sources with an ID parameter (i.e., DIS, VoIP, Link), there is a duplicate "id" attribute in the Scape XML file (.scp).  Reading the corresponding source parameters from a Scape file will cause an XML error.
    • SLABScape:  The File menu MRU (Most Recently Used) list is not saved.
    • SLABScape:  Once installed, the slab3d directory cannot be moved without using regedit to remove the registry keys (HKEY_CURRENT_USER\Software\slab3d\6.3.0).  In the past, one could use SLABScape to reset the registry settings, but v6.3.0 exits before they can be reset.
    • SRAPI:  The Scene file (.scn) SrcGain db parameter is actually a scalar gain and should not be used.  In this release, the Scape file gain overrides the db value, so this is not an issue for SLABScape.
    • SRAPI/slabwire:  The ID of an auto-ID DIS stream is not properly set after the following sequence: DIS streams automatically assigned to DIS IDs, DIS streams freed, auto-ID DIS streams allocated.  The streams still appear to function properly but the ID will be "" instead of the actual ID.  (4/17/09)
    • Windows SDK v6.0A/v6.1 version clashes might occur when building SLABScape.  Ideally, v6.1 should only be required if rebuilding the speech recognition file grammar.cfg.  But, depending on ones build environment, there may be complications.  The workaround is to comment-out references to SAPI (Speech API) in sr.h and sr.cpp.  (4/17/09)
  • Comments
    • Direct3D DLLs:  When installing slab3d on a new Vista Ultimate system, SLABScape v6.3.0 required d3dx9_37.dll and v6.2.0 required d3dx9_30.dll.  These can be installed using the DirectX End-User Runtime as described under System Requirements above.  Alternatively, these can be copied from the C:\Windows\System32\ directory of a system with a more thorough DirectX installation.
2/25/09 Version 6.3.0
  • Download
  • Contents
  • Additions
    • "SlabDISinterface" DIS (Distributed Interactive Simulation) support library and source code.  I gratefully acknowledge the Air Force Research Laboratory (AFRL) for open-sourcing SlabDISinterface and allowing it to be included in the slab3d release.
    • SRAPI:  SrcAllocEmitter() allocates an "emitter" sound source.  An emitter sound source does not have a sample stream.  It's primary purpose is to hold sound source scene state while awaiting the selection of a sample stream.
    • SRAPI:  Sound sources can now be reallocated in order to assign new "sample streams" to existing "virtual environment emitters".  SrcFree() can now retain the emitters when freeing streams.
    • SRAPI:  Stand-alone mode constructor.  This version of stand-alone mode allows the render and generator plugin directories and the default HRTF to be specified using the CSRAPI constructor.
    • SRAPI:  GetASIOName() retrieves the name of an ASIO device.
    • SRAPI:  Several constants were added to slabdefs.h.
    • SRAPI:  CSRAPI::Rendering() returns CScene::GetRenderTime().  "Render Time" is the state between RenderStart() and RenderStop().
    • SRAPI:  Math functions RectToRads() and RadsToRect() are radian versions of RectToPolar() and PolarToRect().
    • SRAPI:  RenderBatch() performs batch processing on a directory of wave files.  This functionality was previously in SLABScape.
    • SRAPI:  The new Modifier modSrcStream enqueues sound source stream changes.  For example, this feature can be used to play several wave files, one after the other, from the same sound source.  This is demonstrated in SLABScape by dragging and dropping wave files onto the SLABScape display while rendering a file or emitter sound source.  Modifiers are now initialized with a CSRAPI pointer instead of a CScene pointer.
    • SRAPI:  SrcAllocDISRadio() auto radio ID assignment option.
    • SRAPI:  SceneSave() and SceneOpen() allow SRAPI acoustic scene state to be written to and read from an XML file.  (IN DEVELOPMENT)
    • SRAPI Scene:  "Hints" now exist for certain scene parameters.  When the corresponding set function is called, the hint bit is set in the hint variable.  See the SH* defines in scene.h.  Hints are used with "tick" updating.
    • SRAPI Scene:  "Tick" updating delays the conversion of certain scene parameters to rendering parameters.  In the past, this conversion occurred within one signal processing frame.  Depending on the scene update method, this can result in an unnecessarily high update rate.  With tick updating, the conversion doesn't occur until the scene is explicitly ticked by the user.  The user can select between frame (default) and tick updating.
    • SRAPI Scene:  Several functions were added to support a SLABScape rewrite: SetHint(), GetHint(), HintClear(), SetTick(), Tick(), Lock(), Unlock(), LstPos(), LstSensorPos(), GetLstPos(), GetLstX(), GetLstY(), GetLstZ(), GetLstYaw(), GetLstPitch(), GetLstRoll(), EnvPlane(), EnvBound(), EnvBoundX(), EnvBoundY(), EnvBoundZ(), EnvBoundR(), GetEnvBoundMove(), GetRenderID(), GetRenderTime(), GetFIRPoints(), SrcLoc(), GetSrcRadius(), GetSrcSpread(), GetSrcEnable(), GetSrcRefEnable(), GetSrcLocRel(), GetSrcPolar(), and Reset().
    • slabwire:  CSIMemory now supports user memory buffer playback in addition to memory-buffered wave files.
    • SLABScape:  DIS radio IDs can now be automatically assigned as radios appear on the network.
    • SLABScape:  DIS frequency sources listen to all DIS radios on a specific frequency.
    • SLABScape:  Sound device output can now be split to a file.
    • SLABScape:  "Beacon" auditory beacon and speech recognition demo.  The beacon demo was coded to NASA researcher Mary Kaiser's specifications.
    • slabwcon:  CResampler/CResampler2 FIR memory comparison.
    • slab3d:  cleandev.bat cleans all usrlib build files except the libraries.  cleanusr.bat cleans all usrlib build files.  cleanrel.bat no longer cleans usrlib, allowing clean.bat and cleandev.bat to create a "developer release" containing usrlib libraries.  Performing both a cleanusr.bat and a cleanrel.bat creates a "user release".
    • slabwire:  CSIFile::GetLoop() returns the file loop setting.
    • HMIX2 render plugin:  HMIX2 is similar to HMIX but can route the same spatialized source output to two independent HRTF left/right sound outputs.
    • slabtools:  The MATLAB script wmdemo.m was written to demonstrate the open-source "Practical Guide to Wavelet Analysis" code.
  • Modifications
    • slab3d:  Development migrated from Visual Studio 2005 to Visual Studio 2008.
    • SLABScape:  Portions of SLABScape were rewritten to accomplish the following goals:
      • ease maintenance by simplifying the architecture and classes
      • elimination of duplicate acoustic scene state between SLABScape and SRAPI
      • user interface reorganization to mirror SRAPI, e.g., dialogs reorganized into "static settings", the SRAPI settings set before rendering and "dynamic settings", those set at any time
      • simplified source code to better demonstrate SRAPI use
      • reorganization of functionality to allow component reuse
      • improved stress-testing by using one CSRAPI object during app execution
      • new XML "Scape" file format, human-readable, human-editable, extensible, and backwards compatible after extension (IN DEVELOPMENT)
      • new SRAPI XML "Scene" file format for both SLABScape and SRAPI use (IN DEVELOPMENT)
      • new use of SLABScape as an SRAPI Scene file editor for end-user applications (IN DEVELOPMENT)
    • SLABScape:  Improved DIS support, including render-time radio ID, frequency, and frequency radio solo specification and a log window for querying DIS information.
    • SRAPI/slabwire:  Replacing a stream (e.g., SrcStream()) now returns the previous stream rather than deleting it.
      Important:  It is now the user's responsibility to delete the previous stream!
    • SRAPI/slabwire:  The file for file output is now opened before rendering rather than during construction.  This allows file output to be reused without reallocation.
    • SRAPI:  SrcType replaced by slabwire's StreamType.
    • SRAPI:  SrcLink() renamed SrcAllocLink().
    • SRAPI Scene:  LstPosition() always positions the center of the head.  In the past, if LstSensorOffset() was used to specify the location of a head tracker sensor, LstPosition() would specify the sensor position.  The new function LstSensorPos() now specifies the sensor position.
    • SRAPI Scene:  SrcLocateRel() now disables reflections for the source.  Listener-relative sources are anechoic.
    • slabwire:  dismanager.h no longer requires usrlib headers.
    • slabwire:  In DISManager, auto radio ID assignment can now occur after a stream restart.
    • slabwire:  CSIDISFreq::GetSoloID() retrieves the ID of a soloed radio.
    • slabwire:  SSInUnderflow() renamed SSInOverflow() to better describe condition.
    • slabwire:  CSSI SSInPaused() replaces SSInPlaying().
    • HMIX/HMIX2 render plugins:  The non-spatial vector mix can now be mixed with the two spatial mixes.
    • slabtools:  The continuous wavelet transform MATLAB script cwt.m was rewritten.
    • slabtools:  The Morlet wavelet visualization MATLAB script morlet.m was rewritten.
    • Documentation:  doxygen upgraded from v1.4.4 to v1.5.8.
  • Known Issues
    • The SLABScape binary file format is no longer supported.  It is being replaced by the features denoted  (IN DEVELOPMENT) above.  Thus, SLABScape file-save and file-open are only partially implemented.
    • An audible artifact is sometimes heard when using modSrcStream.
  • Comments
    • Many thanks to the Air Force Research Laboratory (AFRL) and NASA Ames for funding slab3d development.
    • As with previous releases, there have been significant modifications to slab3d.  One should consider this a beta release near the release date and a final release a few weeks later unless otherwise noted.  In other words, a bug notice will be added to the Version History should any be found.
6/6/08 Version 6.2.0
  • Download
  • Contents
  • Additions
    • SRAPI:  SrcStream() allows a File, Memory, or URL stream to be replaced during render-time.  This is demonstrated by SLABScape.  If a file is being rendered, dragging and dropping a file from a file browser to SLABScape will replace the rendered file with the dropped file.
    • SRAPI/slabwire:  CResampler2 provides support for resample factors other than 1,2,4,8x.  Resampling occurs when input and render rates differ and/or when upsampling for the oversampled delay line.  The CResampler2 sample rate conversion algorithm is the bandlimited interpolation algorithm implemented in the resample and libresample software packages (see http://www-ccrma.stanford.edu/~jos/resample/).  A feature was added that allows the anti-aliasing filter to be bypassed (see CSSI::SSInSampleAlias()).
    • SRAPI/slabwire:  Remote URL-specified files can now be streamed and rendered in real-time (see SrcAllocUrl() and CSIUrl).  Only HTTP addresses have been tested.
    • SRAPI/slabwire:  Individual CSIDISFreq radios can now be soloed.
    • SRAPI/slabwire:  CSIDISRadio streams can now be queried to determine if they are part of a frequency pool or if they are soloed.
    • SRAPI/slabwire:  The CDISManager GetRadioPooled() function indicates if a radio is part of a frequency pool.
    • slabwire:  CDelayLine can now advance by samples as well as frames.
    • slabwire:  CSIList Replace() replaces one StreamIn with another.
    • slabtools:  dmix.m is a simple wave mix and overflow visualization script.
    • slabtools:  morlet.m is a Morlet wavelet visualization script.
    • slabtools:  cwt.m is a Continuous Wavelet Transform (CWT) script.
    • slabtools:  wmdemo.m demonstrates the "Practical Guide to Wavelet Analysis" CWT.
    • slabwcon:  CResample is a class version of libresample with a different buffering strategy.  CResample uses a rotational input buffer and a fixed-length output buffer.  CResample was used as the basis for slabwire's CResampler2.  Test cases were added to slabwcon to compare libresample, CResample, and slabwire (CResampler2) sample-rate conversion.
    • SLABWireDemo:  HTTP stream demo added for CSIUrl.
  • Modifications
    • SRAPI/slabwire:  There has been an SRAPI/slabwire paradigm shift.  Rather than hide slabwire input streams from the SRAPI user, SRAPI users now interact with input streams directly for stream-specific actions.  This eliminates cumbersome SRAPI wrapper functions.  The following sound source StreamIn access macros were added to srapi.h: siStreamIn(), siGen(), siDISRadio(), siDISFreq(), siVoipID(), siFile(), and siMemory().  The SRAPI functions SrcComID(), SrcStreamCtl(), SrcGenCmd(), SrcGenEnum(), and SrcGenInfo() have been removed.  The various apps have been updated accordingly (e.g., slabcom, slabcon).  See the CSRAPI class description in the SRAPI Reference Manual for a list of relevant slabwire functions.
    • SRAPI/slabwire:  If a sample overflows on output, it now clips to +/- 1 instead of wrapping.  This greatly reduces the resulting audible artifacts.
    • SRAPI:  GetClips() was moved from CScene to CSRAPI.  Clipping now occurs in the output stream versus the individual render plugins.
    • slabwire:  The slabwire header files have been moved from the old slabwire directory slab3d/include/slabw/ to the new combined slabwire and SRAPI directory slab3d/include/.
    • slabwire:  The gplugin.h generator plugin interface was simplified.  Generator commands are now handled via function overrides instead of command messages.  The gslab and gstk generator plugins were updated accordingly.
    • slabwire:  Several StreamIn and StreamOut classes were renamed to replace the TLAs (three-letter acronyms) with human-readable names: CSIF to CSIFile, CSIM to CSIMemory, CSIV to CSIVoipPort, CSIP to CSIVoipID, CSIT to CSITrack, CSIR to CSIUser, CSID to CSIDevice, CSIS to CSIAsio, CSIG to CSIGen, CSOD to CSODevice, CSOS to CSOAsio, CSOX to CSODSound, CSOF to CSOFile, and CSOM to CSOMemory.
    • slabwire:  DSP input stream management now allows for render-time replacement of input streams.
    • slabwire:  CResampler now allows subclasses to support previously unsupported resample factors.
  • Comments
    • Many thanks to the AFRL (Air Force Research Laboratory) and NASA Ames for funding these features.
    • This release is high on the beta scale due to extensive slabwire and SRAPI changes.  Note, though, this does not imply known instability.  It simply means there has been little use of the mods.
    • Although DIS support code has been added to slab3d (e.g., SrcAllocDISRadio(), SrcAllocDISFreq(), CSIDISRadio class), the underlying DIS interface code is awaiting release approval.  Thus, the userlib/slabDISInterface library is a nonfunctional stand-in.  The release executables and libraries are built with the nonfunctional stand-in library.
3/19/08 Version 6.1.0
  • Contents:
  • Additions:
    • SLABForm/form320:  form320 is a TMS320C6713 DSK (DSP Starter Kit) and Educational DSP DUAL3006 Code Composer Studio application.  SLABForm and form320 have been structured to enable simultaneous PC and embedded DSK development.  In other words, the same algorithm that runs from the PC-based SLABForm should run from the DSK-based form320.  This is demonstrated with a four channel sum (see beamform.cpp).  Note, though, CPU/DSP performance differences might prevent the DSK-based algorithm from running in real-time.  This is the case with the included delay-and-sum beamformer.  This project was halted prior to beamformer DSK performance tuning.
    • SRAPI:  SetPIStatus() can now block.  This can help with SRAPI / render plugin synchronization.
    • SRAPI:  PICmdArg(), GetPIStatusCmd(), and GetPIStatusArg() can be used to divide the render plugin status variable into a command and argument.
    • SRAPI:  SrcAllocSubmix() allocates a virtual sound source that emits multiple input streams (e.g., multiple wave files).
      Notes:
      1)  Prior to this release, a slab3d "sound source" was always composed of one "virtual entity" "sound source" (aka "emitter") and one "sample stream input" (slabwire SSI).  An alternative could be to allow arbitrary mappings between streams and emitters but it would complicate the API and the implementation.
      2)  This function requires the use of slabwire classes (see the slabcom demo app).
    • SRAPI:  SrcAllocDISFreq() allocates a sound source that is a mix of several remote DIS radios.  It is analogous to a local radio tuned to a particular frequency.  AllocDISRadios() allocates the remote radios.  CDISManager is used to determine the available frequencies.  See Comments below.
    • SRAPI/slabwire:  24-bit ASIO support.  The slabwire ASIO support classes CSIS and CSOS were converted from 16-bit PCM to 32-bit float.  This allows the ASIO device driver to determine the bit width.
    • HMIX render plugin:  The HMIX render plugin supports two HRTF-rendered headphone displays and a series of mixer outputs.  HMIX and the vector mix plugin VMIX are in rvmix.dll.  The slabconv demo app demonstrates use.
    • slabcom:  Demo code added for CSRAPI::SrcAllocSubmix(), CDISManager, and CSRAPI::SrcAllocDISFreq().  See Comments below.
    • slabconv:  Demo code added for the HMIX render plugin and plugin variable status blocking and command/argument specification.
    • slabwire:  CDISManager::GetFreq() can be used to retrieve a list of available DIS frequencies.  See Comments below.
    • slabwire:  CSSIList manages a list of CSSI (sample stream in) objects.  It was created for the CSSI subclasses CSIList, CSISubmix, and CSIDISFreq.
    • slabwire:  The CSISubmix class mixes multiple input streams into one.  A custom mix can be created by subclassing from CSISubmix.
    • slabwire:  The CSIDISFreq class is a subclass of CSISubmix that mixes several DIS radios based on frequency.  See Comments below.
    • slabwire:  The CSIDISRadio AutoID feature automatically assigns a radio ID to an unassigned CSIDISRadio object when a new radio appears on the DIS network.  See Comments below.
    • SLABWireDemo app:  The following features were added to the UI: ASIO device selection, ASIO L,R channel swap option, and frame length selection.
  • Modifications:
    • SRAPI:  SrcAllocDIS() renamed SrcAllocDISRadio().  See Comments below.
    • SRAPI:  Users now interact with CDISManager directly rather than through the functions GetDISNum() and GetDISID().  See CDISManager::Get functions and the slabcom demo app.  See Comments below.
    • SRAPI/slabwire:  Render/Process done notification messages (CSRAPI::SetNotify(), CDSP::BeginThread( nCmdDone )) are no longer sent for processing stopped by the user (e.g., SRAPI::RenderStop(), CDSP::EndThread()).  This mod was done in response to a report and fix sent by Gottfried Haider.  He noticed a RenderStop()/SrcAllocFile()/RenderStart() sequence could result in a notification message receive after the RenderStart().
    • SRAPI/slabwire:  Float sample type now supported by sample stream out (SSO) and SSOutSample() (for ASIO CSOS class).
    • VMIX render plugin:  Max number of sound sources changed from 36 to 32, outputs, 12 to 32.  Fixed number of outputs now arbitrary.  SRAPI/plugin synchronization improved.  Support added for command/argument version of plugin status variable.
    • rvbap.cpp:  The incomplete VBAP code that used to be commented-out in the VMIX plugin has been moved to rvbap.cpp in the rvmix project directory.
    • slabwire:  The input stage of slabwire was rewritten and reorganized to support submixing.  The delay line class CDLI has been split into the existing sample stream in (CSSI) base class and the new classes CDelayLine and CResampler.  CDLIList has been replaced by CSIList.  The new architecture is illustrated in the new SLABWire Reference Manual Class Diagram.
    • slabwire:  CSSOList (sample stream output list) renamed CSOList (stream out list) to mirror CSIList.
    • slabwire:  CSIC (stream input communications) renamed CSIDISRadio (stream in DIS radio).  See Comments below.
    • slabwire:  CDISManager has been separated from CSIDISRadio to enable use by SRAPI users.  See Comments below.
    • SLABLatency app:  The RenderEvent() latency test can now run without serial port output to demo the RenderEvent() function.
  • Comments:
    • Many thanks to the AFRL (Air Force Research Laboratory) and NASA Ames for funding these features.
    • This release is high on the beta scale due to continuing extensive slabwire changes.  Note, though, this does not imply known instability.  It simply means there has been little use of the mods.
    • Although DIS support code has been added to slab3d (e.g., SrcAllocDISRadio(), SrcAllocDISFreq(), CSIDISRadio class), the underlying DIS interface code is awaiting release approval.  Thus, the userlib/slabDISInterface library is a nonfunctional stand-in.  The release executables and libraries are built with the nonfunctional stand-in library.
1/28/08 Version 6.0.2
  • Contents:
  • Additions:
    • SRAPI:  Several functions were added to the Scene API to support sound level query and instant replay skip silence.  These features require the new Spatial2 render plugin.  The source level functions integrate functionality previously implemented via plugin variables in the SpatialVU render plugin.
    • SRAPI:  SetLinks() function added to create Start Menu links for ZIP installations.  This function is primarily intended for use by SLABScape.
    • SRAPI:  Query capability added for DIS frequency and DIS ID mapped status (GetDISID(), SrcGetFreq()).  See Comments below.
    • SLABWire:  DIS frequency support added to CSIC class.  See Comments below.
    • SLABWire:  CTracker::SetValue() can be used to bypass parameter tracking.  Sometimes an audible "click" is preferable to a zipper for a large parameter value change.
    • SLABScape:  "Create slab3d Start Menu folder" button added to slab3d | slab3d Registry Settings dialog.  Being MSI release is no longer supported, the Start Menu folder is now created via SLABScape.
    • Spatial2 Render Plugin:  Instant replay was moved from Spatial to the new Spatial2 plugin.  The level meters in the mixing stage of SpatialVU were added to the delay line stage of Spatial2 to support time-synchronized level readings.  This is significant when using long delay lines for instant replay and skip silence.
    • slabcom:  slabcom demonstrates DIS ID and DIS frequency polling.  DIS sound sources are automatically placed in an arc about the listener's head as they appear on the network.  Sources can be organized by ID or frequency.  See Comments below.
    • slabwcon:  slabwcon demonstrates the usage of individual SLABWire classes and tests the libresample sample rate conversion code.  slabwcon is not automatically built by Build Solution due to its use of libresample.
    • slabconvu:  The slabconvu demo app was rewritten to support the Spatial2 render plugin, the Scene API level meters, instant replay, and instant replay skip silence.  The original SpatialVU code is included to demonstrate plugin variables.
    • slabtools:  vu.m illustrates the relationship between two sound level meters, a VU Meter specified by rise time and fall time and an Envelope Follower specified by attack time and release time.
    • slabtools:  sd.m (silence detection) demonstrates the instant replay skip silence algorithm.
    • usrlib\slabDISInterface:  DIS frequency support added.  See Comments below.
    • usrlib\slabDISInterface:  Only radios that have transmitted are added to DIS ID list.  See Comments below.
    • usrlib\libresample:  libresample has been added to usrlib in preparation for possible inclusion into SLABWire.  libresample is not automatically built by Build Solution and is not included in the SLABWire library.
  • Modifications:
    • MSI release has been replaced by ZIP release to simplify slab3d maintenance.
    • SRAPI/SLABWire:  DIS ID can now be set to null string ("") for a DIS sound source not yet mapped to a DIS ID.  See Comments below.
    • SLABWire:  The CDLI delay line class buffering and upsample code has been rewritten in preparation for possible libresample integration.
    • SLABWire:  The slabw library is now built with the "Link Library Dependencies" Librarian setting in order to include the jvoip and slabDISInterface dependencies.  This eliminates the need to build or link with the usrlib\ libraries when building slab3d-based applications.  See Comments below.
    • SLABForm:  CBeamform now compiles under both Visual Studio and Code Composer Studio allowing PC-based development and embedded TMS320 execution.  The TMS320 support code is still in development and not included in the slab3d release.
    • Debug libraries are no longer included in the release.  The Librarian modification above resulted in fairly large libraries.
  • Comments:
    • Many thanks to the AFRL (Air Force Research Laboratory) and NASA Ames for funding these features.
    • This release is a little higher on the beta scale than usual due to the delay line changes and the Spatial2 level/replay/skip features.
    • Although DIS support code has been added to slab3d (e.g., CSIC class), the underlying DIS interface code is awaiting release approval.  Thus, the userlib/slabDISInterface library is a nonfunctional stand-in.  The release executables and libraries are built with the nonfunctional stand-in library.  The current implementation has been tested with three canned DIS configurations on localhost.
11/2/07 Version 6.0.1
  • Contents:
  • Additions:
    • ZIP archive release is now an option for download.
    • SRAPI:  Stand-alone applications.  HRTF database, plugin, and registry usage has been modified to allow slab3d-based apps to be executed without a slab3d installation or slab3d registry keys.  More information is available in the "Registry Keys and Stand-Alone Apps" section of the User Manual.  Note: The NOSA (NASA Open Source Agreement) requires the slab3d release to be redistributed with derivative works.
    • SRAPI:  SRAPI now supports the 8000 Hz sample rate and a corresponding HRTF database, jdm8000.slh, has been added to the hrtf/ directory.
    • SRAPI:  DIS (Distributed Interactive Simulation) functions SrcAllocDIS(), GetDISNum(), GetDISID().  See Comments below.
    • SRAPI/SLABWire:  ID VoIP connections can now have an arbitrary ID and the ID can be changed during render-time.  See the new SRAPI function SrcComID().
    • SLABWire:  DIS CSIC class.  See Comments below.
    • SLABWire:  Mu-law short and float decode tables have been added in decode.cpp.
    • SLABWire Reference Manual:  The Class Diagram has been updated to include DIS (CSIC) and the track recorder (CSIT).
    • SLABWireDemo:  DIS sound source option (see Comments below), random-access controls for the track recorder, and more sample rate options.  Updated GUI.  Better error reporting.
    • SLABScape:  DIS sound sources.  See Comments below.
    • slabtools:  The script dis.m displays DIS buffer information generated by a special build of the SLABWire CSIC class.
  • Modifications:
    • All slab3d release solutions and projects have been upgraded from Visual Studio 2003 to Visual Studio 2005.
    • SRAPI:  GetHRTFDir(), SetHRTFDir(), GetLogDir() and the corresponding registry keys have been removed.  This was done to reduce slab3d-based application dependency on the registry.  The slab3d/log dir has also been removed.  Log files are now suffixed ".log" and placed in the same directory as the executable.
    • SRAPI/SLABWire:  The 'r' prefix is now required for render plugins and the 'g' prefix for generator plugins.
    • SLABWire:  Random-access playback was added to the CSIT track recorder class.
    • SLABWire:  A thread conflict between jvoip and CDSP has been eliminated removing a delay when ending VoIP sound sources.
    • SLABWire:  The sample frame advance portions of the delay line input class CDLI have been rewritten.  The frame size limit on sample stream input buffers no longer exists.
    • SpatialVU Plugin:  VU time constants can now be zero.  Denormal check added to envelope follower feedback to prevent CPU-burning denormal math computations.
    • slabtools:  8000 Hz HRTF database conversion added to slab2fs.m.
  • Comments:
    • Many thanks to the AFRL (Air Force Research Laboratory) for funding these features.
    • Although DIS support code has been added to slab3d (e.g., CSIC class), the underlying DIS interface code is awaiting release approval.  Thus, the userlib/slabDISInterface library is a nonfunctional stand-in.  The release executables and libraries are built with the nonfunctional stand-in library.  The current implementation has been tested with one canned DIS configuration on localhost (five 8000 Hz mu-law channels, packet size approximately 14ms).
6/6/07 Version 6.0.0
  • Contents:
  • Additions:
    • SLABScape:  A Reset button has been added to the slab3d Registry Settings dialog.  This allows the registry settings to be reset if slab3d is reinstalled or if an existing installation is moved or copied.
    • SLABScape:  VoIP sound source support added.
    • SLABWireDemo:  Support added for SIP, SIV, SIC (in-development), and SIT.
    • SLABCall:  The SLABCall application places a call to an SRAPI or SLABWire VoIP sound source.
    • SLABCallFile:  The SLABCallFile application stress-tests the VoIP implementation by placing multiple calls to slab3d.  This is primarily a development app.  The build is somewhat complex.
    • SLABForm:  SLABForm is a real-time beamformer prototyping application.  This project ended prematurely.
    • slabconv:  The slabconv console application demonstrates the use of the VMIX render plugin.
    • slabconvu:  The slabconvu console application demonstrates the use of the SpatialVU render plugin and the SrcReplay() feature.
    • SRAPI:  The SrcAllocVoIP() function allocates a sound source that can receive VoIP data.
    • SRAPI:  SrcReplay() can be used with long delay lines and the Spatial Renderer to support sound input instant replay.
    • SLABWire:  Two new sample stream input classes provide VoIP support, SIP (Stream Input Port) and SIV (Stream Input VoIP).  SIP uses one port and one session for all VoIP connections; SIV uses a port and session per connection.
    • SLABWire:  The class SIC (Stream Input Communications) is a place-holder for eventual DIS support.
    • SLABWire:  The class SIT (Stream Input Track Recorder) records Sample Stream Input (SSI) samples to a file.  SIT can simultaneously be used as sample stream input.
    • Render Plugins:  The SpatialVU version of the Spatial render plugin provides VU-meter-like level information for sound sources.
    • Render Plugins:  The VMIX (vector mix) render plugin mixes multiple sound sources to multiple outputs.
    • slabtools:  fbuild2.m and fbuild3.m build the Club Fritz ACD submissions acd2 and acd3.  fload2.m and fload3.m load the submissions.
    • slabtools:  Normalization and trapezoidal window analysis were added to the free-field EQ functions.
    • slabtools:  MATLAB visualization and prototyping scripts (bf*.m) for a helmet-mounted beamformer.  This project ended prematurely.
    • usrlib:  The usrlib\ directory was added for jvoip and libsndfile.
    • SLABWire Reference Manual:  The SLABWire Reference Manual will eventually document the SLABWire library.
    • slab3d User Manual:  The sections "Applications", "Voice over IP (VoIP)", and "Building slab3d" were added.
  • Modifications:
    • "SLAB" is now called "slab3d" to help disambiguate it from other "slabs".
    • SRAPI:  SrcAlloc() and SoundOut() have been replaced by individual functions for each source and output type.
    • SLABWire:  CDLIList is now subclassed from CDLI so CDSP can use either CDLI or CDLIList.
    • SLABWire:  CSSOList is now subclassed from CSSO so CDSP can use either CSSO or CSSOList.
    • SLABWire:  CDSP can now connect to individual streams (CDLI and CSSO) or stream lists (CDLIList and CSSOList).  Previously, all streams had to be placed in a list before they were connected to the DSP.
    • SLABWire:  CDSP stream begins were moved out of DSP thread to avoid a thread conflict between the DSP thread and the JVOIP thread.  Note: This might impact ultra low-latency applications as a slight delay now exists between stream begin and DSP processing.
    • SLABWire:  DSP thread timeouts were made more robust.  Note, though, memory leaks can occur if the DSP thread is terminated due to timeout.  It is best to address the root cause of the timeout (e.g., sound driver freeze).
    • SLABWire:  SSInContinuous() was added to CSSI to indicate if an input stream is continuous (e.g., device).  A continuous stream always streams samples while rendering.  If it is paused, samples are discarded.
    • SRAPI:  slab3d registry keys are now stored under HKEY_CURRENT_USER\Software\slab3d.
  • Comments:
    • Many thanks to the AFRL (Air Force Research Laboratory) for funding many of these features.  Thanks, as well, to NASA for the beamforming project.  Though ended prematurely, it was a great project while it lasted.
    • This is a beta release of sorts.  There has been little "actual" use of these modifications.
    • VMIX lays the groundwork for a potential VBAP (Vector Base Amplitude Panning) render plugin.  Unimplemented PD VBAP code is appended and commented-out in the VMIX source file.
8/9/06 Version 5.8.1
  • Contents:
  • Additions:
    • SRAPI/SLABWire:  Multiple output types may now be selected (e.g., outputting to a device and a file simultaneously).  Output streams can either be split or special-purpose Render Plugins can select which output to write to.  Splitting is demonstrated in slabcon.  Writing to individual output streams has not been tested.
    • SLABWire:  Callback functionality has been moved from SRAPI to SLABWire.  SLABWire users can now use callbacks via CDSP::BeginThread().  For SRAPI users, the callback interface appears unchanged.
    • slabtools:  ahm2sarc() converts a HeadZap AHM file to a SLAB Archive file.
    • slabtools:  sitd() computes spherical-head model ITD.
    • slabtools:  hcom() now supports critical-band smoothing when performing the symmetric head test.
    • slabtools:  vitd() now includes a spherical-head model reference curve.
    • slabcon:  Split output types demo.
  • Modifications:
    • SRAPI/SLABWire/Render Plugins:  The Render Plugin class hierarchy was simplified.  The SLABWire CDSPF class and SRAPI CFRender and CRPlugIn classes were merged and moved to the SLABWire CRPlugIn class.  This change makes the Render Plugin and Generator Plugin interfaces a bit more symmetrical.
    • SRAPI/SLABWire:  SRAPI rendering and DSP processing can now be stopped and restarted without reallocating the sound sources.
  • Bug Fixes:
    • SRAPI:  The SrcAllocFile() memory flag was opposite the intended behavior.  It now behaves as documented.
    • SLABSurface:  The file drill_loop.wav is now included in the release and the SRAPI error reporting has been improved.
    • SLABWireDemo:  The app now searches for Generator Plugins in the installation directory rather than \SLAB\bin\gplugin.
  • Comments:
    • Multiple output types feature:  Render Plugin writes to individual output streams has not been tested.
  • Download (added 6/11/07):
    • Releases after v5.8.1 are released through SourceForge.net.  The v5.8.1 release is available from the NASA Ames Open Source Software site:

      http://opensource.arc.nasa.gov


      Please support NASA Open Source software by providing accurate information when registering.  This information is used for internal metric tracking only (e.g., using "Affiliation" to determine government lab use).
5/24/06

updated
5/31/06
7/26/06

Version 5.8.0
  • Contents:
  • Additions:
    • SLAB User Release:  SLABSurface Application.  SLABSurface provides a control surface interface to SRAPI.  Controllers supported include the Behringer BCF2000 and Peavy StudioMix as well as a GUI interface.  SLABSurface maps controls to "patch" parameters.  Two simple amplitude modulation patches are included.  Many thanks to Mark R. Anderson for providing the original Behringer BCF2000 interface app from which SLABSurface evolved.
    • SRAPI/SLABWire:  Sound source type "User".  Allows user sample data to be input while processing.
    • SLABWire:  StatPerf() performance counter time stamp function.
    • SLABWire:  TRACE macros (see trace.h).
    • gslab generator plugin:  Band-limited triangle, square, and saw wavetables.
    • gslab generator plugin:  Amplitude modulation generator carrier and modulator waveform selection.
    • slabcon:  "User" sound source demo.
    • slabtools:  cbe.m computes HRTF critical-band energy.  Requires the Auditory Toolbox.
    • slabtools:  ffeq.m, ffeqtest.m, ffbl.m, ffbl2.m, ffbltest.m are free-field equalization scripts.
    • slabtools:  imodelab.m is a MATLAB port of the Allen-Berkeley image-method Fortran code.  This script computes the impulse response of a rectangular room.
    • slabtools:  imodel.m, imodel_h.m, imodel_cb.m, imodelui.m are image-method reflection visualization scripts.
    • slabtools:  wavespec.m demonstrates SLAB's reflection processing.
    • slabtools:  track.m demonstrates SLAB's DSP parameter tracking.
    • slabtools:  plotresp.m is a simple magnitude and phase plot script.
    • slabtools:  mdog.m and dog.m are DOG (Difference of Gaussians) image generation scripts (released GPL).  These functions are based on the GPL-released functions doog2.m and gaussian.m (both included, see doog.txt).
    • slabtools:  logbins.m calculates the number of linear FFT bins in a set of log frequency bins.
    • slabtools:  gen.m sin table SNR test and band-limited triangle, saw, and square generation.
    • slabtools:  sminp.m converts a sarc database to minimum phase.
    • slabtools:  fan.m is a Club Fritz analysis script that displays multiple Fritz HRTF databases simultaneously.
    • slabtools:  fbuild.m builds a Club Fritz HRTF database submission.
    • slabtools:  fload.m loads the Club Fritz databases created by fbuild.m.
    • slabtools:  fview.m is a simple Club Fritz database viewing utility.
  • Modifications:
    • SRAPI:  SLABScape math routines moved to SRAPI library.
    • SRAPI:  CScene::SetDelayIn() now API command (versus internal).
    • gslab generator plugin:  Sine wavetable lengthened from 256 to 1024 samples to improve SNR.
    • slabtools:  hcom.m now uses critical-band smoothing when computing the RMS Error metric (except for the symmetric head test).
    • ASIO:  ASIO SDK updated from 2.0 to 2.1.
    • documentation:  PDF documentation is no longer included.  To generate, use a PDF creator that supports PDF creation from HTML.
  • Known Issues:
    • SrcAllocFile() bMemory parameter functions opposite as documented; the default is memory buffered file.  The fix is to simply negate the parameter when calling.
    • When executing the pre-compiled SLABSurface application, the default patch "Drill" expects the file "C:\SLABData\wavs\drill_loop.wav" to exist.  If it does not exist, the app appears to work fine, but no sound is heard.  In other words, the missing file error is not reported.  The work-around is to substitute a short mono 44.1kHz wave file for the missing file.
    • When executing the pre-compiled SLABWireDemo application, the app searches for the generator plugins in \SLAB\bin\gplugin.  This is not the default MSI installation directory.  The work-around is to either install SLAB to \SLAB or to place a copy of the plugins in \SLAB\bin\gplugin.  Note, this was a limitation in some of the previously distributed SLABWireDemo executables as well.
    • These limitations have been addressed and will not exist in the next release.
8/29/05 Version 5.7.0
  • Contents:
  • Additions:
    • SRAPI/SLABWire:  SLAB is now designed to operate at an arbitrary sample rate.  The Spatial renderer supports: 8192, 11025, 22050, 44100, 48000 kHz.
    • SRAPI:  Script and source trajectory functionality moved to the new SLAB Modifier interface CSMod.  CSMod provides a mechanism for the automatic updating of Scene parameters.  For example, the modSrcGainScalar modifier automatically adjusts the gain of a sound source via table look-up.
    • SRAPI:  SrcGainScalar() allows the setting of source gain using a linear scalar.
    • SRAPI:  FIRPoints() can now set the reflected sound path FIR length independent of the direct path.
    • SRAPI/SLABWire:  Upsampling is now optional for the fractionally-indexed delay line.
    • SRAPI/SLABWire:  Memory-buffered wave files can now be looped and can now notify upon completion of one-shot playback.
    • SRAPI/SLABWire:  New classes CWaveTable and CScanTable for Generator Plugins and SLAB Modifiers.
    • SLABWire:  New signal generators "am" (amplitude modulation) and "triangle" (triangle wave).
    • SLABScape:  SLAB Settings Dialog now includes sample rate option.
      Note:  Changing the sample rate does not change the current HRTF database.  Resampled databases are now included in the release.
    • Spatial Renderer:  HRIRs can now be less than the frame size and greater than 128 taps.
    • SLABScape:  Memory-buffered wave files can now be set to one-shot.
    • SLABWireDemo:  New sample rate and fractional delay line controls.
    • slabtools:  gen.m provides signal generator visualization.
    • slabtools:  mild.m (make ild) constructs a one-tap HRIR HRTF database based on total HRIR energy.
    • slabtools:  slab2fs.m generates 8192, 11025, 22050, 48000 kHz HRTF databases from the 44100 kHz jdm.slh.
    • slabcon:  Added source gain SLAB Modifier example code.
  • Modifications:
    • SLABScape/SLABReg:  SLABReg removed.  Registry variable management moved to SLABScape.
    • SLAB Libraries:  All MFC replaced by Win32, hence, some API changes, e.g., CWnd to HWND.
    • SLAB Libraries:  scene library merged into srapi library.
    • SRAPI:  SrcAlloc() replaced by SrcAllocFile(), SrcAllocGen(), SrcAllocWave(), SrcAllocASIO().
    • SRAPI:  SoundOut() replaced by OutASIO(), OutWave(), OutFile(), OutDirectSound().
    • SRAPI:  Enum name changes to accommodate new function names (e.g., OutASIO to OutTypeASIO).
    • SRAPI/Spatial:  Material IIR filter coefficients moved from the Spatial renderer to the Scene (GetEnvMatCoeffs()).
    • SLABWire:  CDSPF::InInterp() removed.
    • SLABWire:  Generator parameter lists are now dynamic.  Allows multiple generators of the same type to have independent parameter lists.
    • slabtools:  zap2sarc.m (HeadZap data to SLAB Archive) now extracts the measured headphone eq data from the PhoneQ data file.
    • slabcon:  Removed MFC code, now strictly a Win32 console app.
6/27/05 Version 5.6.1
  • Additions:
    • SRAPI:  SrcLocateRel() listener-relative source placement.
    • SRAPI/SLABWire:  11025 and 22050 Hz wave file sampling rates now supported (upsampled in delay line module).
      Render Plugin Note:  To access upsampled data, use the float indexed GiIn() function instead of the int indexed function.
    • SRAPI/SLABWire:  Notification can be requested for single-shot wave file playback completion.
    • slabtools:  slabtools Reference Manual (see doc folder).
    • slabtools:  ups.m, upslp.m, upstest.m upsampling design and demo scripts.
    • slabcon:  New example application demonstrating the use of SLAB in a console app.
  • Modifications:
    • SRAPI:  GetSrcRel() now returns range.
    • SLABWire:  InitDelayLine() removed from CSSI subclass constructors.  When using the SLABWire objects, InitDelayLine() must be called to use the delay line of a CSSI subclass (see SLABWireDemoDlg.cpp).
    • SLABWire:  Replaced MFC with Win32 (CSOX, CDSP, CRegistry).  SLABWire is no longer built with MFC libraries.
    • SLABWire:  CRegistry::GetBinary() now returns true when default value set.
    • SLABScape:  Listener-relative source placement (REL button) now performed with SrcLocateRel().  Relative sources shown as cubes in the 3D visual display and cyan in the 2D display as if listener at the origin.  Polar source placement is performed using the POL button (similar to the old REL button behavior but listener is no longer placed at the origin).
    • SLABScape:  Scene file (.scn) version incremented to 10.  SLABScape does not read previous scene versions.
  • Comments:
    • If your sound peripheral does not have an ASIO driver, you might be able to use the SLAB ASIO features by installing ASIO4ALL (http://www.asio4all.com/).  ASIO4ALL provides an ASIO interface wrapper for the standard Windows Driver Model (WDM) sound driver interface.  ASIO4ALL v2.6 was successfully tested with the "Avance AC97 Audio" sound device.
4/4/05 Version 5.6.0
  • Additions:
    • SRAPI/SLABWire:  SLAB Generator Plugins (gplugins, see gplugin.h).  gplugin parameters can be controlled in real-time while processing.  gplugins can be added to SLAB by placing the gplugin DLL in SLAB's bin\gplugin directory.
    • SRAPI:  New gplugin functions SrcGenEnum(), SrcGenInfo(), SrcGenCmd().  For detailed use examples, see SLABScape's DlgGen.cpp and audio.cpp.
    • SLABWire:  New SIG gplugin functions GenEnum(), GenPList(), GenDesc(), GenCommand().  For use, see SLABWireDemoDlg.cpp.
    • SRAPI/SLABWire:  STK (Synthesis ToolKit) SLAB Generator Plugin (gstk.dll) encapsulating all STK 4.2.0 instruments.  Information about STK is available at:  http://ccrma.stanford.edu/software/stk/
    • SLABScape:  New Generator dialog for selecting and controlling Generator Plugins (see GEN button on Source dialog).
  • Modifications:
    • SRAPI/SLABWire:  16-bit short signal paths converted to 1.0-normalized float.
    • SLABWire:  SIG buffer size now set to frame size to enable low-latency gplugin parameter updates.
    • SRAPI/SLABWire:  SrcCommand() and SSInCommand() have been removed.  Generator (SIG) is the only type of sample stream input (SSI) that accepts commands.
    • SRAPI/SLABWire:  SLAB's signal generators are now encapsulated in the SLAB Generator Plugin gslab.dll.
    • SLABScape:  Scene file (.scn) format version incremented.  Scene files are not backwards compatible.
  • Bug Fixes:
    • SRAPI:  Render Plugin DLLs are now properly freed when the CSRAPI object is deleted.
11/4/04 Version 5.5.0
  • Additions:
    • SLABScape:  Wave file batch processing.
    • SLABScape:  Fullscreen 3D visual display support.  This mode can be used to render an immersive stereoscopic 3D visual display using 3D stereo glasses and NVIDIA stereo drivers.
    • SLABSound:  Waveform API and DirectSound information display.
    • SLABSound:  Wave/RIFF file chunk information display.
    • slabtools:  HRTF analysis and visualization - hlab.m, vall.m, hen.m, henfilt.m.
    • slabtools:  ITD calculation - itdc.m.
    • slabtools:  CIPIC HRTF database support - cipic2sarc.m, cgrid.m.
    • slabtools:  Club Fritz functions - fmake.m, ffmake.m, and fsave.m.
    • slabtools:  vitd() - new az and el views.
    • slabtools:  hlab() - ITD view.
    • Render Plugin:  New renderer, Diotic3.  Diotic3 is primarily for internal lab use, but it can also serve as a Render Plugin example.
  • Modifications:
    • IMPORTANT!:  The predefined renderers (e.g., Diotic, Spatial) no longer scale the sound output level by the number of allocated sources.
    • Development migrated from DirectX8.1 to DirectX9.0.
    • slabtools:  hcom() - non-fixed-inc grid support, min stat.
    • slabtools:  several minor mods.
  • Bug Fixes:
    • SRAPI:  ASIO header file no longer required by srapi.h.
    • SRAPI:  Wave file data block alignment bug fixed.  This bug corrupted the playback of some multi-channel wave files.
    • SLABScape:  Roll negated in 3D visual display.
6/22/04 Version 5.4.1 Bug Fix
  • Bug:  Including srapi.h requires an ASIO header file.  Using the SLAB libraries should not require the ASIO SDK to be installed.  (Note: Building the SLAB libraries does require the ASIO SDK.)
  • Fix:  In srapi.h, replace "#include "sos.h"" with "class CSOS;".

5/27/04

Version 5.4.1
  • Additions:
    • Spatial Render Plugin (rspatial) source code.
    • Spatial communications plugin example (rsar) source code.
    • SRAPI:  Render Plugin Variables (PIVars) for extending SRAPI when using user-defined plugins.
    • SRAPI/SLABWire:  Low-latency features, including SRAPI functions WaitSuspend(), WaitSwap(), RenderEventPrepare(), and RenderEvent().
    • SRAPI/SLABWire:  Multi-channel I/O.
    • SRAPI/SLABWire:  ASIO channel map.  Allows users to map ASIO channels to SLAB channels.
    • SRAPI/SLABWire:  Asynchronous/Synchronous processing option.
    • SRAPI/SLABWire/SLABSound:  ASIO device selection.
    • SLABWire:  CSOM memory access functions SOMData() and SOMDataBytes().
    • SLABScape:  Support for new SRAPI features.
    • SLABWireDemo:  New ASIO output options: device 0, device 1, and output channels swapped.
    • slabtools:  peak.m for illustrating peak detection implemented in the rsar plugin.
  • Modifications:
    • Spatial Render Plugin:  Gain now parameter tracked (aka, smoothed).
    • Spatial Render Plugin:  Mixer more efficient.
    • SRAPI:  Render plugin example "rplugin" renamed "rmyplugin" to distinguish it from SRAPI's rplugin file.
    • SRAPI:  GetStats() split into GetUnderflows() and CScene::GetClips().
    • SRAPI/SLABWire:  Log files no longer grow without bound.
    • SRAPI/SLABWire:  Waveform-Audio output now counts underflows instead of returning an error.
    • SRAPI/SLABWire/SLABSound:  Max ASIO channels increased from 16 to 32.
    • Scene:  OutPCM16() replaced with OutSample().
    • SLABWire:  CSOM save to file now optional.
    • SLABWire:  CSOS PlayMemory() function for playing sample data stored in memory.
    • SLABWire:  Float delay line indexing modified to reduce one frame of audio latency.
    • SLABWireDemo:  Spectrum log bins now summed instead of averaged.
    • SLABScape:  The number of sound sources increased from 4 to 16.
    • SLABX:  Docs moved from User Manual to source code.
    • Development environment upgraded from Visual Studio 2002 to Visual Studio 2003.
    • Documentation updated.
  • Bug Fixes:
    • SLABWire:  CRegistry::GetBinary() memory leak fixed.
    • SLABWireDemo:  PaintSpectrum() color array size fixed.
  • Comments:
    • This is a beta release.  It concludes the development iteration that began with v5.4.0.
    • This release focuses on Render Plugin extensibility, source code release, audio latency reduction, multi-channel I/O, and improved ASIO support.  This is the first release to include all source code.
    • SRAPI ASIO latency measurement results (P4, 2.2GHz, Delta66, Buffer Size = 64 samples):
      1. API to display:   latency = 4.3 ms, jitter = 1.2ms
      2. API to display using WaitSuspend()/WaitSwap():  latency = 3.4ms, jitter = 0.1ms
      3. API to display using RenderEventPrepare()/RenderEvent():  latency = 2.8ms, jitter = 1.4ms
      4. analog_in to analog_out:  latency = 5.9ms, no jitter

3/4/04

Version 5.4.0
  • Additions:
    • SRAPI:  New sound source types - ASIO device, Waveform-Audio device, memory file.
    • SRAPI:  New sound output types - ASIO device, Waveform-Audio device, wave file.
    • SRAPI:  SrcLink() function for allocating multi-channel sound sources (e.g., audio devices, wave files) and for duplicating sound sources.
    • SRAPI:  GetScene() function for getting a pointer to the Scene object (the user now interacts with the Scene directly instead of through SRAPI wrapper functions).
    • SRAPI:  Scene library.
    • SRAPI:  Source code added to SLAB User Release.
    • SLABWire:  New SIS and SOS objects for ASIO I/O.
    • SLABWire:  Static function S::OutPCM16() for writing to the sound output buffer.
    • SLABWire:  SSI function SSInUnderflow() for detecting Waveform-Audio device underflows (underflow was previously an error).
    • SLABScape:  New source allocation dialog for allocating the new SRAPI sound source types.
    • SLABScape:  New sound output options for selecting the new SRAPI sound output types.
    • SLABScape:  Added CPU usage monitor.
    • SLABSound:  Added SLABSound application to the SLAB User Release.  SLABSound displays ASIO device information.
    • SLABWireDemo:  Added SIS and SOS ASIO support.
    • SLABWireDemo:  Added a simple low-pass filter example.
    • SLABWireDemo:  Added device underflow monitors.
  • Modifications:
    • SRAPI:  Sources are now allocated using SrcAlloc().
    • SRAPI:  Signal generator type (e.g., sine, noise, square, impulse) now selected with SrcCommand().
    • SRAPI:  Sound output type now selected using SoundOut().
    • SRAPI:  CSLABAPI renamed CSRAPI.
    • SRAPI:  Removed client/server interface, host/client/server allocation functions, SRAPI abstract base class, Scene abstract base class.
    • SRAPI:  Removed libraries slabcmr.lib, slabcmd.lib, slabsmr.lib, slabsmd.lib.
    • SRAPI:  Libraries slabhmr.lib, slabhmd.lib replaced with srapimr.lib, srapimd.lib, scenemr.lib, scenemd.lib.
    • Scene:  GetOutL(), GetOutR() replaced by GetOutPtr().  Render Plugins now write to the output stream using an interleaved channel format.
    • Scene/SLABWire:  Output delay lines are no longer supported.
    • Scene:  Removed SetDelayOut() and GetDelayOut().
    • SLABWire:  Message-based DSP thread replaced by event-based DSP thread.  DSPThread merged into DSP.
    • SLABWire:  Removed DLO (Delay Line Out).
    • SLABWire:  Removed DSPF function OutDelay().
    • SLABWire:  Removed DSPF function InDelay() (now managed by DLI).
    • SLABWire:  Removed DSPF function FrameSize() (now managed by DLI and SSO).
    • SLABWire:  SIG signal generators now selected with SSInCommand().
    • SLABWire:  SSO sound output now occurs through SSOutSamplePtr().
    • SLABScape:  Removed SLAB client/server support.
    • SLABServer:  The SLABServer application has been removed from the SLAB User Release.
  • Comments:
    • This is a beta release!  I'm presently doing a bit of restructuring...  This is a good point at which to pause, stabilize, and release.  The architecture and API overhaul is largely complete...  ASIO needs a bit more refining and testing...  The docs are a little behind - to fill in the blanks, see the SLABX source code or the SLABScape file audio.cpp (specifically, the CAudio::SbOpen() function)...
    • This release focuses on:
      1. full-duplex sound support (i.e., rendering sound device in to sound device out)
      2. ASIO driver support (for full-duplex, low-latency, multi-channel, robust sound I/O)
      3. a shorter SLAB development cycle
      4. SRAPI open-source
    • Due to the improved robustness of host rendering and the desire to reduce SLAB maintenance time, the client/server interface is no longer supported.  Host rendering is now much more robust due to the new SLABWire thread architecture, ASIO device driver support, and increased CPU performance.
    • To build SLABWire and SLABSound, you must download the ASIO 2.0 SDK from Steinberg (see <inst dir>\lib\src\slabw\asio\readme.txt).
    • The slabtool SLAB Archive (sarc) functions are in a state of transition.
    • The SLAB User Manual and SRAPI Reference Manual haven't quite caught up with all of the recent changes.

10/1/03

Version 5.3.0
  • Additions:
    • SrcStreamCtl() provides pause/play/rewind control of sound source sample streams.
    • New SLABReg app replaces setreg (v5.2), original SLABReg (pre-v5.2, also used for user registration), and SLABScape "Find Installation" feature (v5.1-v5.2).
    • New slabtools: cam2sarc(), hcom(), hil(), hir(), hpower(), newgrid(), zap2sarc().
  • Modifications:
    • Multiple SLAB MSI versions can now be installed under the same user account.
    • GetVersion() now returns the build version (SLAB_VER) instead of the version registry setting.
    • The one-shot wave file playback AutoStop feature can now be disabled using RenderStart().  This allows SrcStreamCtl() to provide virtual environment event-triggered playback of one-shot wave files (e.g., auditory icon playback triggered by the user crossing a boundary in a virtual environment).
    • SrcSpread() merged into SrcRadius().
    • SrcRadius() now assigned per source.
    • SLABScape support for SrcStreamCtl() and AutoStop.
    • The slabtool vir() can now view raw HRTF data.
    • SLABWire: Several mods for SrcStreamCtl() and AutoStop support (e.g., SSInPlay(), SSInPause(), SSInRewind()).
    • SLABWire: DLIList clean-up.  The DLIList can be used by DSP Functions (CDSPFs) to access multiple DLIs.
      Note: In the SRAPI layer (which sits on top of SLABWire), this capability has been replaced by the SRAPI Scene layer.
    • SLABWireDemo support for pause/play/rewind/AutoStop.
    • SLABWireDemo spectrum and OpenGL displays.

8/7/03

Version 5.2.1
  • Additions:
  • Modifications:
    • SLABWire: Most functions now return the current error if in error state.  Most clean-up moved from error handlers to destructors (i.e., the object should be reallocated to clear the error).
    • SLABWire: Simplified delay line and stream format initialization.
    • SLABWire: SSO's now save instead of SSI's.
  • Bug Fixes:
    • The DirectSound speaker configuration is no longer set to headphone.  SLAB now uses the default system speaker configuration.  Some sound peripherals process the sound when the speaker configuration is set to headphone.

6/30/03

Version 5.2.0
  • Additions:
    • SLABScape listener-tracking latency demo.
    • Web-based user registration and download.
    • SLABTrak Fastrak driver libraries and source code.
    • SLABLatency latency measurement utility source code.
  • Modifications:
    • SLABScape no longer supports the Polhemus Isotrak.
    • Improved SLABScape Polhemus Fastrak interface (less options, more robust).
    • Slight change in the SUA copyright notice regarding government research.
  • Bug Fixes:
    • Due to a loop bounds error, the spatial plugin HRIR filter sometimes used 1 tap less than specified.  In some cases, slight discontinuities were noticed in the 32-tap reflection filter output.

6/2/03

Version 5.1.0
  • Additions:
    • "SLABScape Scene" file (.scn) for saving SLABScape scene settings.
    • SLABScape 3D View options: "Eye View" first-person perspective and "Wireframe".
    • SLABScape simulation update rate control.
    • SLABScape SLAB Registry Settings "Find Installation" feature.  This allows SLABScape to manage the SLAB Registry Settings instead of the user registration-oriented SLABReg.
    • SLABScape 3D View "hand" interface (presently in development).
  • Modifications:
    • Major SLABScape architectural overhaul.  Replaced view-document-model with scene-tick model.  Some user-interface clean-up.
    • Client/server robustness iteration.  Added socket send timeout to SLAB client.  Added socket send and receive timeouts to SLAB server.  For present state of client/server robustness, see Known Issues in SLAB User Manual.
    • SLABScape trajectories now supported in client/server-mode.
    • Added denormal check to Spatial renderer materials filter.
    • SLABScape no longer supports the Convolvotron.
  • Bug Fixes:
    • SLABScape 3D View axis color setting fixed.
    • SLABScape 3D View camera location setting fixed.
    • Removed socket packet struct subclassing from SLAB packets.  Struct subclassing creates different sized structs on different platforms (e.g., Windows2000 versus Solaris).
    • SLABScript sound source trajectories now begin at sample index 0 if time 0 specified.  Previously, there was a slight lag of a few hundred samples before the trajectory was initialized.
  • Comments:
    • Includes v5.0.2.
    • This release was only released internally because the web-based release strategy was still in development.

1/23/03

Version 5.0.1
  • Modifications:
    • SLABReg has been modified to account for recent changes to the NASA Ames firewall.

1/9/03

Version 5.0.0
  • Additions:
    • External dll-based Render plugins (new functions: RenderEnum(), RenderID()).
    • SRAPI Reference Manual.
    • slabtools MATLAB tools.
    • HRTF database IDs for preloading HRTFs (new functions: LstHRTFLoad(), LstHRTFFree()).
    • HRTF database per sound source option.
    • .NET Installer project for redistributing a modified SLAB User Release.
    • SLABScape now lists the available Render plugins (Render menu) and the number of DirectSound underflows ("U=" in status bar).
    • SLABServer now lists the number of DirectSound underflows, the number of packets received, and the rate at which packets are received.
    • PDF versions of User and SRAPI manuals.
  • Modifications:
    • SLABReg will now set the registry keys for a SLAB.msi registration that cannot connect to the NASA registration server.
    • Redesigned SLABServer Monitor window.
    • DirectSound underflows are now counted instead of causing an error (see GetStats()).
    • SRAPI name chages:  SrcExtent() to SrcRadius(), LstMap() to LstHRTF().
    • OutDevice(), DSBufSizeOut(), DSBufSizeWrite() merged into OutDS().
    • Linear SrcGain() function removed.
    • GetStats() and SrcRefOffset() now supported in client/server mode.
    • The SLABX HRTF database per sound source demo has returned.
    • The questionable ITD values in jdm.slh have been corrected using values reflected about the median plane.
  • Bug Fixes:
    • If SrcTrajRate() was not called, the trajectory rate was not initialized.  Now uses a default rate of 120Hz.
  • Comments:
    • The SLAB Libraries are now built using Microsoft Visual C++ .NET (WinNT/2k/XP).  These libraries seem to be incompatible with Microsoft Visual C++ 6 (e.g. "can't find atlsd.lib").  Thus, it appears Windows98 can no longer be used to develop SLAB applications.  SLAB applications built using Win2k and MSVC.NET should still run under Windows98.

8/9/02

User Manual Update.  This version corrects several errors regarding the use of source ID.

8/1/02

Version 4.4.0
  • Additions:
    • Open-source client.
    • SLABScape Help.
  • Modifications:
    • Now targeted towards Windows2000.  SLAB will no longer be tested under Windows98SE.
    • Map-per-source feature no longer supported (will return).
    • Multi-channel wave files no longer supported.
    • Arbitrary number of sound sources (removed four source limit).
    • Scenario state now preserved if error occurs (can be reset with Reset()).
    • Improved scripting and trajectory interface.
    • Some API name changes (e.g. ProcessStart() to RenderStart()).
    • SLABScape user interface overhaul.
    • Internal architectural modifications (Scene layer, internal plugins, packets).
  • Bug Fixes:
    • SLABScape source and listener location bugs fixed (in some instances, the source and listener locations were not updated properly).
  • Known Issues:
    • This is an alpha release, meaning it is a work in development that has not been thoroughly tested.  The v4.4 release is, in a way, a v5 alpha in that it contains some of the features and improvements scheduled for the v5 release.
    • SLABX:  map-per-source demo uses the same map for each source.
    • SLABScape:  tracker port and baud can only be set when tracker first used.

5/1/02

Version 4.3.0
  • Additions:
    • SLAB mailing list.
  • Modifications:
    • New SLABReg, new scrambled msi file format, and new registration packet.
    • The DirectSound interface is slightly more robust.
    • The SLABX "magnitudes equal" and "ITDs equal" maps are now valid.
    • Firefly support added to SLABScape.
  • Bug Fixes:
    • All SLAB User's Manual files and hyperlinks now lower case (FrontPage can't handle case-sensitive filenames and hyperlinks properly).
    • Parameter tracker denormalized floating-point values are forced to zero (Xeno's Bug).
    • Fixed a SLABScape z-axis source placement bug.
  • Known Issues:
    • SLABScape's upper and lower z-axis limits may still be a little off.
    • Fairly severe memory leak over many (e.g. 1500) ProcessStart()/ProcessStop()'s under Windows98.  Less severe under Windows2000.
    • Channels might swap while rendering (rare, possibly related to condition above).

2/27/02

Version 4.2.1
  • Additions:
    • Walls added to SLABScape's 3D view.
  • Modifications:
    • New SLAB User's Manual (fewer .htm's).
    • SLABX example application updated.
  • Bug Fixes:
    • Fixed assert which occurred if renderer encountered an error while allocating (bug in v4.2.0).
    • SLABScape SLABScript Editor parse error fixed.
    • Version numbers now correct.
  • Known Issues:
    • In SLABX, all maps are jdm.slh (i.e. modified maps don't exist).

2/11/02

Version 4.2.0
  • Additions:
    • Host function SrcRefOffset() for setting reflection offsets.
    • SLABScape 3D view.
    • SLABReg UNIX server communication.
    • SLABReg .dat to .msi unscrambler.
  • Modifications:
    • New TrakLib driver (tested under Win2k using Fastrak).
  • Bug Fixes:
    • Added per-image IIR memory.
    • Scripts and trajectories now disabled when processing stopped.

1/8/02

Version 4.1.0
  • Additions:
    • Microsoft Windows Installer support.
    • SLABReg registration and registry settings application.

10/2/01

Version 4.0.0
  • Additions:
    • Scripts and trajectories.
    • Host function Callback().
    • Client function MessageBox().
    • Client function EnvMaterial().
    • One-shot wave file playback.
    • Registry support in SSRPC (see CRegistry in SDR).
    • Registry variables (see dialog SLABScape|Device|SLAB IO Settings..., application SLABReg, functions GetVersion(), GetInstDir(), GetLogDir(), GetHRTFDir(), GetDefHRTF(), SetHRTFDir(), SetDefHRTF()).
    • Added SLABDEFS dGainMutedB and nGainMuteLinear.
    • New HRTF map, jdm1010.slh (azimuth and elevation increments equal 10 degrees), created from jdm.slh using biharmonic spline interpolation.
    • Mark Anderson's TrakLib driver added to SDR.
    • SLABScape clip indicator.
    • SLABScape SLABScript editor and monitor.
  • Modifications:
    • Improved robustness throughout SLAB, especially client/server operation.
    • All SLAB libraries, applications, and releases synched to v4.0.
    • jdm.slh is now the default HRTF map.
    • SLABDemo renamed SLABScape.
    • New error handling paradigm (see SLAB User's Manual).
    • Better client/server error handling.
    • Log files now saved as SLAB\Log\log_<logname>.txt.
    • Host function LogFile() renamed LogName().
    • Removed Convolvotron map selection and non-spatial display support from SLABScape.
    • Minor UI improvements to SLABScape and SLABServer.
    • Removed SLV HRTF maps.
  • Bug Fixes:
    • Materials filter IIR filter fixed.
    • LstMap() didn't properly recover from a failed map read.
    • SLABScape Isotrak/Fastrak selection now works.
  • Known Issues:
    • SLAB's dynamic behavior has not been thoroughly analyzed (e.g. ITD algorithm, client/server packet jitter, end-to-end latency).
    • Since SLAB is now primarily developed under Win2k, SLAB has not been thoroughly tested under Win98SE (note: Win98SE has lower latency).
    • Output stuttering can occur without an error being generated.
    • SLABScape-generated trajectories are not supported in client/server mode (Windows sockets limitation).
    • jdm.slh ITDs are a little odd.
    • TrakLib has some robustness problems.
    • Materials filter only valid for one sound source.
    • The User's Manual is incomplete and/or out-of-date in some sections.
    • SLABScape is an alpha release application.
    • SLABX demo application most likely out-of-date.
     
  Versions 5.4.0 and beyond use ASIO Technology by Steinberg.  ASIO is a trademark of Steinberg Soft- und Hardware GmbH.

Downloads      Top