|
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
- 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.
- 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.
|