Miles Sound System Development History
This change log includes the entire Miles development history.
Added an ARM64 target to the iOS build.
- Fixed an issue with enumerating the active presets.
- Fixed an issue with seeking Bink audio files in certain situations.
PS4 audio output granularity lowered, which prevents long mix mutex holds.
- Updated to the new public radtypes header from rrCore.
- Fix for race condition when rewinding compressed samples that are nearly complete.
- Fix for potential alignment issues with queued user buffers in the high level.
- Generic output management has changed - if you use AIL_open_generic_digital_driver, the RADSS install function is now a AIL_output_x function of the relevant type in order to add clarity.
Fixed a literal one-in-a-billion bug.
Expose the PS4 audio submit thread and sit initial priority to +3.
Fix a race condition when enqueuing events.
Fixed command line parsing of languages in Miles Studio.
- Fixed an occasional bug in Miles Studio when auditioning buses.
- The side-chain compressor now has a couple of new ways to work that are more useful than a 'classic' side-chain compressor.
Updated an internal cache in the event system to save handle heap space.
- Added a flag to force mixing to start as soon as the driver is opened.
- Fixed a linker issue on PS4.
- Fixed an issue with label references not being found when using multiple banks.
Fixed an issue with pausing recently started sounds in the high level.
On PS Vita, fixed a rare linker issue.
- Added Android as a target platform for the Miles Sound Studio.
- On Android, fall back to sdcard if files aren't found in the package.
- Fixed a bug where very short streams never ended.
[Android] Workarounds added for GCC 4.8 optimizer philosophy.
- Fix for some edge case async read failures.
- [Studio] Fix for a crash on exit.
- Fix for AIL_minimum_sample_buffer_size returning incorrect values on some platforms.
- Fix for sound-local variables in the event system.
Added 32-bit x86 and ARM Windows Phone support.
- Fixed nasty bug in the event system.
Added 64-bit MacOS X support.
- Added 64-bit Linux support
- Added 32-bit x86, 64-bit x86 and ARM Windows Store App 8.0 and 8.1 support.
- Added x86 Android support.
- Added workaround for some Android devices to avoid incessant skipping due to aggressive power policies.
- Added workaround for some Android devices to avoid the speaker popping on open.
- Switched to CoreAudio for recoding on MacOSX due to OS bug.
- Fixed SELinux integration issue from version 9.3h.
Integrated changes from Valve to run on SELinux.
- On Xbox One, switched to the March XDK.
[Vita] Fix for OGG files on Vita.
- Misc minor edge case fixes.
- Fix for MP3 on x64 linux.
- [Studio] Fix for a race condition when using custom temp directories.
- Windows AIL_last_error() will no longer report an error on successful multichannel driver creation.
- Soundbank information functions will now work correctly when auditioning.
Speaker routing is only allocated if channel mask is non standard.
- [Studio] Compressed audition files can now use a temporary path.
- [Studio] Fix for compressing banks from the command line.
- [Studio] Connected clients now use the selected audition language instead of the game language.
- [PS4] Fix for certain semaphore usage cases.
- [Studio] Win64 platform added.
- [Studio] stdout redirection updated for certain cases.
- [Studio] A rare perforce error is now handled.
- [Studio] Fix for deleting assets under source control.
- [Studio] Various crashes fixed.
- Fix for certain cases using directsound on windows.
- Fix for Xbox One jump tables.
Fix for latency bug associated with recent granularity change on Win32.
- Fix for dashes in clientspecs in MilesStudio.
- Fix for relocated sound banks with certain invalid relative paths causing a crash.
- Fix for blended sounds.
- Added hook for high level sample creation.
- Fix for platform compression defaults breaking.
- Update to GCC 4.7 on android.
Fix popping on 3d samples.
- Fix Win64 RIB loading
iOS fix for Siri.
- Fix for samples having more channels than output.
- Fix for packing causing potential alignment issues.
AIL_WAV_marker_* functions now recognizes loop points set via the SMPL chunk as markers of name LoopStart and LoopEnd.
- Bink Audio now support sample-accurate loop points via the new AIL_set_sample_loop_samples function.
- Miles Studio now reconizes markers from source waves and will retain positioning when compressed using Bink Audio.
- Multiple OpenAL devices now continue functioning across AIL_close_digital_driver.
Big, new release with lots of new low- and high- level features!
- Added Android and another secret platform.
- Adding pushing and popping of the sound system state!! AIL_push_system_state allows temporary reset/resume of entire sound state (useful, for example, when popping up a menu over the game).
- Added AIL_end_fade_sample - ends with a fadeout, instead of hard clip.
- Added AIL_schedule_start_sample - schedules a sample to start at an exact time.
- Added AIL_start/stop/resume/end_sample_group - control a group of samples at the exact same time.
- Default mix granularity is now 1 millisecond on all platforms.
- Added the concept of spread - how much a 3d spatialized sound spreads to surrounding speakers.
- Added line segment based sample positioning. You can now represent a sample's position as a series of line segments instead of a single point (also useful for area based sounds).
- Allow OpenAL to share the ALContext to prevent threading issues with multiple open contexts.
- Example PS3 now uses MSS_MC_STEREO for Stereo PS3 output.
- On Wii-U, fxied surround speakers going to the right speaker.
- On Wii-U, protect against invalid buffer position reads.
- On MacOSX, fix headphones insertion/removal.
Miles now supports graphs for distance based computations! Low pass, Volume, and Exclusion can be controll via graph over distance.
- Fixed a crash when under extremely high loads in the event system.
- Miles will now attempt to continue processing the event queue on error, instead of aborting.
- Bugfix for high-level limits.
- [Studio] Variables can now be transformed by the sound designer using a graph.
- Switched to 2.07.03 Wii-U SDK.
Fixed memory leak when streaming very small files.
- Misc event system bugfixes.
- Added an example for sidechain compression.
- Bug fix for very large reverb predelays.
- Closing sync datastructure changed from Mutex to Semaphore to allow AIL_shutdown to be called from another thread.
- Linux rpath handled correctly, along with shared object dependencies.
- [Studio] Sounds can now be marked as Gathered, which will allow management of many sounds under one asset. Primarily for dialog usage.
- [Studio] Misc bug fixes in Miles Studio.
[Studio] Added per platform compression defaults.
- Various bug fixed related to Limits.
- [Studio] Various minor fixes.
- Enqueuing events has been altered to support initializing various values.
- [Studio] Added more options during multiselect.
- [Studio] A sound with a path containing a language reference can be set to pull from a different directory for each language.
- [Studio] Added an option to remove unreferenced sounds during complication.
- Sound Selection has been added - very useful for dialog!
- [Studio] Support for editing the prefix used with Create Event For Sound.
- [Studio] Sounds can now be ordered in Cache Sounds events.
- [Studio] Basic compilation stats can be written to a parallel file.
- Sound sources now have a mix volume for attentuation on a per source basis.
- A basic limiter can be enabled on a bus or driver to prevent clipping.
Switched to WiiU FS API (from FSA which has been deprecated).
- Removed deprecated AXSetMode calls on WiiU.
- Miles Sound Studio fixes for Windows XP.
- Added secret platform (contact us for details).
Fixed a subtle bug on iOS where the background threads were sleeping too little - big performance increase!
- Switched to Wii-U SDK 2.04.
- Fixed a few bugs in the Miles Sound Studio.
Miles now supports busses! Assign samples to busses and treat the group as any other HSAMPLE.
- In Miles Studio, busses have been added to settings. This requires a rebuild of compiled banks.
- A compressor filter has been added for side-chaining from other busses.
- [WiiU] DRC support added. A new example demonstrates this.
- [WiiU] Bug fix with streaming.
Miles Studio 64bit now available!
- In Miles Studio, Banks will upgrade in this release, and compiled banks will need to be recompiled!
- In Miles Studio, the sounds that are not ready to audition are listed under bank properties.
- In Miles Studio, only top level assets will appear in search dialogs.
- In Miles Studio, dragging a folder with both sounds and banks will no longer pollute the recent files list.
- In Miles Studio, various edge case crashes fixed.
- In Miles Studio, Cache Sounds is now capped, and will encounter fewer issues when loading very large numbers of files.
- In Miles Studio, sound designers can now move and control variables without programmer intervention.
- In Miles Studio, sound designers can mark a variable to oscillate at low frequencies (less than 15hz).
- Switch to SDK 2.03 on WiiU.
- PSP2 Threads have better core management.
- The number of milliseconds of audio a sample has produced in total is now available via AIL_sample_mixed_ms().
- binka_encode can now resample prior to compression.
Fixed a variety of minor bugs with the event system and Miles Studio.
In Miles Studio, settings banks are introduced. Details are in the docs, please CONTACT us if you have *any* issues upgrading!
- In Miles Studio, fixed an occasional spinlock when auditioning.
- Switched to SDK 1.9 on WiiU.
- Switched to SDK 2.4.2 on the 3DS.
- Auditioning support on WiiU.
- Auditioning support on Vita.
- Variety of runtime bugs fixed.
- Updated UI for network and info tab.
- Added Audition Client Example to use for testing out hotloading and timeline captures without you're own game.
In Miles Studio, fixed a bug where source control queues would fail to get a correct result from p4.exe.
- Updated iOS example to include basic event functionality.
- Fixed a random crash when using AIL_enqueue_event_by_name.
- Switched to SDK 1.8 on a secret platform.
- In Miles Studio, fixed drag-and-drop not matching capitalized extensions(e.g. .WAV vs .wav).
- In Miles Studio, fixed a memory leak related to waveform rendering.
- In Miles Studio, fixed various minor gui bugs.
- Updated to Telemetry 1.1a.
Fixed a bug when async loading files less than 4K in size with an offset into a file on a secret platform.
- Switched to SDK 1.7 on a secret platform.
- In Miles Studio, fixed 'use source control' never saving.
- In Miles Studio, fixed removing compression during multi-select.
Fixed a bug when async loading files less than 4K in size.
- Added a function to get the rough length of a high-level event.
Fixed a new save errors in the new tool.
- Added a new NDAed Nintendo platform.
- Updated iOS thread primitives.
- On 3DS, updated to SDK 2.4.
Fix AIL_stream_status for very short sound samples.
- Adding the Sony NGP platform.
- Child assets are now listed in the main asset list.
- Added a way to find dangling asset references, as well as unused assets.
- Added a way to requeue failed loads in the high level system due to removed discs.
- Updated Mac and GNU/Linux to latest 9.0 runtime.
Fix for endianness in compiled banks in some cases.
- Various UI fixes in Miles Studio.
- Fix for duplicate persisted presets with the same name.
- Fix for multiple sound assets with the same file size.
- Fix for occasional event system asyncs never completing.
Introducing the new Miles Studio 9! Completely rewritten to be more usable and powerful.
- Games can now connect to Miles Studio, which will allow complete replays of recorded sessions.
- New file structure for banks allows for multi-user editing.
- Miles Studio Perforce integration.
- Recorded sessions allow for in-depth debugging and performance analysis.
- Connected clients can hot load assets from Miles Studio.
- High level variables are introduced and can be used for game-driven properties.
- Vastly improved streaming and threading.
- Blended sounds allow for crossfading and pitchbending between groups of sounds.
- Sound banks now compile and are loaded in place in very few allocations.
- Sound loading in the event system is now all asynchronous and hitch-free.
- Ramps allow for smooth interpolation of volume, wet level, low pass, and pitch.
- Multiselection/unlimited undo for easy editing in Miles Studio.
- Intuitive asset specialization for platform and language.
- Miles Studio background loading and compression of sounds.
Added iOS as an official platform (had been shipping as beta for a long time).
- The iOS libraries are now fat and contain simulator, ARM 6 and ARM 7 versions.
- Fixed a bug that caused Ogg Vorbis files less than 8 KB long to fail to play.
- Fixed a bug that could cause AIL_enumerate_BinkA_frames() to crash.
- Fixed a bug in the Wii file IO code (with small seeks forward).
- Fixed a problem when resuming a stream that had not been started.
- Fixed some corner cases in AIL_stream_status.
- Changed some memcpys to memmoves.
- On 3DS, build with more optimized settings.
- On 3DS, work around some odd semi-hosted linker errors.
- On 3DS, switched to light semaphores, since there are only 8 'real' ones (systemwide).
Fixed bug that could cause crashes when seeking within Ogg Vorbis files under certain conditions.
- Fixed bug that could cause AIL_stream_status() to incorrectly return SMP_PLAYING after stream termination.
- Fixed bug that could cause AIL_start_stream() to fail to restart a completed stream under certain conditions.
- Fixed bug that could cause streams to stop playing after calling AIL_set_stream_position() under certain conditions.
- Released for Nintendo 3DS!
- On Xbox, switched to the Feb 2011 XDK.
- Cleaned up some missing files from the source distributions.
Fixed deadlock in the streaming code (when under heavy IO load).
- Fixed a bug on machines with more than 32 cores.
- Changed the referencing of external asset files in a sound bank to allow the file size to change after deploying.
- Fixed a bug where external referenced file names weren't being compared case insensitively.
Fixed a bug in the Bink audio encoder where a bit of data could be lost after the first block.
- Fixed a bug in the makeloop utility where Bink audio files are looped improperly.
- Fixed a bug if you used a sub-block loop with a position beyond the end of the buffer.
All new IO and streaming system (optimized with Telemetry) - uses background thread loading on all platforms (including Wii). Much, much better sharing when reading from multiple streams at once. You can even read static files during streaming safely.
- Millisecond accurate Bink Audio seeking and querying has been added (including streams). Bink Audio are compressed with a seek table and you can seek time-perfectly now.
- Added Telemetry markup throughout Miles - if you have Telemetry, then you can monitor all Miles resources automatically.
- On Windows, fixed the AIL_delay function to be milliseconds (instead of 60ths of a second).
- On Wii, we are now thread based instead of interrupted based.
- On Wii, we now require you to install a memory allocator by default (and it has to be thread safe).
- Added the AIL_sample_loaded_len function which returns the number of bytes queued on the HSAMPLE in total.
- Added the AIL_stream_filled_percent function wihich returns the percentage that the IO buffer is full for the specified HSTREAM.
- Switched to Visual Studio 2008 on Windows (and built with stack frames, so traces are cleaner).
- Added the AIL_timer_thread_handle function to return the platform's thread handle (HANDLE on Windows, sys_ppu_thread_t on PS3, etc) for the Miles timer and mixer thread.
- Added the AIL_IO_thread_handle function to return the platform's thread handle for the Miles IO thread.
- Several fixes to the Bink Audio encoder to enable accurate seeking.
- For convenience, AIL_sample_output_levels() now returns a single value that reflects the peak amplitude of any/all channels in the HSAMPLE.
MAKELOOP.EXE no longer tries to open the sound hardware, so it can run on a server.
- Tempfiles created by MAKELOOP.EXE and BINKA_ENCODE.EXE are now deleted properly.
- .WAV file streaming now works with filename offset/len markup for packed-file access. Previously, only compressed formats worked with this feature.
- Durations calculated correctly for Bink Audio files in Miles Sound Studio and in the streaming API.
- Exit codes when command line building is set properly on error.
- Write mini-dumps in user folder for permissions.
- Added -o[path] option to Miles Sound Studio to specify the output directory.
- Made the Miles Sound Studio handle redirected stdout correctly (surprisingly tweaky).
Functionality change: The programmer must add a soundbank to be available to the high-level event system before it can be used. Previously, the high-level event system would load a soundbank if it was referenced, but this caused too many accidental loads. Now you must first call AIL_add_soundbank before it can be used.
- File format change: The Miles Soundbank format has changed. To update your master soundbanks, run the bankupgrade.exe utility (in the tools directory) on each soundbank.
- Fixed a bug that could cause audible glitches after multiple iterations of looped .MP3s and other compressed samples.
- Fixed a clicking bug when flipping between DSP-filtered and non-DSP-filtered modes (rarely audible).
- Fixed a bug in the Miles Sound Studio where you couldn't delete a sound asset, if the source sound asset could not be found.
- Added a Bink Audio button to all of the console examples.
- Fixed a mixing bug when applying resampling to an uncompressed sample that had any DSP filtering on it.
- Fixed an optimization bug where the SPU would play static for any DSP filter.
- Removed the concept of a base path from the event system, as all sound banks must now be added explicitly.
- Fixed a bug where event comments could cause an event to fail at runtime.
- Fixed a bug where a streaming sound started via event could not start successfully.
- Fixed a minor memory overwrite bug in the event system.
- Fixed a pathing bug where sounds might not be correctly located relative to their banks.
- Path separators are canonized to forward slashes on most platforms now.
- Added a few more informational fields to the MILESEVENTSOUNDINFO structure.
- Added high-level event system callbacks for more sophisticated resource management.
- Switched to the new standard RAD type header file (rrcore.h).
- Added the Bink Audio SPU library to the distribute (previously built-in the Miles SPU library, but that made rebuilding difficult).
- For static library platforms, fixed a bug to allow Bink and Bink Audio to coexist in the same application.
On the PS3, Bink Audio is now decompressed on the SPU!
- Official release of Miles for the Sony PSP!
- Bink Audio is about 10% faster on all platforms and uses less memory during decompression (it now uses the least memory of all codecs, by far).
- Bink Audio uses less code and table space on all platforms as well.
- Fixed a bug when looping a streamed Bink Audio file.
- Bumped up the maximum Bink Audio channels to 8 (for 7.1 audio).
- The Miles Sound Studio can now accept drag-n-dropped files.
- You can now create label queries in the Miles Sound System (with wildcards and logical matching).
- Increased the background thread space by 16 KB on all platforms.
- Fixed a bug in the AIL_sample_playback_delay query function.
- Worked around a hardware bug with XMA audio when streaming multichannel audio files.
- Clarified the documentation for the DIG_3D_MUTE_AT_MAX preference and related behavior.
- Fixed an issue with stereo input files in the WAVMUX utility.
- binka_encode no longer uses hardcoded tempfile names.
Added new features to the eventtest example application.
- Added error callback for the event system.
- Several fixes to event system runtime.
- More XMA fixes for streamed sounds.
- Fixed several crashes in the Miles Sound Studio.
- Cleaned up the file extensions in binka_encode.
Added the Linux platform.
- Added the MacOS platform.
- Fixed a goofy build problem on Win64.
- Optimized the plug-in data structures (which saved about 100k of static runtime memory).
- Worked around a few more XMA weirdnesses - sigh.
Added the new high-level Miles Sound Studio tool! Now your sound designers can create sophisticated soundscapes without any programmer involvement! Author sound assets, sound presets, environmental factors and sound events and then deploy them for different platforms!
- Added high-level event system APIs so that programmers can trigger sound events authored with the Miles Sound Studio.
- Added the new Bink Audio compression format - it is close to MP3 and Ogg in compression size, but uses around 40% less CPU and far less memory! We expect most customers to use this format - it's perfect for games!
- Added full SPU support for the PS3 - mixing, decompression, DSP filters and reverb are all on the SPU. Miles now uses no PPU cycles!
- Optimized the ADPCM decoder on most platforms to be 10 to 20% faster.
- Added separate control to the wet and dry path of all of the DSP filters (instead of just a mix parameter).
- Added the new AIL_set_sample_playback_delay function, which lets you start a sample with a millisecond delay.
- Made AIL_decompress_ADPCM and AIL_decompress_ASI more memory efficient and faster with large files.
- Switched the Mac build to use CoreAudio for multi-channel output support.
- Added Altivec and SSE optimizations to the Mac build.
- The Mac and GNU/Linux builds both now use our Windows-DLL loader for their plug-ins.
- Optimized a lot of the memory layout for SPU, which helped the performance for most of the other platforms.
- Merged the Win32 and Win64 builds - there is now just one Windows platform.
- Added beta versions of Sony PSP and Apple iPhone.
- Optimized the MP3 decoder - uses much less memory and is faster.
- Added tons of SIMD optimizations for mixing, clamping, MP3 and Ogg decompress on any platform with 4-way SIMD (most of them).
- Split the Miles library into two halves - digital, and MIDI/tools.
- Removed the DOS, original Xbox, and pre-MacOS X builds.
- Fixed a redundant allocation that saved several KB per sample when playing both Ogg Vorbis and XMA files.
- Set correct channel mask in multichannel files recorded by the Capture filter.
- Added AIL_inspect_Ogg and AIL_enumerate_Ogg_pages.
On Xbox, added support for XMA2 files (which lets you use multichannel XMA files).
- Added SIMD optimizations for MP3 files on Xbox 360 and PS3 (Windows and PS2 already had them).
- Fixed a few path problems with the user build scripts.
Added AIL_set_sample_playback_rate_factor and AIL_sample_playback_rate_factor functions.
- Added AIL_WAV_marker_count, AIL_WAV_marker_by_index, and AIL_WAV_marker_by_name functions.
- Added fast Ogg loading - defers Ogg parsing to the background thread which drops the hit on the primary thread when starting Oggs to basically nothing.
- Fixed a parsing bug with some rare Ogg files.
- Fixed the built-in low-pass filter to make it click-free (surprisingly complicated).
- Switched to Xaudio 2 on the Xbox 360.
- Fixed bug that could cause failures when streaming very small files.
Fixed several memory leaks in the new Ogg decoder - everyone should update!
- Made AIL_decompress_ASI not take Miles mixer lock on modern platforms (prevents skipping when decoding heavy duty files while sound is playing).
- Fixed a bug where the new Ogg decoder failed on tiny files when using AIL_decompress_ASI.
- Fixed the source code rebuild batch files on several of the platforms.
This release contains many of the performance features of the upcoming MSS 8.0, so that those paths can start getting exercised.
- Added SIMD mixers for SSE 2, MMX, Xbox 360 VMX, PS3 VMX, and PS2 VU0 - mixing up to three times faster!
- Added a new clean-room-developed Ogg decoder, written directly from the Ogg specification - that is, we no longer use libVorbis. That means you can now use Ogg, even if you have LGPL restrictions - this is 100% RAD source code. Even better, our decoder is natively SIMD - it supports SSE, Xbox 360 VMX, PS3 VMX, PS2 VU0 and Wii packed singles - it is the fastest Ogg decoder available (almost twice as fast as libVorbis, and faster than any other SIMD implementation as well). It also uses quite a bit less runtime memory. Ogg is now our recommended compressed format (over MP3).
- Added the new AIL_set_sample_speaker_scale_factors function that lets you modulate the final volume on a speaker by speaker basis in both 2D and 3D mode. You usually want to use AIL_set_sample_channel_levels to select which input channel goes to what speaker and use AIL_set_sample_speaker_factors to modulate the volume scaling.
- Added the new AIL_set_sample_is_3D function to flip a sample handle into or, more commonly, back out of 3D spacializing mode.
- Mono sounds in 2D mode on multi-channel output now play to the front left and right channels (not every channel as before).
- On Wii, switch to our own stack buffer during callback and timer time.
- You can now set low pass and DSP filter settings on an input channel basis (you can set different settings for the left vs. the right channel, for example. This changed a few of the filter properties, and changed the AIL_sample_stage_property and AIL_set_sample_low_pass_cut function parameters.
- Removed the DIG_PCM_ORDER flag, since you can better control speaker placement with the AIL_set_channel_levels function.
- Removed the final parameter from AIL_init_sample, since there is no DIG_PCM_ORDER flag.
- Fixed several minor issues with the built-in lowpass/occlusion filter.
- Fixed a bug that could cause a crash when using 8.1-channel and 6.1-channel output formats.
- Fixed a bug that could cause a crash with the Delay filter under EAX/DirectSound3D.
- MAKELOOP.EXE is now compatible with LAME 3.98. When running MAKELOOP with LAME versions prior to 3.98, the /x command-line switch must be used.
Added VMX optimizations to the PS3 - mixing to 5.1 or 7.1 is about three times faster.
- Fixed bug that could cause truncation of certain Ogg Vorbis files, particularly short ones.
- Fixed a sound skipping problem on Wii.
- Fixed a crash bug on Wii when using mono sound output.
- Changed the structure padding on many of the structures in Miles to work around a code generation bug with the PS3 GCC (which could cause a crash in the DLS synthesizer).
Fixed a bug that could cause loss of volume in one or more channels after seeking in certain streams.
- Fixed a crash when using nonstandard DLS 1 bankfiles that had more than one articulation chunk on a melodic instrument.
- The PS3 version is now built with system software 210.
Multichannel Ogg Vorbis files are now fully supported by the MSS API. They may be played with either AIL_open_stream or AIL_set_named_sample_file.
- Multichannel (WAVEFORMATEXTENSIBLE) PCM .WAV files are now supported via AIL_set_named_sample_file.
- The Miles Sound Player now supports multichannel .WAV and Ogg Vorbis files.
- Added new WavMux.exe command-line utility to create multichannel .WAV files which may be played directly as static HSAMPLES or converted to multichannel Ogg Vorbis files, e.g., with the free OggDrop encoder, for either static playback or streaming.
- Extensive simplifications made to FAQ `How do I use multi-channel sound output in Miles?` Specifically, the new MSS_SPEAKER enum type eliminates all channel-count dependencies in level-control function calls.
- Several API functions related to per-channel level control have been changed to accommodate multichannel source support using the new MSS_SPEAKER type, and are now more programmer-friendly as well. These functions include AIL_set_sample_channel_levels, AIL_sample_channel_levels, AIL_set_speaker_reverb_levels, AIL_speaker_reverb_levels, and AIL_calculate_3D_channel_levels.
- Added AIL_sample_channel_count function to return the channel width (1=mono, 2=stereo, >2=multichannel) of the specified HSAMPLE.
- Added AIL_sample_output_levels function to return the final amplitude scale factor applied by the MSS mixer to any given HSAMPLE. This takes all scaling sources into account, including 3D distance and cone functions (both default and user-supplied), AIL_set_sample_channel_levels, and the various volume/pan functions.
- AIL_init_sample's return type has been changed from void to S32. See the function description for details.
- The AILSOUNDINFO structure now includes a 32-bit channel_mask member which can be used to specify gaps in the default (WDM-based) channel order for multichannel samples.
- Added AIL_set_sample_buffer_count and AIL_sample_buffer_count to allow the application to determine the number of buffers used for low-level streaming. Changed AIL_sample_buffer_ready to AIL_sample_buffer_available, and modified the parameters of AIL_sample_buffer_info. If your application uses these low-level streaming functions, you should carefully review the function descriptions and the dbtest.cpp example when upgrading to this version of MSS.
- Fixed a bug that could cause lockups when calling AIL_close_digital_driver after unplugging headphones on certain Windows systems.
- Added WIN32_POSITION_ERR property for AIL_platform_property function to allow the application to detect removal of headphones, speakers, or other sound hardware at runtime.
- AIL_set_sample_51_volume_pan and AIL_set_sample_51_volume_levels now establish consistent front/back and left-right levels for all output modes, not just 5.1 modes.
- Fixed a bug that could cause audible artifacts when using software DSP filters (including the built-in LPF) with EAX/DirectSound3D providers
- Fixed a memory leak in the Xbox 360 implementation of AIL_close_digital_driver.
- Cleaned up some IO error handling code on the Wii.
- Fixed a bug in the Wii init code that was causing the digital latency to be too high.
- Removed 500 ms of silence at the front of the `coolmidi` sample MIDI file.
- Lowered the DLS synthesizer startup latency.
- Fixed a (typically-harmless) bug in AIL_filter_DLS_with_XMI that could truncate the output file by 8 bytes.
Released the final version of Miles for Nintendo Wii! We've done lots of PPC assembly optimizations to make Miles run super-fast on this great little CPU. We are really happy with the results - check it out!
- Built the Xbox 360 version with the new June XDK. If you switch your game to the June XDK, then you must update to this version.
- Fixed a bug on the pre-MacOS X version of Miles where streaming could skip.
- Fixed bug that could cause a crash at shutdown time when using AIL_register_trace_callback.
On Windows, fixed a bug in our SSE memset where machines with SSE but without SSE 2 would crash.
- On MacOS, fixed a problem with SSE detection - MP3 playback will now be much faster.
- On MacOS, fixed stack alignment problem on the x86 DLL loader.
- Cleaned up a few of the build batch files.
Changed the default falloff power for multichannel positioning from 1.0 to 3.0. You may wish to review the AIL_set_speaker_configuration function to understand how this change affects the behavior of the MSS 3D positioner.
- The AIL_set_sample_channel_levels function can now be used to modify the channel levels established by the 3D positioner. In previous versions, this function had no effect on 3D-positioned HSAMPLEs and HSTREAMs.
- It is now possible to apply 3D positioning to stereo files. 3D-positioned stereo sources will be downmixed to mono. Previous versions of MSS did not support 3D positioning of stereo sources.
- Fixed a bug that could cause truncated playback of extremely-short XMA samples.
- Fixed a bug that could cause XMA samples to fail to begin playing under certain conditions.
- Fixed a bug that caused the auto_3D_wet_atten parameter for AIL_set_sample_3D_distances to be ignored for sounds beyond the maximum distance from the listener.
- Fixed a bug on Mac that would cause a lockup, if you called AIL_shutdown twice.
- Updated to the PS3 1.60 SDK.
- Updated to the Xbox 360 April SDK.
- Updated to the Visual Studio 2005 on Windows.
- Updated to the Wii 2.4 patch 3 SDK.
- Added internal SSE versions of memcpy, memmove and memset on Win32.
Fixed a bug that could cause memory corruption during DSP filtering on PS3.
- Fixed a bug that could cause output channel levels to change during stream-seek operations.
- The capture filter now supports Xbox and Xbox 360 in addition to Windows.
- Xbox 360 is always opened in MSS_MC_51_DISCRETE mode regardless of the channels parameter passed to AIL_open_digital_driver.
Added AIL_CPU_AFFINITY preference for Xbox 360.
- Renamed the MP3Loop.exe utility to MakeLoop.exe, and added support for ADPCM loop generation.
- Added -r option to MakeLoop.exe.
- Fixed a bug that could cause certain ASI codecs and filter providers to crash on CPUs without SSE support.
- Added the AIL_platform_property function to allow applications to control Miles's thread affinity and other platform-specific behavior.
Added the new MP3Loop.exe command line tool. This tool will create loopable MP3 files automatically!
- Worked around a compiler code-gen bug on the Xbox 360 in the Ogg decoder.
- Switched to using the pthread library on mach-O MacOS.
- Simplified the memory allocator on mach-O MacOS.
- Made the streaming API use a background thread on MacOS when not using async file IO (which usually means mach-O).
- Removed the dynamic MIDI playback timing adjustment code on Mac (since Macs are so much faster now-a-days).
- Changed the PS3 thread code to allow the system to be shutdown on a thread other than the one that started it.
- Fixed a bug in the PS3 stereo ADPCM decoder.
- Made the MIDI to XMI convert tolerate bad MIDI files that have partial events at the end of the file.
- Made the 5.1 volume functions work on other platforms when running in 5.1 speaker mode.
- AIL_inspect_MP3 now reads some of the LAME specific information in an MP3 file.
- Fixed a bug when playing very short Ogg files where the first packet would repeat.
Added custom_filter.cpp, a console application which demonstrates the basics of writing an MSS-compatible DSP pipeline filter.
- Discontinued use of a compiler optimization (-Oz) which was causing crashes in Xbox 360 release-mode builds.
- Added AIL_set_file_async_callbacks function docs for the PS2 and Mac versions, and clarified the documentation for file-callback support in general.
- Fixed a bug in AIL_set_file_callbacks that prevented it from disabling asynchronous file operations on the PS2.
- Updated the PS3 library and examples to the 096.002 SDK.
- Updated to the Xbox 360 September XDK build.
Added an Intel Mac version of Miles. This platform has all the features of the Windows version, including identical performance. The performance is identical because rather than port all of our assembly, we instead wrote a DLL loader and load the Windows RIB DLLs on MacOS!
- Fixed a too-conservative locking situation in the streaming API that would cause one of the disc buffers to not preload with MP3 or Ogg data. So, even if you called AIL_service_stream to fill the internal buffers, when you began playback, you could stall while a disk seek happened.
- Tweaked the streaming API to not lock the mixer mutex while IO is running, so that if you take a large IO hit on a background stream thread, then normal in-memory and other well-cached streams won't skip.
- Fixed a silly bug on the PS3 where a thread handle was leaked for each stream that was played.
- Fixed a crash bug in the AIL_quick_load_mem function.
- Split the definitions of the driver properties and sample properties. This will require a few changes on the application side if you are using DSP filters or EAX preferences. Usually, you will simply have to change enums like DP_FILTER_0 to SP_FILTER_0.
- Removed the C runtime from most of the RIB DLLs (so they can be used on MacOS) which had the side effect of shrinking most of the binary files by 20 to 60K.
- Removed the Ogg encode routines from the function tables which shrunk the Ogg decoder's code footprint in half.
- Moved the multi-channel copy and the adpcm decompressor over to a separate mixer module. On Intel Mac, this module is separate (mssmixer.mix), but on all other platforms, it remains built-in to the Miles library directly. This moved a fair amount of code around.
- Build with better switches on MacOS PPC, so fewer internal functions are exported.
Updated the PPC mixer assembly to not use any microcoded asm instructions.
- Fixed a bug that could cause crashes when streaming .XMA files (Xbox360 only).
- Fixed a bug that was causing crashes on the Xbox360 with the call-logging debug feature enabled.
- Fixed a bug that could prevent listener-orientation changes from taking effect on non-Win32 platforms.
- AIL_open_digital_driver now fails gracefully on generic `Surround sound speakers` Win32 configurations if MSS_MC_USE_SYSTEM_CONFIG is selected when matrix filter providers are not available.
- NULL HPROVIDER pointers may now be passed to AIL_find_filter.
- Added listener-orientation control to examms.exe example.
- Fixed a bug in AIL_set_sample_low_pass_cut_off that could cause noise on samples played through drivers opened at lower sample rates.
On the PS3, moved the streaming I/O onto another thread, so that mixing couldn't be delayed by a slow device.
- Fixed a mutex leak on the PS3 when calling AIL_shutdown.
- On the PS3, moved the internal Miles data tables into the code section to avoid overflowing the game's data section (fixes `relocation truncated to fit` errors on link).
- Fixed a bug that could cause noise/distortion in certain high-amplitude source samples at faster-than-normal playback rates.
- AIL_open_input now allocates a chain of 8 waveIn buffers, rather than 2.
- On Windows, made the skip detection code use timeGetTime to avoid problems on AMD dual core machines.
Added support for the Sony Playstation 3! All of the Miles functionality is present and works terrific!
- Fixed a bug where the low-pass filter coefficients would be reset, even if you were selecting the same low-pass settings.
- Fixed a bug where Voxware files could play back incorrectly when seeking to a non-frame boundary.
- Fixed a memory leak in the chorus, delay, and flange filters.
- Made the delay filter's buffer length shorter to save memory.
- Fixed a problem with 8-bit multichannel output.
Fixed a potential deadlock issue with the EAX output filters.
- Fixed a bug that could cause position-update failures during listener movement when multiple DirectSound3D/EAX sounds were playing.
- Fixed bug introduced with remnant-buffer optimization that could cause clicking when resampling compressed data.
- Made some preliminary changes and additions for upcoming Ogg Speex support.
- Added new All-Pass Filter, intended primarily for experimental use in phase-domain effects.
- Added AIL_register_falloff_function_callback to allow the software mixer's 3D-distance falloff calculations to be overridden.
Released final Miles 7.0 for MacOS! New to this platform is a Carbon Mach-O version of the library, so you can now use Miles with XCode and GCC. Support for Intel Macs coming soon.
- Changed the mixer slightly to avoid 1-sample remnant buffers - sped up mixing of compressed formats very slightly.
- Removed a dependency on a newer-than-necessary XMA library on the Xbox 360.
Released beta of Miles 7.0 for MacOS.
- Miles Sound Player now uses our MP3 frame-inspection API instead of a hardwired parser.
- Fixed a potential source of crashes when selecting options in the Miles Sound Player that cause an MP3 file to be reloaded.
- Added next_frame_expected member to MP3_INFO structure used by frame-inspection API.
- Fixed the redistribution path in the streamer and multiflt examples so that they would work on Win64 and Mac.
- Added a delay to the console examples, so that spinning on kbhit doesn't hog the CPU
- Fixed a few files being installed to the wrong places on Win64.
- Fixed a bug where downsampling an MP3 file by more than 2 to 1 when not using the resample filter (which you shouldn't do anyway) could cause the playback cursor to stop advancing.
Added Ogg Vorbis support to the Miles Sound Studio and the Miles Sound Tools installations.
- Made the Miles Sound Player decode the waveform data on a background thread (player plays immediately now).
- Added a Win64 version of Miles! The entire Miles API is now available for Win64 and is completely compatible with Win32 Miles code. Thanks to AMD for their kind support of this porting effort!
- MSS.h no longer includes any system header files (like windows.h or xtl.h).
- Put memory fences around the interlocked functions in Miles (prevents some really obscure bugs).
- The Miles Sound Tools includes both Win32 and native Win64 versions of the tools.
Added optional Ogg Vorbis support! This new ASI decoder requires signing a special separate license with RAD before you can download it. It's available for all Miles platforms and is completely integrated into Miles. It uses a bit more CPU than MP3 and doesn't quite loop as well, but is a good option when you need low bit-rates.
- Added DTS multi-channel output on the PS/2. This is a great-sounding output layer that takes very little CPU. Perfect for supporting PS/2s that are hooked up to home theaters. You must obtain permission from DTS before you can link with this output layer. Recommended for all PS2 developers.
- Lots and lots and lots of internal changes to support the upcoming Windows 64-bit version of Miles.
- Merged RIB attributes and preferences into a new concept called properties. There is now just one function to both retrieve and set properties, and properties are retrieved into a memory buffer instead of on the return stack. This means if you are setting filter preferences, then you will have to make a few simple code changes. Larger changes are necessary if you are interfacing directly to RIB plugins (or you have written your own); contact us for details on this change.
- Big changes to the EAX 4 properties. You now set a particular EAX4 effect onto a slot directly (instead of the other way around). This is more consistent with what the hardware is doing and makes for a better API. If you have a lot of EAX 4 code, contact us and we'll help you update.
- Fixed a bug where the low-pass filter cut off was based on the hardware DMA output rate instead of the sample rate.
- Fixed a bug where the Xbox hardware low-pass filter wasn't being applied until the sound moved.
- Fixed some occasional clicks when restarting a sample or rapidly changing the volume of a compressed digital sample.
- Fixed a crash in Miles Sound Player with large compressed files.
- OUTPUT_BIT_RATE property is now reported correctly by Voxware codecs.
- Fixed a timer wraparound bug where the CPU usage would be measured incorrectly every 70 minutes.
- Fixed the PS/2 file handle support, so that you can just pass in a file handle instead of a RAD_IOP_ASYNC_OPEN_DATA structure.
- Built the Xbox 360 version with the April XDK (works with XDKs back to February).
- Added new Gain Block Filter for generalized linear gain/nonlinear distortion effects.
- PS2 and Xenon examples now start sounds at their intended 3D positions.
- Fixed occasional trailing glitches when playing certain streams through hardware 3D voice filters on Win32 version.
- AIL_mem_free_lock can now be used safely from within background callbacks on the PS2. The freed memory will be released during the next foreground call to AIL_mem_alloc_lock or AIL_mem_free_lock.
Fixed a silly bug that caused distortion with the software low-pass filter.
Made a few changes to the Xbox 1 XADPCM code to prevent clicks at the end of a stream and garbage after starvation.
- Updated the Miles for PS2 build to link with CodeWarrior.
Made the Windows 3D audio hardware filters respect the master digital volume level.
- Added missing PS/2 example media files.
- Tweaked the PS/2 example program, so that you can pass in the host paths on the command line.
Added XMA playback to Xbox 360.
- Added new demo for Xbox 360.
- Switched to dcbt instead of xdcbt on Xbox 360 - no measurable performance difference and it is safer.
- Added new demo for Sony PS2.
- Added a complete SPU ADPCM voice API for Sony PS2 (now you can drop Multistream completely, if you'd like).
- Added the ability to read from and to IOP and SPU memory with RAD_IOP. You can even stream MP3s out of IOP or SPU RAM!
- Fixed CPU load-measuring on Sony PS2.
- Fixed a bug in the DLS compressed-instrument decompressor.
- Added a new DLS sample file.
- Tweaked the distance-setting code on Xbox 1 to avoid pointless asserts in the Xbox system library.
- MulitFlt.c example now demonstrates how to close a filter/driver binding.
- DBTest.c example updated to demonstrate low-level double-buffering of .MP3 files.
- FileHndl.c example updated to demonstrate how to stream from an existing file handle.
- Fixed a bug that could cause looped streams to reset themselves under certain conditions.
- Moved internal low-pass filter to post-resampling stage, for better compatiblity with .FLT filters
First open beta of Miles for the Xbox 360! Only XMA playback remains to be done.
- First open beta of Miles for the Sony PlayStation 2!
- Fixed a bug that could cause low-level 125-Hz spurs in upsampled or downsampled sounds with the software mixer.
- Fixed a bug that could cause a click when transitioning from unity-sampled playback rates to undersampled (pitch-up) rates.
- Reduced zipper noise when changing parameters in certain filters (such as Parametric EQ).
- Added `Mix` preference and attribute to all filters except Volume Ramp and Capture. This parameter ranges from 0.0 to 1.0, and determines the filter's degree of contribution to its own output signal. You can bypass a filter's effect altogether by setting its `Mix` parameter to 0.0. This will reduce the filter's CPU load significantly when the filter is not needed, while allowing its effect to be turned back on later without adding artifacts associated with filter initialization. Note that all filters with existing wet/dry mix parameters now use `Mix` instead. For instance, the phaser filter's `Phaser Mix` parameter is no longer present, having been renamed to `Mix`.
- Fixed a bug in the Compressor filter that caused incorrect operation with stereo source samples.
- Added AIL_register_trace_callback function.
- Fixed an incorrect pan value in the demo.c sample.
- Documentation updated for PlayStation 2-specific library features.
- Made a small change to allow redistribution files to be loaded from a Unicode path on Win32. Added a FAQ to describe how to do this.
Fixed a bug in the DirectSound3D/EAX output filters that could cause voices of restarted samples to play at incorrect 3D positions.
- Fixed a bug in the DirectSound3D/EAX output filters that could cause voices to stop playing under certain conditions.
- Added CPU usage display to the examms example. This readout shows the load placed on a single CPU by the MSS background service thread.
New unified 3D/2D API -- no more H3DSAMPLES! EAX and DirectSound3D applications now work with HSAMPLEs, giving them access to the entire Miles digital audio API.
- Added support for discrete multispeaker surround-sound output, including 4-channel, 5.1, 6.1, 7.1, and 8.1 formats. You can use our software multichannel provider for more voices and maximum consistency, or use EAX/DirectSound3D for hardware-accelerated effects.
- DSP filters may now be stacked up to eight levels deep. AIL_filter_sample_attribute and AIL_set_filter_sample_preference have been deprecated in favor of AIL_sample_stage_attribute and AIL_set_sample_stage_preference, respectively. These functions take a constant from DP_FILTER_0 (formerly the only available per-sample filter slot) to DP_FILTER_7 (the last of eight available slots in the new version).
- Added two new classes of filters. 'Matrix' filters perform postmix processing for output formats such as Dolby Surround and SRS Circle Surround. 'Voice' filters actually replace the Miles mixer itself, performing their own hardware buffer management on a per-voice basis. All of the EAX/DirectSound3D functionality previously implemented in M3D providers is now based on voice filters. Both matrix- and voice-output filters are installed automatically when AIL_open_digital_driver is called with the appropriate enum value from MSS_MC_SPEC.
- All platforms, including Xbox and DOS, now support DSP filters.
- New digital audio loop editor added to Miles Sound Player lets you generate seamless loops even within MP3 files!
- Added support for SRS Circle Surround(R). This is a Dolby-compatible matrix provider that offers discrete rear-channel positioning on supported receiver hardware.
- Removed some obsolete, unmaintained, and/or little-used 3D providers (RSX, QMixer, A3D).
- Replaced exam3d.exe and con3d.exe example programs with more-general examms.exe example.
- Complete rewrite of EAX/DS3D code to support unified API. Improved performance due to more-efficient buffer reuse.
- AIL_HWND ignores WS_DISABLED windows when searching for a window associated with the current process.
- Several issues with the DOS version were addressed (the timer interrupt stack size was bumped from 2K to 32K, the DP_DEFAULT_MERGE provider is now set correctly, sample pipeline filters are now supported, SSE support has been disabled for DOS extender compatibility, and ASIFILE works correctly with MP3 decoder)
- Miles Fast 2D provider moved into core library. (All drivers offer 3D distance/directional attenuation now, enabled by calling AIL_set_sample_3D_position on an HSAMPLE.)
- MP3 frame headers are now checked for consistency against the most recent valid frame, rather than the first frame in the file (which may have been corrupted or incorrectly-detected).
- Added a frame-level MP3 disassembly utility to the Miles Sound Studio. The disassembler is accessed via the File Info button (formerly File Type).
- Added frame-level MP3 inspection to the API via the AIL_inspect_MP3 and AIL_enumerate_MP3_frames functions.
- ID3v2 tags in the middle of an MP3 file are now handled properly.
- MP3 frames with insufficient data now generate silence rather than simply being skipped (improves robustness in subblock loops).
- Accumulated MP3 output data (and its associated filter state) is no longer discarded during looping (only during normal seek operations, e.g., in response to AIL_set_sample_position).
- Removed external reverb filters. The core library's reverb implementation offers a superset of the removed filters' functionality.
- Removed Lagrangian resampling filter (not competitive with internal resampler).
- Made several changes to the internal API for pipeline filter providers to support multichannel build buffers and postmix processors. Third-party FLT providers will need to be revised for use with MSS 7. Added inline helper functions to imssapi.h for ease of maintenance.
- Always perform predelay calculations to position the reverb tail pointer correctly, even when wet level is zero.
- Doppler calculations now use cosine scaling to discriminate against sources moving perpendicular to source-listener axis.
- Removed EAX 1 support, due to EAX 1's lack of standardization, feature-poor control API, buggy OEM drivers, and the widespread presence of EAX 2-compatible hardware. All EAX 1 applications should migrate to EAX 2 or (preferably) discrete software-mixing configurations.
- Fixed various bugs in the EAX providers, including an array-overflow bug in EAX 4 and incorrect 3D auto-attenuation flag control in EAX 2/3. Significant changes were made to the way occlusion, obstruction, and exclusion are applied to dry and wet levels in the various providers, with the goal of harmonizing their behavior across providers to the greatest extent possible. Some preferences such as EAX_REVERBMIX are now under API control, and were removed. This means that EAX applications optimized for use with Miles 6 may need to be re-tweaked when upgrading to Miles 7!
- Added auto_3D_wet_atten parameter to AIL_set_sample_3D_distances.
- For improved compatibility with certain streaming applications, AIL_load_sample_buffer no longer automatically starts playback. You must call AIL_start_sample yourself, after submitting either one or two valid buffers. (AIL_start_sample no longer restarts playback of double-buffered samples that are already playing, so there's no need to check the sample's playback status when calling AIL_start_sample after AIL_load_sample_buffer.)
- Removed AIL_set_sample_type and moved its parameters to AIL_init_sample. It is no longer necessary to call AIL_init_sample prior to AIL_set_sample_file, AIL_set_named_sample_file, or AIL_set_sample_info.
- Removed the AIL_allocate_file_sample and AIL_register_EOF_callback functions. Use AIL_set_sample_file or AIL_set_named_sample_file instead.
- Removed the (previously-deprecated) AIL_waveOutOpen function. Use AIL_open_digital_driver instead.
- Fixed a bug that could cause AIL_open_digital_driver or AIL_waveOutOpen to fail when using waveOut.
- Fixed a bug that could cause a short glitch when restarting playback of an MP3 file.
- We no longer allow a sample's state to reach SMP_DONE if an ASI decoder still has some data in its output buffer. This fixes a bug that could cause the last few kilobytes of output data from an MP3-based sample or stream to be lost.
- Two Win32-specific preferences, DIG_PREFERRED_WO_DEVICE and DIG_PREFERRED_DS_DEVICE, have been added to force AIL_open_digital_driver to use a specific waveOut device ID or DirectSound LPGUID. These preferences take the place of the dwDeviceID parameter in AIL_waveOutOpen. Most applications should leave these preferences at their default values of WAVE_MAPPER and NULL, respectively.
- Added a new preference, DIG_LEVEL_RAMP_SAMPLES, which determines the number of samples over which volume level changes will be ramped in at each software-mixing interval. With this feature, all software-mixed platforms will experience significantly less unwanted clicking and `zipper noise` during changes to volume control levels and 3D positions.
- Fixed a bug which could introduce clicking artifacts on samples whose playback rates are swept through unity. This fix improves Doppler-effect quality significantly in some cases.
- Renamed AIL_set_3D_room_type and AIL_3D_room_type to AIL_set_room_type and AIL_room_type, respectively. AIL_set_digital_master_room_type has been removed. The room-type functions are now available even for samples that aren't undergoing 3D positioning by MSS.
- Likewise, AIL_set_3D_sample_occlusion, AIL_set_3D_sample_obstruction, AIL_set_3D_sample_exclusion, AIL_3D_sample_occlusion, AIL_3D_sample_obstruction, and AIL_3D_sample_exclusion have been renamed to AIL_set_sample_occlusion, AIL_set_sample_obstruction, AIL_set_sample_exclusion, AIL_sample_occlusion, AIL_sample_obstruction, and AIL_sample_exclusion.
- Removed the concept of the 3D HPROVIDER from the API. The functions AIL_set_3D_distance_factor, AIL_set_3D_doppler_factor, AIL_set_3D_rolloff_factor, AIL_set_room_type, AIL_3D_distance_factor, AIL_3D_doppler_factor, AIL_3D_rolloff_factor, and AIL_room_type now take an HDIGDRIVER rather than an HPROVIDER. AIL_enumerate_3D_providers, AIL_enumerate_3D_provider_attributes, AIL_set_3D_provider_preference, AIL_3D_provider_attribute, AIL_find_3D_provider, AIL_open_3D_provider, and AIL_close_3D_provider have been removed.
- Removed the AIL_set_3D_speaker_type function and the MILES_SPEAKER_TYPE definitions. Speaker types are either specified by the end user via their Windows control panel or OEM configuration applet, or are implicit in the MSS channel specification passed to AIL_open_digital_driver (e.g., MSS_MC_51_DISCRETE or MSS_MC_STEREO).
- Removed the H3DSAMPLE type from the API. Most functions that formerly operated on H3DSAMPLEs were removed, including AIL_3D_sample_attribute, AIL_3D_sample_length, AIL_3D_sample_loop_count, AIL_3D_sample_offset, AIL_3D_sample_playback_rate, AIL_3D_sample_status, AIL_3D_sample_volume, AIL_allocate_3D_sample_handle, AIL_end_3D_sample, AIL_register_3D_EOS_callback, AIL_release_3D_sample_handle, AIL_resume_3D_sample, AIL_set_3D_sample_info, AIL_set_3D_sample_loop_block, AIL_set_3D_sample_loop_count, AIL_set_3D_sample_offset, AIL_set_3D_sample_playback_rate, AIL_set_3D_sample_preference, AIL_set_3D_sample_volume, AIL_start_3D_sample, and AIL_stop_3D_sample.
- Removed AIL_active_3D_sample_count.
- Removed the H3DPOBJECT type, as well as the AIL_auto_update_3D_position, AIL_open_3D_listener, AIL_close_3D_listener, AIL_open_3D_object, AIL_close_3D_object, AIL_3D_user_data, and AIL_set_3D_user_data functions. The remaining functions which took H3DPOBJECTs, including AIL_3D_orientation, AIL_3D_position, AIL_3D_velocity, AIL_set_3D_orientation, AIL_set_3D_position, AIL_update_3D_position, AIL_set_3D_velocity, and AIL_set_3D_velocity_vector have been replaced with versions specific to HSAMPLEs (AIL_sample_3D_orientation, AIL_sample_3D_position, AIL_sample_3D_velocity, AIL_set_sample_3D_orientation, AIL_set_sample_3D_position, AIL_set_sample_3D_velocity, AIL_set_sample_3D_velocity_vector) and HDIGDRIVERs (AIL_listener_3D_orientation, AIL_listener_3D_position, AIL_listener_3D_velocity, AIL_set_listener_3D_orientation, AIL_set_listener_3D_position, AIL_update_listener_3D_position, AIL_set_listener_3D_velocity, AIL_set_listener_3D_velocity_vector).
- Renamed the remaining AIL_3D_sample...() / AIL_set_3D_sample...() functions to AIL_sample_3D...() / AIL_set_sample_3D...() to reflect the fact that 3D positioning is now just another property of an HSAMPLE, rather than a feature implemented by a separate '3D sample' type. The newly-renamed functions are AIL_set_sample_3D_distances, AIL_sample_3D_distances, AIL_set_sample_3D_cone, AIL_sample_3D_cone, AIL_set_sample_3D_position, AIL_set_sample_3D_velocity, AIL_set_sample_3D_velocity_vector, AIL_set_sample_3D_orientation, AIL_sample_3D_position, AIL_sample_3D_velocity, AIL_sample_3D_orientation, and AIL_update_sample_3D_position. Note that an HSAMPLE's 3D properties are ignored by MSS until the application requests 3D positioning support by calling AIL_set_3D_position! Once enabled for a given HSAMPLE, 3D positioning can be disabled by releasing and reallocating the HSAMPLE, or by calling AIL_init_sample, AIL_set_sample_file, AIL_set_named_sample_file, or AIL_set_sample_info.
- Removed AIL_3D_sample_effects_level and AIL_set_3D_sample_effects_level. Reverb effects for all samples (whether or not they're 3D-positioned) are now controlled by AIL_set_sample_reverb_levels. Note that the per-sample wet mix defaults to 0.0, so at least one call to AIL_set_sample_reverb_levels is mandatory before you'll be able to hear any reverb/room effects on any given sample.
- Added AIL_DLS_sample_handle and AIL_stream_sample_handle functions to allow access to the HSAMPLE associated internally with an HDLSDEVICE or HSTREAM. This allowed us to remove AIL_DLS_set_reverb_levels, AIL_DLS_get_reverb_levels, AIL_stream_reverb_levels, AIL_set_stream_reverb_levels, AIL_DLS_processor, AIL_set_DLS_processor, AIL_stream_processor, AIL_set_stream_processor, AIL_stream_playback_rate, AIL_set_stream_playback_rate, AIL_set_stream_low_pass_cut_off, AIL_stream_low_pass_cut_off, AIL_set_stream_volume_pan, AIL_stream_volume_pan, AIL_filter_stream_attribute, AIL_set_filter_stream_preference, AIL_filter_DLS_attribute, and AIL_set_filter_DLS_preference.
- Added AIL_set_speaker_configuration and AIL_speaker_configuration.
- Added AIL_set_listener_relative_receiver_array and AIL_listener_relative_receiver_array. These functions are reserved for future use, and are undocumented at present.
- Added AIL_set_speaker_reverb_response and AIL_speaker_reverb_response.
- Added AIL_set_sample_channel_levels and AIL_sample_channel_levels.
- Added AIL_digital_output_filter, AIL_enumerate_output_filter_driver_attributes, AIL_output_filter_driver_attribute, AIL_set_output_filter_driver_preference, AIL_enumerate_output_filter_sample_attributes, and AIL_enumerate_sample_stage_attributes. (Note that sample-level attribute and preference values for voice output filters may be accessed by specifying DP_OUTPUT in calls to AIL_sample_stage_attribute and AIL_set_sample_stage_preference. Matrix output filters do not support per-sample attributes and preferences.)
- AIL_open_filter now returns -1 (rather than 0) if the filter HPROVIDER was already associated with the specified HDIGDRIVER.
- Release candidate for version 7 on Windows and Xbox.
- Major speed optimizations over version 7.0a - 300% faster multichannel mixing, 200% faster DSP effects.
- Xbox can play now 3D audio on a 2D digital driver by using the pan and volume spacialization code from Win32. This means you are no longer restricted to the Xbox's 64 3D audio voices.
- Xbox can now use the Miles software DSP filters. The only restriction is that you can't apply the software DSP filters to Xbox ADPCM voices (since the hardware decompresses them).
- Renamed the AIL_speaker_reverb_response to AIL_speaker_reverb_levels - this function now allows you to set the master volume level for both wet and dry, so you can use it to set balance levels of each speaker.
- Replaced the mono/stereo delay filters with a single unified delay filter that can serve both purposes.
Beta of the new 7.0 system.
Fixed a small memory leak in 3D sample handle allocation when the buffer format changed (introduced in 6.6g).
- Fixed a sound clip in the RSX provider when playing 8-bit sounds.
Added a new DSP filter to allow you to smoothly ramp up or down volume over time. You can ramp your volumes on a sample by sample basis over any length of time with 3 lines of code. Also added a FAQ explaining how to use this new filter.
- Added a new utility function, AIL_find_filter, to quickly and easily locate a filter by name. This just saves you from having to do the enumeration yourself.
- Added another utility function, AIL_find_3D_provider, to quickly and easily locate a 3D provider by name. Like AIL_find_filter, this just saves you from having to do the enumeration yourself.
- Optimized the AIL_set_3D_sample_data functions so that a DirectSound buffer is only reallocated if the sound format has changed. This can double the speed of these common functions on most hardware.
- If the format of a sound buffer didn't change in AIL_set_3D_sample_data, then we no longer reset the position, orientation, volume, etc. of the 3D sample. We no longer do this because you will usually immediately change these settings anyway, and it makes a big difference in setup time. If you were previously relying on the settings to be cleared, then you can clear them by hand, or you can release and then reallocate the 3D handle.
- Fixed a bug in the DirectSound hardware 3D providers where you could allocate one more 3D sound handle than the hardware could play. No sound would ever play on this handle, so you could unknowingly have had sounds that were never being played. Due to this fix, you may want to double check your AIL_allocate_3D_sample_handle logic to make sure it can handle a null return value (which will now happen if you exceed the sound card's internal buffer limit).
- Fixed a bug in the upsampling filter (on PC and Mac) that caused clipping. This would also affect the Miles Fast 2D providers as well.
- Fixed a bug when using the upsampling filter on ACPCM or MP3 compressed data where one sample at the end of each decompressed buffer might be skipped (this causes a periodic clicking at very slow playback rates).
- Clear the previous sample filter values whenever you restart a sample playback (to avoid a click from the filter if you previously stopped it in the middle of a sound).
- We now exclude disabled top level windows in our automatic HWND detection code (DirectSound requires an HWND) - this avoids occasionally identifying hidden application message windows.
Tweaked the Audigy bug handling and detection again (sigh).
- Added AIL_set_sample_info to the 2D digital sound system to be orthogonal to the 3D AIL_set_3D_sample_info function.
- Fixed a bug where the MP3 decoder DLL could crash if it was unloaded twice (if there were two copies of the DLLs accidentally loaded).
- We no longer reload the RIBs when you specify `.` for the redistribution path.
- We no longer auto-register AIL_shutdown to be called in the application's atexit handler. This was convenient but caused too many wacky linker bugs. You have to do this yourself, if you want this behavior now.
- Fixed AIL_stream_position to be much more accurate (added thread protection) and to give accurate values around loop points.
- Fixed a bug in the streaming system where if you jumped to the end of an ADPCM sound image, then we would pad out the buffer even though we never read the unpadded final ADPCM block. This would cause looping ADPCM streams to play garbage if you seeked off the end.
- Fixed a bug in the DirectSound code where, if you cranked up the DIG_DS_MIX_FRAGMENT_CNT preference to maximum, then you could overwrite the play cursor which would cause sound glitching.
Added some code to work around yet another Creative Labs driver bug. This Audigy 2 driver bug is identical to the SBLive bug from several years ago - after ten hours or so of looping, a DirectSound buffer will suddenly stop reporting buffer position changes. We now watch for any time positions stop changing for longer than 128 ms, and upon this unhappy event, we reset the buffer. This gives a little click of sound (once every ten hours), but at least the audio continues playing.
- Changed some logic to allow streams to be closed inside an end of stream callback (which we don't really recommend anyway).
Set the thread stack size lower on the Xbox version.
- Fixed a rare bug that could cause a divide overflow crash when looping an MP3 stream that ended precisely on an MP3 frame boundary.
- Fixed a bug on the Xbox version where setting the velocity would change the position instead.
- Limit the number of Xbox streaming buffers that are allocated to never be more than the number of HSAMPLEs that are allocated.
- Fixed a stupid editting error that causes the ADPCM decompressor to fail on MacOS.
- Checked for the digital driver being NULL in several of the sound functions for safety.
- Made the EAX4 provider automatically turn on `environment mode` when selecting the room reverb filter.
Added all new EAX 4 support. Nice, clean, streamlined support for the otherwise complicated EAX 4 API, along with a new simple example application to show you how to use it.
- Added some thread protection to the DX calls in the DirectSound3D based 3D providers to avoid rare crashes when making 3D sound calls from a background thread or timer.
- Fixed a free buffer problem that eventually led to crashes when streaming files on the Xbox.
Fixed a SMP crashing bug on MacOS.
- Optimized the 16-bit sample clippers on MacOS.
- Optimized the 64-bit divider on MacOS.
Major optimizations on the MP3 decoder - added SSE support and did lots of memory and code generation tweaks to improve playback speed. On P4s, MP3 decompression is 1.9 times as fast. On P3s, we are 1.7 times as fast. The fastest MP3 decoder is now almost twice as fast!
- Fixed MP3 files with ID3 tags being clipped off at the end.
- Fixed AIL_quick_unload to avoid a crash on fast machines when closing a MIDI with DLS sample.
- Made streaming playback begin immediately in AIL_start_stream, instead of the next time the background thread executed.
- Fixed a bug when pausing and resuming when using the low-level stream APIs where the playback would never unpause. This could cause the high-level streaming services to stall if pausing a stream immediately after playing it on a very fast machine.
- Tweaked thread latencies on Windows and Xbox so that DirectSound is polled less often.
- Default memory alignment is now 32-byte boundaries for SSE.
- Updated CPU detection to detect SSE first, then 3DNow, and then then MMX.
- Fixed some floating point epilson checks to avoid overflows in DirectSound volume setting functions.
- Fixed the Xbox 5.1 support, so that the right right speaker is handled correctly.
- Fixed the Xbox version, so that it wasn't always logging debug dumps to the hard drive.
- Fixed streaming of Xbox ADPCM files.
- Fixed crash on Xbox when decoding multiple IMA ADPCM or MP3 files at once.
- Turned the Xbox sample headroom values back on, so that 2D and 3D volumes are better balanced.
- Fixed the MP3 data tables, so they weren't modified in place (so you could re-init the library without reloading the DLL).
- Fixed a bug in the MP3 decoder where perfectly tonal sound samples could have a periodic volume drop.
- Added a new preference `DirectSound Sample Buffer` to obtain the DirectSound handle to a H3DSAMPLE.
- Brought the Mac version up to date with the PC and Xbox versions.
Fixed a problem where denormal floating pointing values were leaking into the IIR filter (which caused CPU use to be way too high on P4s when using the software EAX filter).
First release of Miles for Xbox! Miles for Xbox maps the entire Miles API onto the powerful Xbox hardware. Without changing your code, you'll get hardware acceleration of almost all Miles features!
- Fixed a link setting that prevented Visual Studio 6 from linking Miles.
- Improved the performance of the DLS synthesizer by not mixing instruments that have gone silent. This can double the performance of some DLS sequences.
- Increased the default number of simultaneous DLS voices allowed from 32 to 64.
- Added the RegisterRIB function to load the MP3 and Voxware codecs in the static library versions of Miles (Xbox and DOS).
Added `EAX property set` and `EAX sample property set` attributes to the EAX providers, so that you can hook to EAX directly if necessary.
- Toggle EAX `auto` mode when using -1 for the mix level on EAX 2 and 3 - this lets EAX 1 be more closely emulated.
- Made the effects level only control the wet level on EAX 1 which makes it more consistent with software and EAX 2+.
- Fixed crash when calling AIL_process_digital_audio if audio was already playing.
- Force compatibility to DirectSound 3 in the 2D system (so we work on NT4 again).
- Fixed a crash when initializing waveOut mode on NT4.
- Fixed a multithreaded deadlock on MacOS X.
Worked around a multi-threaded bug in the system function, timeGetTime, that would cause Miles to use too much CPU.
Worked around a bug in the SBLive drivers where positions were moving backwards (which caused periodic sound drop outs).
- Changed channel locking logic so that you can redundantly lock a channel in a MIDI stream.
- DLS banks other than 0 are now handled properly.
- Fixed a bug in the channel-lock controller (114) code that could cause lock failure in some sequences.
- All MIDI channels from 1-16 are now available for dynamic assignment by controller 114 and AIL_lock_channel. This change allows more complex sequences to be overlaid, but eliminates support for channel-locking on non-General MIDI synthesizer platforms.
- Fixed some crashes when playing bad MP3 data (more bulletproofing of the decoder).
- Change the DirectSound 3D providers not to reset the speaker type to stereo on startup.
- Switched to Perforce for source code control.
- Switched to building with MSVC 7 on Windows.
- Integrated the Linux changes into the main Miles tree (official release soon).
- Switched to building internally with our internal make utilities. We now generate complete batch files to build Miles with no fuss.
Fixed a bug in the Miles Fast 2D and the Dolby Surround providers where the playback rate wasn't being set correctly.
- First version of 6.5 for the Macintosh!
- Fixed a crash in the digital input API when running on MacOS X.
- On the Mac, fixed a crash when the Miles library was placed in a folder more than 127 characters long (now limited to 255 and doesn't crash in any case).
- On the Mac, fixed a bug where 3D samples could get stuck playing with the SMP_PLAYING flag always on.
- Switched to using critical sections on MacOS X. Fixes lots of deadlock conditions that could occur on multi-CPU machines. Uses the timer system from Bink.
- Fixed a bug in the resamplers on the Mac where stereo files could sometimes bleed a bit from the right channel into the left.
- Now use UpTime in Carbon instead of Microseconds (faster on MacOS 9).
- On the Mac, made AIL_mem_use_malloc and AIL_mem_use_free exported functions.
- On the Mac, better quality resampling of ADPCM and MP3 streams.
- Now use a 20 ms mix ahead on the Mac for less CPU use.
- On the Mac, use more descriptive names for all of the Miles redistributable files.
Fixed a bug in the Miles Fast 2D and the Dolby Surround providers where the same H3DSAMPLE was always returned from AIL_allocate_3D_sample_handle.
- Fixed a bug in AIL_stream_volume_pan where the volume levels where being incorrectly returned.
- Fixed a bug where the debug log could sometimes get truncated.
Moved the software EAX reverb engine directly into the Miles mixer and massively optimized it. You can now add global reverb for essentially no CPU hit at all (0.25% - one forth of one percent) per sample! Since it is built into the mixer, you can add software EAX reverb on digital streams or the DLS songs as well.
- Moved the low-pass filter into the Miles mixer and did massive optimizations. You can now use low-pass filtering for about 0.33% (one third of one percent) per sample.
- Merged the digital volume and pan functions and made them accept float values that are linear in loudness (not amplitude). That means that 0.5 is 10 dB down (vs. 6 dB in a linear amplitude system). The pan is now a power pan compatible with DLS - the left and right levels are adjusted to give a balanced total volume as the panned sample moves from one speaker to the other.
- Added direct volume level functions that accept a specific float level for the left and right speakers from 0.0 to 1.0. These direct volume functions are linear in amplitude space (0.5 is 6 dB down).
- Added a new Creative EAX 3 provider (Thanks Carlo).
- Added support for exclusion (a new EAX 3 setting) control in all of the providers (emulated where necessary) and at the API level.
- Added a new Dolby Surround DSP filter. You can now set the front to back pan level on Dolby Surround speaker systems on samples, streams or DLS songs.
- Added new 5.1 and 7.1 speaker system flags. Fixed the default mode of the DirectSound3D providers always using 2-speakers.
- Don't perform mixing at all on samples whose volumes are zero - speeds up the 3D providers when the 3D sample is beyond the maximum distance.
- Mix twice as far on emulated DirectSound drivers to smooth skipping problems.
- When automatically choosing between DirectSound and waveOut, if emulated DirectSound works, but waveOut doesn't work, then flip back to emulated DirectSound even though it may skip.
- Added a time-out in the waveOut support so buggy drivers don't lock up Miles.
- Merged all of the digital filters into one DLL instead of 18 (smaller and faster to load - not to mention 17 fewer files in the redistribution directory).
- Merged all of the EAX 3D providers into one DLL, all of the A3D providers into one DLL, all of the DirectSound3D providers into one DLL, all of the DirectX 7 3D providers into one DLL and all of the Miles software providers into one DLL (again this is smaller and faster to load).
- Fixed a bug in the DLS synthesizer where songs could overrun after a certain length of time (leading to small pops).
- Fixed a bug in the DLS synthesizer where notes played exactly on frequency could be dropped.
- Switched to using a new voice re-allocation strategy in the DLS synthesizer when running out of voices.
- Changed the envelope shaping in the DLS synthesizer to be linear in amplitude space (vs. the seemingly more correct linear in dB).
- Upped the simultaneously voices in the DLS synthesizer from 24 to 32.
- Fixed a small memory leak in the 3D system when a provider fails to open another 3D sample (Thanks Jeff).
- Fixed a bug where using the non-async file reading callbacks where they could be called at interrupt time on MacOS and DOS (leading to a crash) (Thanks John).
- Fixed a bug where requesting the length of a quick audio handle could cause the next audio handle to prematurely end.
- Fixed a steathly bug where playing a non-MP3 stream directly after an MP3 stream at exactly the right moment could cause a crash (Thanks James).
- Fixed a goofy bug in the ASIFile example where the files were being converted only 4 bytes at a time.
- Dropped Win32s support (Win32 on Win16).
- Switched to not calling GlobalLock on Win32 to support some memory debugging systems.
- Added the `Mute at max` preference to the Miles software 3D providers and the DirectSound 3D based providers. This allows you to control whether sounds are muted at the maximum distance (the default) or just stop fading out at the maximum distance.
Added the new 3D functions: AIL_set_3D_rolloff_factor, AIL_set_3D_doppler_factor, and AIL_set_3D_distance_factor.
- Fixed a bug in the DLS synth where MIDI notes could sometimes get shut off when a song looped.
- Added support for MP3 files with ID3 v2 headers. ID3 v2 headers can be up to 64K, so you will usually want to avoid them for space considerations.
- Fixed a subtle bug in the PC downsampling mixers, where the audio could be quite noisy and crackly when downsampling by very small factors.
- Made optimizations to the PC ADPCM and 8-bit sound mixers.
- Added a workaround in the PC Miles timer code for buggy motherboards that advance the QueryPerformanceCounter incorrectly under heavy loads. Also added a check to prevent the timer from ever running backwards.
- Fixed a bug in PC Miles where you couldn't restart Miles with the quick API.
- Fixed a bug where AIL_quick_ms_length wouldn't return the correct length unless the sound was playing.
- Added a few changes to the RIB subsystem so that RIBs are reference counted.
- Used the special exception code on NT to label the Miles background threads (easier to see what threads belong to Miles).
- Fixed a bug in the PC timer code where if you released a timer inside a timer callback, the callback might be called again.
- Fixed a bug when playing waveOut audio on NT4 with an SBLive where the sound would skip and stutter.
- Fixed a bug when playing waveOut audio and you released and then reacquired the digital sound handle.
- Added support for overriding the Miles memory allocation routines under Win32.
- Fixed a bug where the Miles Sound Studio would crash on a MIDI or DLS Dump.
- Fixed a crash bug in the RSX provider when shutting down while running on waveOut drivers.
Mac MP3 decoder has been completely rewritten in PPC assembly. It is 20% faster than the old decoder.
- Switched to a shorter mix-ahead for lower latency on the Mac.
- Fixed a crash when streaming very short MP3 files on the Mac.
- Fixed a rare crash when streaming files on the Mac.
- Fixed a crash in the MIDI to XMIDI converter on the Mac.
First official MacOS version! PC and Mac versions fully synched.
- All new sound mixers - in some cases up to 3 times faster! Also includes much higher quality resamplers (fully linearly interpolated vs. approximate).
- Fixed crash when running under waveOut.
- More tolerant of bad MP3 data (keep playing whenever possible and fewer potential crashes).
- Fixed a bug in the Miles Fast 2D and Dolby Surround providers where some samples beyond the maximum distance never finish playing.
- Added the AIL_set_async_file_callbacks function. This allows you to replace the file IO functions used by the streaming API using asynchronous IO (usually only used on MacOS or Win NT).
- Plain MP3 files inside of a packed file can now be opened by the streaming API without having to wrap a wave header around the data. To do this, pass in the file handle as you would normally do only now add a comma, followed by the length of the MP3 data. For example, if you wanted to stream out of file handle 5, for 32768 bytes, use `\\\\5,32768`.
- Fixed a bug in the voice chat client example where the application could crash on opening.
- Fixed a bug in the exporting of the AIL_update_3D_position and AIL_auto_update_3D_position functions.
- Miles no longer includes pre-built 16-bit Windows DLLs - they must be built on the developer's machine (mainly because the 16-bit Microsoft C compiler doesn't work on my Win2K machine any longer).
All new documentation - includes online and offline versions!
- Most examples have been rewritten to make them easier to understand.
- Added the AIL_open_digital_driver/AIL_close_digital_driver and AIL_open_XMIDI_driver/AIL_close_XMIDI_driver functions. These functions work on all Miles platforms and should now be used instead of AIL_waveOut* and AIL_midiOut* which were Windows-only and are now deprecated.
- Miles now allows all ASI formats to wrapped in a wave file. Each ASI exports a wave format tag that tells Miles what ASI decoder to use.
- Renamed the AIL_DLL_verion function to AIL_MSS_version.
MP3 streams no longer cause audio artifacts at the wrapping of a sub-block.
- The current playback position in an MP3 stream is now correctly reported after a sub-block loop seek.
- Made the MP3 decoder more tolerant of bad MP3 streams.
- Renamed the AIL_input_info function to AIL_get_input_info.
Added the AIL_set_file_callbacks function. This allows you to replace the file IO functions used by the streaming API and AIL_file_read.
- Added the AIL_set_stream_processor and AIL_set_DLS_processor filter installation functions.
- Fixed a couple stream API deadlock/crash possibilities (when running in a multithreaded game).
- Fixed an atexit link warning when building with the non-static C runtime or a non-Microsoft C compiler.
- Fixed a tricky DLS timer aliasing bug when running under Win2K.
- Changed the size parameters to AIL_extract_DLS to be U32s instead of S32s.
Made MSS const-clean! Most source files changed to handle the new const action.
- Fixed a shutdown crash when starting up and shutting down the system multiple times while streams are playing.
- Fixed a crash in the mono delay, stereo delay and reverb 1 filters where memory was freed out of order.
- Fixed a granularity problem when seeking with milliseconds in an uncompressed sound stream.
- Fixed the sub-block looping on streams to allow -1 for the end of the stream.
- Limited waveOut latency to more reasonable maximum values - should have much lower latency on NT 4 with newer sound cards.
- Renamed the internal STREAM_TYPE structure to avoid collisions in the MMSYSTEM.H Windows header file.
- Added the new function RIB_find_files_provider which allows you to search for multiple file formats at once (when you need a specific input and output format, for example).
Improved the streaming playback performance when multiple streams are playing at once or when playing a stream that comes close to fully exhausting the IO bandwidth of the streaming device.
- Force call to AIL_shutdown from an atexit handler to insure Miles is always closed.
- Lock far fewer Miles functions for better performance on multiple CPU machines.
- Fixed a crash problem in the console applications if you hit Control-Break to exit.
- Internally meter AIL_serve checks so that the buffer status is only checked every 10 ms.
Tweaked all of the software EAX settings to much closer match hardware EAX.
- Fixed setting the playback position on very short streams.
- Fixed a crash in AIL_set_DirectSound_HWND if a hardware 3D provider is installed.
- Fixed a crash when closing the input API under Windows 2000.
- If no default HWND is found, MSS now uses the current foreground window with DirectSound (which fixes some problems in NT console windows).
Removed the Sleep in AIL_serve which could cause Smacker to skip on Windows 2000 when running in waveOut mode.
Changed AIL_stream_close to not shutdown the background thread (which, under Windows 98 in the debugger, takes so long that the sound can skip). The stream servicing thread is now closed at shutdown time.
- Re-validate the HWND when re-opening a digital device (to work around a bug in the SBLive drivers which crashed on an invalid HWND).
Fixed a really-well hidden bug that could cause the MP3 *encoder* to lock up when the FPU state was set to a non-default mode.
- Fixed a deadlock that could occur when closing a stream on a multiple CPU machine.
- Fixed the background of some of the controls in the sample apps under Win2K.
- Fixed a crash in the RSX provider when setting the velocity before setting the sample's audio data.
Fixed a deadlock that could occur when closing a stream.
- Made looping MP3 streams loop a little cleaner.
- Fixed a deadlock that could occur when starting a 3D sample from the background timer thread.
- Added AIL_close_input call to voice chat client example program.
- Fixed an obscure bug in the RIB provider enumeration functions.
- Fixed a problem when setting the orientation of a H3DSAMPLE before calling AIL_set_3D_sample_file.
Made the Exam3D example always reset the effects level to 1.0F after a switch. Fixes not being able to hear reverb on some EAX drivers.
- Changed the Miles voice chat examples to use a less commonly used port number to lessen the chance of possible conflicts.
- Fixed the Miles Sound Studio occasionally using the voice chat encoder instead of the MP3 encoder.
- Switched to a new threading model that should be more robust with poor sound card drivers and other libraries that use DirectSound concurrently with Miles (you shouldn't have to call AIL_lock anymore). The new threading model can be turned on and off with the new AIL_MUTEX_PROTECTION preference (default is on).
- Fixed a few harmless BoundChecker warnings.
- Should be fewer skips in the 2D system when switching 3D providers (this is probably as good as we can make this with the Windows 9x's crummy thread scheduler).
- Switched the filters to be compiled with the VC 6 switch `/QIfist` to allow fast floating point to integer conversion, while still giving the compiler good scheduling opportunities.
- Updated the Lagrangian Interpolating filter to the correct source file.
- Added the new AIL_register_3D_EOS_callback function that allows you to set an end-of-sample callback for 3D samples (added on all 3D providers).
- Switched to using the SetEQ function to model occlusions with a hardware low-pass filter on A3D 2 cards (sounds as good as EAX).
- Somewhat simplified the threading model in the A3D 2 and QSound providers (should be a little quicker when starting or stopping sounds).
- Simplified the threading model in the RSX provider drastically (should respond more quickly).
- Fixed a crash if you changed an A3D 2, EAX 2, or Miles fast 2D settings before calling AIL_set_3D_sample_file.
- Fixed a problem with the Fast 2D provider where the low-pass filter could be dropped when replaying the same sound.
- Automatically invert minimum and maximum distances if they are passed in backwards.
- Fixed the 2D streaming system to handle corrupt or unsupported MP3 files without crashing.
- Fixed the 2D streaming system to automatically close all playing streams when calling AIL_waveOutClose or AIL_shutdown (avoids a shutdown crashes).
- Fixed a nasty crash bug when re-using 2D samples or 3D samples in the Fast 2D provider where an applied DSP filter could go uninitialized.
Switched to a new directory structure to better handle the upcoming multi- platform support (see ReadMe.Txt for details).
- Added new voice chat codecs and an new client-server system to show it off (MSSChat.EXE). Since Miles doesn't supply a network layer, our example uses TCP for its transport. Games should add the voice packets into their existing network layers for best results.
- Added a new input API for recording digital audio.
- Added new set of 18 DSP-style digital audio filters. Low-pass, high-pass, equalizers, reverb, EAX emulation with occlusion and more!
- Changed the AIL_set_3D_sample_distances function to only take one set of minimum and maximum parameters (none of the providers except RSX supported different front and back distances). You'll have to make a change to your code to handle for this change.
- Added new 3D functions to set the room type, speaker type, sample effects level, sample obstruction, sample occlusion, and conical emission for samples (see the new Exam3D.exe for examples of all of these functions).
- Added three new DirectSound 7 only 3D providers - full HRTF, light HRTF, and pan and volume only. You must have DX7 installed to use these providers.
- Added a new EAX2 provider with hardware support for occlusions and obstructions. All of the advanced settings are available as provider and sample level attributes and preferences.
- The Miles Fast 2D and Dolby providers now offer software emulation of the EAX room styles. These providers also use a low-pass filter to support occlusions. Use this functionality with care - each voice with EAX effects costs 7% of the CPU on a P5/200.
- Added a new function to set the directory that contains all of the Miles redistributable files (ASIs, M3Ds, FLTs, etc). Just call AIL_set_redist_directory *before* AIL_startup to tell Miles where to find its files.
- Upgraded all of the existing 3D providers to support occlusions and obstructions by simulating them by adjusting the sample volume.
- Added a new A3D2 provider - you can request the A3D2 interface and download geometry or use our new EAX reverb emulation (we create geometry on the fly that matches the EAX room styles as closely as possible).
- Added a new QMixer provider (which cannot be redistributed without a license from QSound - give Mitch a call for details). This provider creates a nice, sweet 3D sound - definitely worth checking out.
- Added sub-block looping of streamed files.
- Added normal doppler effects to RSX (not based on changing positions, but rather by the 3D velocity function).
- Removed support for the Microsoft mixer in our DirectSound support (since there wasn't any reason to use theirs any more). This means that the DIG_USE_MSS_MIXER preference is gone now.
- Made the DOS examples compile under Win32 or DOS - now stored in a CONSOLE directory.
- Made the Miles Sound Studio resizable under Win 98 and Win NT.
- Fixed burst of static when running under DX7 with the debug libraries.
- Pre-normalize the 3D orientation before passing it into M3D providers.
- Fixed tons of other small bugs.
Fixed a rare deadlock crash when using multiple DirectSound buffers (like when using Smacker and Miles together or when using the 3D DirectSound hardware provider with 2D sounds).
- Fixed a memory fragmentation problem under DOS.
- Allow more 3D voices on Aureal cards.
Improved DirectSound buffering to help skipping under heavy loads and crummy DirectSound drivers. Added a new preference that allows you to control how far in advance to mix ahead. Use DIG_DS_MIX_FRAGMENT_CNT to control how many fragments to mix ahead (defaults to eight 8 ms fragments).
- Improved the panning routines in the Fast 2D 3D provider - should pan from side to side much more smoothly now.
- Fixed a rare waveOut deadlock problem.
- Worked around some A3D stability problems.
- Added a new function to determine the slowest timer response since Miles was started. Just call AIL_get_timer_highest_delay to get the worst time (0 means the system is running perfectly). The mixing system will start to skip when this number exceeds 64 ms. If this happens in your application, you can use the new preference DIG_DS_MIX_FRAGMENT_CNT to increase the mix ahead time (at the expense of latency).
- Fixed the EAX constant for flipping back to automatic sample reverb control.
- Fixed MMX support (goofy bug).
- Fixed callback on preloaded HSTREAMs.
- Changed the type of H3DSAMPLEs to be not defined to an (void*) pointer to enable better compile time type checking.
- Fixed a bug when a NULL was passed to the red book routines.
- Cleaned up the Delphi interface files somewhat.
- Fixed AIL_allocate_file_sample to accept an MP3 file.
- Made all of the ADPCM routines fail on non-4 bit IMA ADPCM compressed data.
- Fixed the floating point status not being saved in a DOS timer callback.
- Made the RSX provider consider only the minimum distance (not scaled by the maximum) for volume attenuation.
- Turned on doppler pitch shifting under RSX.
- Fixed a bug in the XMIDI sequencer where channel mutes weren't being handled properly with callback prefix functions (whew).
Made the MP3 parser more tolerant of files with bogus pre-header data.
- Added compatibility with variable bit-rate MP3 files to the MP3 decoder.
Fixed the RSX provider dropping voices when playing multiple samples through a H3DSAMPLE in close succession.
Added a new optimized assembly MP3 math module for Intel and AMD 3DNow - up to 10% better on Intel, 54% better on AMD! Miles is now by far the fastest MP3 decoder on AMD machines.
- Fixed a granularity problem when seeking in a non-compressed stream using AIL_set_stream_ms_position.
- Fixed a crash if you called AIL_shutdown when 3D samples were still playing.
- Fixed an RSX startup crash when running under the MSVC debugger under NT.
- Allocated service threads for 3D samples at sample-allocation time vs. provider-open time.
Made the `Maximum supported samples` provider attribute also a *preference* in the Fast2D, Dolby Surround, and RSX providers. This means you can set the number of available 3D samples in these three providers by calling the AIL_set_3D_provider_preference function *before* you call the AIL_open_provider function. For the Fast2D and Dolby provider, you need to also insure that their are enough 2D HSAMPLEs available for the number of 3D H3DSAMPLEs that you request (use the DIG_MIXER_CHANNELS Miles preference to set the number of 2D HSAMPLEs).
- Made AIL_set_3D_sample_distances and AIL_3D_sample_distances take F32-typed parameters rather than U32.
Fixed a bug in the DLS software synth that would crash if you looped a single MIDI file for more than 71 minutes.
Fixed a crash bug when closing the RSX 3D audio provider if legacy RSX had never been previously installed.
- Fixed a new parameter names to avoid collisions with the STL.
Changed the calling convention of the RIB-based providers slightly (M3Ds, ASIs, and FLTs). Make sure you update *all* of your MSS files - not just MSS32.DLL!
- Added the new Dolby Surround M3D provider. This is a Dolby-certified run-time 3D positioner. It allows multi-speaker systems like those from Cambridge Soundworks, Boston Acoustics, and Altec Lansing to play sounds audio from the rear speakers - `true` 3D sound positioning.
- Added a new filter called `CAPTURE.FLT`. This filter writes all Miles digital audio output to a specified wave file. This lets you create complete sound tracks for your running applications! You simply set the filename and then load the filter to begin recording your application's output.
- Further support has been added to the standard HSAMPLE-based API for installable digital audio processor modules, or `filters.` Filters allow the manipulation of sample data in real time, just before it is mixed into the driver's output buffer. Several new API functions have been added to make it easy for applications to select, install, configure, and use filters.
- The use of these new functions is demonstrated in the FILTER.CPP console application in the FLT directory, along with a simple example filter provider which emulates MSS's reverb support in an externally-installable module.
- To associate a filter provider with a given HSAMPLE, simply call the existing AIL_set_sample_processor function with DP_FILTER as the SAMPLESTAGE parameter. It is not necessary to explicitly open the filter with AIL_open_filter first; however, be advised that some filters may need to allocate large amounts of memory or perform CPU-intensive setup processing when first opened. Calling AIL_open_filter at application startup time may help avoid perceptible delays when a given filter is associated with an HSAMPLE for the first time.
- Open filters are cleaned up automatically at driver shutdown time. Even if AIL_open_filter is called explicitly by the application, it is not necessary to call AIL_close_filter unless the application needs to free up resources consumed by a filter which it no longer intends to use. Keep in mind that each installed filter may add a small amount of CPU-usage overhead to the MSS digital audio pipeline, even if no HSAMPLEs are using the filter.
- Filter support is available only in the Win32 MSS API, and only if the DIG_USE_WAVEOUT or DIG_USE_MSS_MIXER preferences are enabled.
- Added the DIG_F_USING_ASI flag in AIL_stream_info flags return parameter.
- Increased the number of voices available with RSX to 16.
Added the new integrated RSX provider (RAD acquired RSX in January 1999). You can now use the RSX provider without installing RSX first! There were many improvements made to improve quality and compatibility. Be sure to try this new provider - it is now one of the best 3D options!
- Fixed a bug in the Fast 2D M3D provider where the default volume level could be set incorrectly.
- Dropped the volume by 3 db when the sound is behind you in the Fast 2D M3D provider.
- Improved the speed of stopping 3D samples in the DirectSound3D derived 3D providers.
Fixed a bug when opening a normal wave file with the streaming API (introduced by the support for wave-wrapped MP3 files).
Add a 3D provider that uses the Miles 2D interface (pitch/pan/volume) for extremely fast simulated 3D audio.
- Fixed a lock-up bug in the MP3 parser where certain non-MP3 data blocks could cause a crash.
- Reduced the speaker static when loading and unloading 3D providers.
- Added support for wave wrapped MP3 files in the high-level API (both file name and file handle based).
- Fixed a bug where the end of 3D digital sample could be clipped off.
- Fixed a bug when selecting a non-A3D provider after the A3D provider.
- Forced RSX not to use MMX (which was the cause of the awful clipping noise).
Added software reverb to the digital API. You can now set reverb parameters on any sample, stream, quick handle, or soft-synth MIDI sequence. The new functions allow you to set the reverb level (amount of reverb), reverb decay time, and reverb reflection time. See the Miles Sound Player for an example of the reverb parameters.
- Fixed a few problems in the Delphi interface.
- Added SBLive info in the driver list (uses the SB16 driver).
- Fixed a bug in the file-based MP3 decompressor where the channels and bits were inverted in the output wave header.
- Added hardware DLS support for the Aureal Vortex chipset (both Vortex 1 and Vortex 2). Also added hardware DLS selections to the Miles Sound Player.
- Fixed some thread synchronization problems in the 3D providers.
- Added a DOS without MPEG library.
This is a maintenance release. The .M3D 3D hardware providers have changed, so be sure to update any copies you currently keep in your application directory.
- Added AIL_set_3D_sample_info, to allow direct specification of a block of raw sample data via an AILSOUNDINFO structure.
- Added AIL_set_3D_sample_playback_rate and AIL_3D_sample_playback_rate functions to allow on-the-fly control of a 3D sample's playback rate.
- Added three functions for per-sample attribute control in the 3D sound API. AIL_enumerate_sample_attributes, AIL_3D_sample_attribute, and AIL_set_3D_sample_preference allow per-sample attributes to be listed, read, and written, respectively.
- Some 3D providers (notably Creative EAX at this time) allow control of parameters such as effect intensity on a per-voice basis. On the Creative EAX provider (MSSEAX.M3D), the new per-sample attribute functions will expose `EAX sample reverb mix`, which can be read with the AIL_3D_sample_attribute function or written with the AIL_set_3D_sample_preference function.
- Most applications should not need to set the `EAX sample reverb mix` preference. If an EAX application creates a sample and does not set this property, EAX automatically calculates the reverb mix for the sound source based on its volume and distance. If an application does want to override EAX's control of this attribute, its value may be varied over the range of 0.0 (no reverb at all added to the source) to 1.0 (the maximum amount of reverb added to the source). If you want to put the reverb mix attribute back under the control of EAX, you can set the value using the constant EAX_REVERBMIX_USEDISTANCE, defined in EAX.H as -1.0F.
- Fixed a bug which could potentially cause deadlocks when setting or retrieving EAX environment properties.
- Fixed a truncation problem in the AIL_find_DLS function.
- Fixed a bug in the end of stream callback.
- Updated the Delphi interface files to 5.0.
Major new version - almost everything changed somewhat. Highlights:
- All new digital mixer (actually the digital mixer from our DLS synthesizer) - it is much faster, has MMX support, supports on-the-fly filtering, and can call pre- and post- mix sound processors.
- MSS now uses the new Miles mixer even when running under DirectSound - if you start and stop many sound samples, then this can increase your performance dramatically.
- New API for adding runtime bound APIs to MSS (called RIB).
- New API for adding audio codecs to MSS called `ASI` (which is built with RIB).
- New API for adding 3D audio providers to MSS called `M3D` (which is also built on RIB).
- New MPEG Layer-3 ASI-based decoder (note that you must sign a license addendum to obtain the decoder). MP3 is integrated completely into MSS - you don't even have to decompress the MP3 data first (although you can for performance reasons). MSS does NOT support MPEG Layer 1 or MPEG Layer 2 files, btw.
- New high-level 3D API - with the MSS 3D API, you can support any of the Miles M3D audio providers (DirectSound software, DirectSound hardware, Aureal's A3D, Creative's EAX, and Intel's RSX - more coming soon). Note that Intel is currently working on several bugs in RSX, so the RSX provider is noisier than it will be.
- New API for high-level access to the Miles mixer. This means you can do format conversions and pre-mixing in your application (without actually playing the sound).
- New functions for compressing and decompressing with an ASI codec. Note that Miles does NOT supply a redistributable MPEG Layer 3 *encoder*. You can purchase a encoder for use with the Miles Sound Studio for $95, but it is still not redistributable.
- The DLS synthesizer is now capable of using MP3 compression for the instrument data. This makes MSS MIDI files even smaller! You must purchase the Miles MPEG Layer 3 encoder to create these files, however.
- Added a callback to most of the File Format services functions that is called periodically during lengthy operations (for status displays).
- New function to write out a wave file from just a memory pointer and format description.
- Improved autodetection of application master HWND.
- New function to retrieve the HWND that the MSS system is using (for DirectSound and 3D library support).
- Fixed the default pan setting for drum voices in the DLS synthesizer.
- Stream callbacks are now made when the sound completes (rather than when all of the audio has been read from the file).
Fixed a bug when looping ADPCM sound streams.
- Fixed some Win32s problems.
- Fixed a bug where end of stream callbacks would only be made once.
Fixed use of greater than 1MB DLS files under Windows 3.x.
Fixed an obscure buffer boundary bug in the ADPCM decompressor.
First release of the DOS version of MSS 4.
- Fixed the stream millisecond positioning functions.
- Merged a lot of the Windows and DOS source code.
- Shipped the newest S3BASE.DLL in the WinTools directory (adds from memory loading for SonicVibes cards).
- New DOS driver for the ESS AudioDrive (runs better under a Win95 DOS box).
- Added DOS driver for the Maxi Sound 64 sound card.
- Updated Delphi interface files to version 4.0.
- Fixed a bug in the DLS synthesizer with some of the weirder DLS instruments.
Doubled the speed of ADPCM decompression.
- Fixed ADPCM mono samples playing without volume control.
- First release of the Win16 version of MSS 4.
- Dumped the use of the Shrinker DLL compressor - all kinds of loading problems.
- Fixed a few compiler warnings in MSS.H.
MSS now uses a single header file for all platforms: MSS.H
- First release of the Win32 SDK.
- Miles Sound Studio: easy-to-use utility for manipulating MIDI, XMIDI, DLS, and digital sound files.
- New native Win32 version of MIDI Echo.
- New Tools API - convert MIDIs to XMIDIs, compress/decompress ADPCM files, DLS file handling functions, etc. The Miles Sound Studio was written with these functions.
DLS support: high and low-level APIs, a bunch of new utilities, MMX and non-MMX support.
- ADPCM compression support: on-the-fly compression in the sound mixer, file compression and decompression APIs, and support for DLS sample compression.
- Miles Sound Player - new application to play MIDI/XMIDI (with and without DLS installed), and digital sound files.
- New time-based positioning functions for both sequences and samples (current position, total length, and seek).
- Quick API additions: DLS support, time position, normal MIDI file support.
Changed the Quick API to attempt to load the MIDI driver after the digital driver (instead of before) to work around Creative Labs MIDI drivers that attempt to allocate the digital driver for software music synthesis.
- Made quite a few low-level changes to the MIDI sub-system for the DLS support coming in version 4.0.
- Decreased the delay in the MIDI traffic when ending a MIDI sequence.
- Fixed an open bug in the MSS Xtra.
Now use the DSBCAPS_GETCURRENTPOSITION2 flag to work a little better with emulated DirectSound drivers.
- Added a function called AIL_set_DirectSound_HWND that will allow you to explicitly set the HWND of your application. Call this function after AIL_waveOutOpen.
- Fixed a few bugs in the Miles Xtra with opening digital audio cast members.
- Fixed a bug in the Miles Xtra in the positioning command for streaming audio.
- Fixed a crash when there was no event callback installed and an AIL_send_channel_voice_message call was issued with no sequence handle specified.
Fixed a bug in AIL_minimum_sample_buffer_size that causes stuttering in the streaming API under DirectSound when the sound format didn't match the DirectSound output format.
Fixed bug in the streaming API under Win32 where some wave files wouldn't open.
Fixed bug in waveOut mixing code that could cause all sounds to stop under very high sound loads.
- Fixed bug in red book volume control for CD devices that allowed stereo volume resolution.
- Fixed some debug stuff that was left in the Quick example application.
- Switched the newest Causeway (which works around a bug in the Ensoniq VIVO drivers).
- Fixed a bug if you called AIL_start_sample or AIL_load_sample_buffer from an EOB or SOB callback (EOS and timer callbacks were fine).
- MSS doesn't look for the application hwnd in AIL_digital_handle_reacquire again - it just uses the old one.
Added a new high-level streaming API - stream disk files in 4 calls! Streams work just like samples - you can change the playback rate, volume, pan, loop count, etc.
- Updated the timer system to work around the dreaded Microsoft VC debugger problem under Windows 95 and Windows NT (slowdowns and crashes when sitting on a breakpoint for a long time).
- Added volume control functions for redbook audio (AIL_redbook_volume and AIL_redbook_set_volume). Uses MSCDEX for DOS, the mixer API for Win32, and the aux device calls for Win16.
- Fixed a bug in the DOS redbook control functions that would sometimes cause a redbook track not to play (good catch - BullFrog!)
- Integrated the Fatman's General MIDI FM patches directly into the library.
- Added a new function to duplicate an existing quick handle (AIL_quick_copy). This function doesn't duplicate the audio memory - only the handle info.
- Added two new functions to control the speed and volume of a quick handle (AIL_quick_set_speed and AIL_quick_set_volume).
- Added a new function to return the digital and MIDI driver handles when you used the Quick API to init the system (AIL_quick_handles). This is handy because you can now use AIL_quick_startup to simplify initializing MSS, and still use the full API for everything else.
- Fixed a bug in AIL_strnicmp that was causing a crash when loading data out of a 32-bit resource DLL file.
- The MSS DLLs now check to see if they have been incorrectly installed in Windows or Windows system directory.
- Added the AIL_get_preference function to the DOS API.
- Took out the virtual memory feature of VTOR - use the Smacker utilities to convert huge wave files to RAWs.
- Fixed a bug in AIL_file_read when an pointer was passed and the read failed.
- Fixed a bug in AIL_file_write that would free the pointer if the write failed.
- Fixed a bug in the quick API where the MIDI system occasionally fail to load under NT.
- Various minor clean-ups in the Delphi interface units.
Adjusted the method that the 16-bit DLL locks its memory for extreme low memory machines (Win3.x and Win32s).
- Fixed potential crash when completely out of DOS memory in the 16-bit DLL (Win3.x and Win32s).
- Preceded the system functions with `AIL_` to fix function name collisions with VFX from Miles Design. The old function names are still defined to match the new names, so no source should have to be changed.
- Because of these function name changes and because Smacker dynamically links to MSS, you must update to at least Smacker version 2.2B for MSS 3.50F.
Fixed bug in release/reacquire code for DirectSound.
- Added new ESS drivers - now run under Win95 DOS box.
Fixed unusual problem of DirectSound dropping samples when many samples are played at once.
- Improved method that the background task uses for CPU-sharing, so that it is slightly faster.
- Fixed bug in MIDI driver loading code - seen with Gravis driver & MidiForm.
Added locking calls for volume and pan setting in the DirectSound code.
- Added AIL_digital_handle_release and AIL_digital_handle_reacquire for focus control under Windows.
- Added AIL_MIDI_handle_release and AIL_MIDI_handle_reacquire for focus control under Windows.
- Added SMP_PLAYINGBUTRELEASED and SEQ_PLAYINGBUTRELEASED flags for HSAMPLE and HSEQUENCE status flags.
- Added new macro, `AIL_DLL_version`, to return the current DLL version (doesn't actually call into the DLL, so it is always safe).
- Fixed weirdness with the background task complaining about Bad Code Pointers.
- Changed the way AIL_redbook_status works to speed it up.
- Added AIL_serve calls in the redbook API to avoid stutters on slow CDs.
- Changed standard types (S8, U8, etc) slightly (to defines)
- Under DirectSound, you can now pass NULL for the lpFormat parameter - this tells MSS not to adjust the primary sound buffer.
DOS version now has all of the features of the Windows version (red book support, quick-integration API, sub-block looping, etc).
- Fixed error in linked list code of the quick API for Windows.
- Fixed error in AIL_send_channel_voice_message when the driver handle is NULL.
- Changed AIL_ms_count to call QueryPerformanceCounter under NT.
- AIL_ms_count under DOS inside a Windows DOS box can read the Windows timer for millisecond accuracy.
- Added `FILE_READ_WITH_SIZE` flag to FILE_READ function, so that it can return the size of the data read as the first four bytes of the returned pointer.
- AIL.LIB can be used for register or stack based programs (there is no need to recompile for stack based programs anymore).
- MSS can now be used with Watcom 9.5 to 10.6. RAD recommends version 10.6.
- Added new AIL_set_driver_directory function to load drivers, .INI files, and patch files from alternate directory (MSS still always searches the current directory first).
- You must now call AIL_startup before any other MSS calls (including FILE_read, MEM_alloc, etc).
- Callbacks are now typed and must use the AILCALLBACK calling convention.
- Added two new redbook functions. AIL_redbook_track returns the current playing track number. AIL_redbook_retract closes the CD drive door.
- Timer callbacks now synchronize the callback frequency to AIL_ms_count. This improves MIDI playback drastically under DOS inside a Windows DOS box. It also prevents long-term timer counting drift if you use MSS timer to track time (use AIL_ms_count directly for best accuracy).
- DDK has been integrated into the SDK for convenience.
- All example programs and tools have been bound with the Causeway DOS extender.
- Added new DOS drivers for the AMD Interwave and the NVidia multimedia card.
- The VBL flag no longer used for delaying (in either the library or the drivers).
- SetSound can display the current Windows 95 configuration when running in a Windows 95 DOS box.
- Built-in Borland C support for both Windows and DOS PowerPack.
- SoundFont support now supplied directly with MSS.
- AILEXPORT has been renamed to AILCALLBACK for consistency with DOS.
- Renamed main libraries and header to use MSS instead of AIL.
- VTOR uses virtual memory so that large .WAVs or .VOCs can be converted. Under Windows and Windows 95 DOS boxes, virtual memory is limited to 16 MB, so you may have to run VTOR under normal DOS to convert really huge files.
- Added 16- and 32-bit Delphi interface units.
Add complete built-in DirectSound support. There are several new DirectSound specific functions - see the docs for details.
- AIL_startup can be called multiple times - but calling AIL_shutdown closes everything down immediately. This allows you to call AIL_startup several times in your application, and call AIL_shutdown once in your closing procedure.
- Fixed a harmless thread handle leak.
- Also fixed is AIL_minimum_sample_buffer_size which was under-reporting by a factor of 4.
- Added the new Quick Integration API. See the docs for details.
- Added new AIL_digital_configuration call that returns info about the current sound driver.
- Added new sub-block looping feature - can loop internal pieces of a buffer. Use the AIL_set_sample_loop_block function to set the loop points.
- Callbacks now work under Win32s - but are not called at interrupt time. Rather, they are distributed from the Windows messaging system, so you must yield to Windows to receive callbacks
- Added new Red-Book audio interfaces - play CD audio tracks quickly and easily.
- Multiple 16-bit and Win32s apps can be loaded at the same time.
- Fixed crashes when running 16-bit DLL with other 32-bit apps or libraries.
- Fixed crashes when memory would move.
- Added new millisecond count call - AIL_ms_count. Allows accurate timing without having to create absurdly fast timers.
- Added new starvation call - AIL_sample_buffer_info for video players.
- AIL_serve is no longer needed in your message loop. Under Win32, a background thread handles servicing. Under Win16 and Win32s, a background task takes care of it.
- MSS now works under Windows NT - (the NT MIDI drivers are still pretty buggy however).
Integrated Win32s support directly into WAIL32.DLL. This means you can create one executable that supports Win 95, Win NT, and Win32s. To support Win32s, you must distribute both WAIL32.DLL and WAIL16.DLL.
- You must use MEM_alloc_lock for memory that you intend to use for sample or sequence data (with AIL_set_sample_address, AIL_load_sample_buffer, AIL_init_sequence, etc). MEM_alloc_lock returns 32-bit pointers that have been locked and fixed for Win32s. Under Win 95 or Win NT, MEM_alloc_lock just returns GlobalAlloc-ed memory, so you can use this function for all environments. If you pass in a pointer that isn't created with MEM_alloc_lock, MSS will display a error message box.
- HDIGDRIVER, HSAMPLE, HSEQUENCE, etc, are all handles under Win32s - they are not pointers, so you can't dereference them.
- Internal MSS calls are not captured in the debug trace file when running under Win32s.
- Callbacks aren't supported yet.
- Fixes segment wrap around in WAIL16 on sound cards that need large Windows buffers (>64K).
- Marks several variables as volatile, so that WAIL can be compiled with optimizations on.
- Pointers are checked for validity as they are freed.
Switched to a new thread synchronization technique which should fix deadlocking problems previously encountered by some 32-bit MSS applications.
- Previous versions of the 32-bit MSS library could crash if an attempt was made to start more than one instance of a MSS application. This has been fixed.
- AIL_branch_index could fail to work properly in previous versions of MSS. This problem has been fixed for this release.
SETSOUND now includes explicit support for the new Yamaha DB50-XG WaveForce(TM) daughterboard via the MPU401.MDI driver.
- MSS for Win32 now uses thread synchronization.
- If all playing samples had their volume set to 127, it was possible for the AIL_set_digital_master_volume command to fail to control the overall digital output level. This has been fixed.
- The SETSOUND installation program did not uninstall drivers after successful detection. This caused no reported problems; however, the message `Out of timer handles` could appear if the user were to select and install any driver more than 16 times. SETSOUND now uninstalls drivers after detection to avoid the possibility of this error message.
- The AIL_MDI_driver_type function caused premature termination of debug scripts when the AIL_DEBUG feature was in use. This has been fixed.
- Memory past the end of XMIDI files could be accessed by AIL_init_sequence, in cases where XMIDI files smaller than 1024 bytes were played. This caused occasional page faults in the Windows MSS system, but no problems were ever reported in the DOS MSS system. This bug has been fixed, however, in both versions of MSS.
- At the end of an unlooped XMIDI sequence, the sequence loop count is now reset to 1. This allows a sequence to be restarted without undesirable looping.
- Under certain rare circumstances, unwanted pauses occurred during XMIDI playback when using the FOR/NEXT XMIDI controllers or the AIL_branch_index function. These pauses have been eliminated in this release.
- The AIL_end_sequence function previously called the end-of-sequence (EOS) callback function, even if the sequence was already done. This behavior has been corrected.
- The Microsoft Windows Sound System driver (SNDSYS.DIG) has been patched to fix a bug that caused a detection problem on some systems, particularly Compaq machines.
- The standard Sound Blaster digital driver (SBLASTER.DIG) could cause lockups or `Transfer Stack Overflow` messages during detection when running under Windows 95. This was due to the use of an extremely short DMA buffer to check for auto-init DMA capabilities. In this release, the DMA verification buffer in SBLASTER.DIG has been increased in size to avoid problems. No other drivers, including those for the Sound Blaster Pro and Sound Blaster 16, were affected by this problem.
Changing the digital master volume level had no effect on samples whose volume level was set to 127. This has been fixed.
- A VMM page-locking problem with the FlashTek DOS extender version of MSS has been fixed.
Sporadic crashes at shutdown time may occur in earlier MSS releases if a sequence handle is allocated with AIL_allocate_sequence_handle but never actually initialized with AIL_init_sequence. This patch corrects this problem, which affected only the MS-DOS versions of MSS.
Two new drivers, SNDSYS.DIG and ESFM.MDI, provide support for the Microsoft Windows Sound System and ESS Technology ES1688, ES1788, and ES1888 chipsets, respectively. The SETSOUND program recognizes these new drivers by means of an updated AILDRVR.LST file.
- Support for the Borland Power Pack and Zortech/Symantec compiler packages is now available. Please note that by default, the MSS system is built for the more popular Watcom/Rational package. To use MSS with any other compiler/DOS extender package, it is necessary to delete all .OBJ, .LIB, and .EXE files and recompile the desired library version. The .MDI and .DIG drivers, as well as the files in the TOOLS subdirectory, do not need to be rebuilt.
- Four new functions provide a `master volume` control for all digital samples and XMIDI sequences: AIL_set_digital_master_volume, AIL_set_XMIDI_master_volume, AIL_digital_master_volume, and AIL_XMIDI_master_volume
- Please note that like the AIL_set_sequence_volume function, AIL_set_XMIDI_master_volume will not have the desired effect on sequences which do not include MIDI Part Volume controllers (7) at the beginning of each track. Refer to the updated documentation for further information on these functions.
- The function AIL_register_beat_callback has been added to allow applications to request callback service at sequence beat transition points. Refer to the description of this function AND the AIL_sequence_position function in the documentation before attempting to use either function!
- The function AIL_MDI_driver_type has been added to help applications identify the synthesis technology provided by various MSS drivers. This function may be used to select different XMIDI sequences for various sound synthesis platforms. Refer to the documentation for details.
- A new XMIDI controller has been implemented. The XMIDI Channel Mute controller (107) can be used to selectively mute channels in sequences. Refer to the updated documentation for information on the XMIDI Channel Mute controller.
- The prototypes of the AIL_install_DIG_INI and AIL_install_MDI_INI functions have been changed to provide enhanced error-reporting capabilities. It is now possible to distinguish between failure due to a missing .INI file and failure due to driver initialization or hardware detection problems. Refer to the updated documentation file for details.
- Previous versions of MSS truncated 16-bit sample data to 8-bit sample data when panpot or volume scaling was used (panpot != 64 or volume < 127). With this release, 16-bit sample data is scaled with a multiply/shift sequence that preserves full 16-bit sample precision.
- For consistency with the new Windows MSS package, the DIG_DRIVER * and MDI_DRIVER * data types have been replaced with the HDIGDRIVER and HMDIDRIVER handle types, respectively. The old pointer types may still be used, but new applications should be written with the new handle types for compatibility with the Windows MSS API.
- Previous versions of MSS shut down interrupts during the digital mixing process, which caused problems with high-speed serial communications. By default, MSS V3.03 no longer disables interrupts at any time during digital audio processing. A new preference name, DIG_SS_LOCK, has been added to allow applications to restore the former behavior of shutting down interrupts while updating the DMA buffer. Few applications should need to change the DIG_SS_LOCK preference value.
- When playing a stereo digital audio sample on a monaural sound card, previous versions of MSS truncated the right channel source data and played only the left channel data. MSS V3.03 allows the AIL_set_sample_pan function to fade linearly between the left and right source channel in this situation.
- In previous versions of MSS, it was possible under exceptionally rare conditions for a nested INT 8 interrupt to cause crashes due to stack corruption. Under Windows 95, however, the probability of protection faults and crashes is greatly increased. This bug has been fixed for this release of MSS; additionally, Windows 95 itself has been patched to correct the bug in legacy applications by automatically modifying the faulty instructions in the MSS INT 8 ISR. Customers with the retail release of Windows 95 should not be affected; however, early beta versions (pre-490) can exhibit problems.
- A minor bug in the digital mixer code caused clipping tests to be performed even with only one actively-playing sample. This bug has been fixed for this release, resulting in faster digital audio performance.
- The AIL_resume_sample function could fail to operate properly if no other samples were playing at the time it was called. This has been fixed.
- Reports have been received of lockups with Sound Blaster 16 daughterboards (such as those from Roland and Creative Labs) which occasionally occur during extremely intense bursts of MIDI traffic while digital audio is in use. The MSS MPU401 driver has been patched to provide a partial workaround for this problem; however, momentary digital audio glitches may still be noted during fast volume fades and other periods of high MIDI activity. Because this problem is due to a hardware bug in the Creative chipset, no completely reliable software workaround is currently known. However, difficulties arising from the bug are quite rare and should not be a cause for concern with most applications.
- AIL_start_sequence formerly reset the sequence loop count (if any) to 1, effectively disabling any loop count previously established by AIL_set_sequence_loop_count. This has been fixed in version 3.03 -- AIL_set_sequence_loop_count may now be called either before or after playback begins.
The DRIVERS directory now contains a complete MSS driver configuration program (SETSOUND.EXE) which may be included in your application. SETSOUND must be executed before any of the MSS example programs in the DRIVERS directory can be run. Consequently, the example programs no longer require driver filenames to be specified directly on their command lines.
- SETSOUND is very easy to use and can shave days or weeks of programming time from an application's development cycle. However, you should refer to SETSOUND's complete description in the Tools Reference section of the manual to help you get the most out of this powerful new utility.
- The contents of the old MIDI and DIGITAL directories have been merged into the outer DRIVERS directory. Minor revisions have been made to the example programs and makefiles to accommodate this change.
- SBLASTER.MDI, SBPRO1.MDI, and SBPRO2.MDI now check the BLASTER environment variable to permit FM sound autodetection at addresses other than 220h. Previously, only the Sound Blaster-series .DIG drivers checked the BLASTER variable.
- DMA channel 0 is now available for use with Sound Blaster Pro adapters. In earlier releases, DMA channel 0 worked only with Sound Blaster 16 boards.
- During autodetection, RAP10.DIG now checks addresses 330H and 320H, using DMA channels 5 and 6 and IRQ 9. Formerly, IRQ 5 was tested with address 320H.
- The AIL_minimum_sample_buffer_size function could occasionally return buffer sizes below the actual minimum size when used with the SBPRO.DIG driver. This bug has been fixed.
- An error-checking problem in the SSTEST example program could cause GP faults under rare circumstances. This bug has been fixed.
- Updated Gravis UltraSound drivers are now available with this release. These `native mode` drivers no longer require the ULTRAMID emulation program.
- Two new drivers, ADRV688.DIG and PROAUDIO.DIG, are supplied for use with ESS Technology's ES688 chipset and Media Vision's Pro Audio Spectrum line, respectively. Many newer systems from Compaq and other vendors include the ES688 device, which can support 16-bit stereo sound at up to 44 kHz through the use of the new ADRV688.DIG driver. PROAUDIO.DIG has been tested and found to give satisfactory performance on most systems; however, the Media Vision cards' `native mode` has never been among the most reliable of sound options, so users should be informed that the SBLASTER.DIG driver can be used with most Pro Audio Spectrum boards in the event problems occur.
- First version of MSS for Windows is released as version 3.02 with full MSS API support for 16-bit Windows 3.1, Windows 95, and Windows NT.
The AIL_background function allows an application function to tell if it is being executed from within an MSS timer, XMIDI, or callback function.
- The new AIL_set_sample_file function is similar to the existing AIL_allocate_file_sample function, except that it operates on an existing sample handle. .VOC or .WAV files may be played using an application's own sample handles through the use of the AIL_set_sample_file function. See the API Reference for further information.
- A powerful debugging feature has been added to the MSS API library. If an AIL_DEBUG environment variable is created with a command of the form SET AIL_DEBUG=filename, a timestamped log of virtually every MSS API call made by any subsequently-executed MSS application will be recorded to the text file or device `filename`. The logfile may be examined to help diagnose and fix application errors. MSS functions called from within callback functions will not be logged, along with the functions AIL_switch_stack, AIL_restore_stack, AIL_unlock, AIL_lock, and AIL_background.
- Digital support for the Roland RAP-10 device is now available (RAP10.DIG). This board produces extremely high-quality audio in either 8- or 16-bit, mono or stereo formats. Use the MPU401.MDI driver for MIDI support with the RAP-10.
- Digital support for the New Media WaveJammer PCMCIA audio adapter is now available (JAMMER.ZIP). Use the OPL2.MDI driver for MIDI support with the WaveJammer.
- Under certain circumstances, double-buffered samples could be terminated prematurely in previous releases of MSS. This problem has been fixed.
- `Stuck` notes were occasionally reported when shutting down applications using the Roland RAP-10 and Roland SB16 MIDI daughterboards. This MIDI hardware overrun problem has been corrected by introducing a slight delay into functions which flush the XMIDI note queue, such as AIL_end_sequence and AIL_stop_sequence. This delay should not normally be perceptible at the application level.
- Revised guidelines for audio-video synchronization have been issued with this release. The AIL_minimum_sample_buffer_size function returns the size of the smallest memory block which may be used with the double-buffering calls. Typically this value will range from 2 to 8KB; applications must ensure that their video playback engines can provide sound blocks of this size or greater. See the API Reference for further information. The DBTEST.C example program now uses AIL_minimum_sample_buffer_size to allocate its memory buffers. Note that the `Guidelines for Audio/Video Synchronization` section that appeared in earlier manual revisions is no longer applicable.
- Under rare circumstances, MSS's built-in VMM locking calls could fail to lock the last few bytes in a module. This problem was caused by Watcom's code optimizer; a workaround is now in place.
- The AIL_restore_interrupts function is now prototyped to return void.
- Calls to the AIL_channel_lock function could result in crashes if any sequence handles were allocated with AIL_allocate_sequence_handle but not yet initialized with AIL_init_sequence. This problem has been fixed.
- AIL_destroy_wave_synthesizer now releases sample handles allocated by AIL_create_wave_synthesizer. Previously, these allocated handles were lost upon destruction of the HWAVE instance.
FlashTek X32 support with the Watcom compiler
- Sound Blaster AWE32 XMIDI support (SoundFont support coming soon!)
- Ensoniq SoundScape native-mode digital and XMIDI support
- Updated Gravis UltraSound support
- The AIL_set_sequence_volume function can now be used prior to calling AIL_start_sequence. Previously, AIL_start_sequence reset the sequence volume to its default value. The default sequence volume is now established by the AIL_init_sequence function, based on the MDI_DEFAULT_VOLUME preference.
The complete digital audio system, with digital mixing, mono/stereo support, double-buffering, and individual control over sample pitch, volume, panning, and stereo balance. Any sample, regardless of its resolution, rate, channel count, or sign, may be played with any MSS 3.0 digital driver -- present or future!
- Full General MIDI support, including 16-channel response for all Yamaha drivers, adjustable pitch-bend range, and information on The Fat Man's acclaimed Yamaha General MIDI instrument set.
- Over 100 API functions for interactive music and sound effects control.
- Complete documentation of all tools and MSS API functions.
- Support for Watcom C32/C++32 V10.0. Versions 9.5 and earlier may also be used by recompiling the library's source code.