Site hosted by Angelfire.com: Build your free website today!

 







State of the Implementation

The current intention is to fully implement the complete SAOL  language as defined in the ISO MPEG4-SA standard; however, the current technology preview release of Sfx does not implement the full language. Despite this Sfx implements most of the core real-time language features, and provides a solid base for development and experimentation with the SAOL langauge.

This page describes the current state of the Sfx Implementation.

Core Language Features

Feature Implemented Tested
tables, including high-quality interpolation Yes Yes
Signal Rate Semantics Yes Yes
Core-opcode calls Yes Yes
User-defined opcodes Yes Yes*
tablemap Yes Yes
if statments Yes Yes*
oparray Yes Yes*
while statements Yes Yes*
MPEG-4 bitstreams No  
routing Yes Yes*
templates No  
SASL Partial  
MIDI File Input Yes Yes
AudioFX nodes No  
spatialize statement No  
Direct MIDI Coming soon  
SASBF No  

* Sfx may exceed the requirements of the standard in some cases without giving warnings or errors. This will be corrected in future releases.

Core opcodes

All opcodes and table generators have been implemented and tested  except for the opcodes given below. Most opcodes have been tested at least minimally. The buzz opcode and table generator will work for low orders of harmonics, but requires corrections graciously suggested by John Lazzaro in order to correctly generate values for large numbers of harmonics.

Opcode Implemented Tested
pluck Yes No
buzz Yes Fails in some cases
grain No  
biquad Yes Spec discrepancies
fft No  
ifft No  
compressor Yes Untested, believed to have problems.
chorus No  
flange No  
fx_speedc No  
speedt No  
gettempo No  
settempo No  
cubicseg generator Yes Spec discrepancies.
     
     

SASL Implementation

Feature Implemented Tested
instr line Yes Yes
control line Yes Yes
tempo line Yes Yes
end line Yes Yes
Labels Yes Yes
table line No  

Known Problems

  1. If an instrument is routed explicitly to output_bus, instruments without send statements should be routed to this instrument instead of to the output_bus. This is not currently implemented. To work around this problem, explicitly send all instruments to their desired bus. Routing works correctly in all other cases.
  2. All Sfx variables and intermediate expressions are stored as doubles instead of floats. Whether this is illegal or not is not clear; however, the the SAOL specification specifically cautions that doing this may cause problems with behaviour and stability of digital audio filters within implementations that use double-precision intermediates and storage. In addition, MPEG-4 bitstreams cannot contain double-precision floating-point literals: literals must be sent as 32-bit floats in MPEG-4 bitstream. This may cause precision problems for Sfx in the future when the bitstream implementation comes up.

    The Sfx compiler system does make allowances for using redefining float_t as float instead of double; however, I haven't yet had a chance to see what kind of difference this makes.

    At present, I'm uncertain how to resolve this issue. I'm concerned that using floating-point rather than double precision intermediate values during expression evaluation may have undesireable performance consequences on x86 platforms.

    Be warned: Sfx may revert to using floats instead of doubles in future versions.
Copyright © 2000 Robin Davies.
All Rights Reserved.
Contact: rerdavies@msn.com