ChangeLog
AeonWave (3.11.1) stable; urgency=low
- Fix a regression in the streaming audio code.
AeonWave (3.11.0) stable; urgency=high
- Add support for AIFF and snd/au files.
- Add support for pitch-fractions.
- Add specific AL, GS and XG configuration files for chorus and reverb.
- Add the option to alter the Q-factor of the frequency filter instead of the cutoff-frequency, when using an LFO.
- Rename the 'Audio Files' backend to 'Audio Streams' but keep 'Audio Files' as an unreported alias
- The aaxBufferReadFromStream function now will fetch, and return, .pls .m3u and .m3u8 playlists from a remote connection. It is up to the caller to handle them properly.
- Reorganize the stream connecting code for shorter connection times.
- Allow for up to 32 tracks in the source buffer, from 8 previously.
- A complete overhaul of the WAV handling code making it much more robust, fault tolerant and support more chunk types. Also fix clicking sounds when streaming files with a sample-rate not matching the playback rate.
- Add stream writing to OGG/Vorbis if libvorbisenc and libogg are found.
- Fix streaming of multi-channel audio files in cases where the playback rate was too high for the internal buffer sizes resulting in slowed-down, choppy playback.
- Fix a segmentation fault when trying to parse a too large vorbis file into a too small audio buffer (max 20 seconds).
- Fix the MP3 stream writing the wrong bit-rate to the file header.
- Fix a buffer overflow when the delay effect is being generated by the chorus/phasing/flanging effect and then becomes a delay-line effect which requires a larger history buffer.
- Fix a possible null-pointer reference for filters and effects when setting the state with an unsupported waveform type.
- Fix a segmentation fault at the end of a non threaded stream playback.
AeonWave (3.10.0) stable; urgency=high
- Add aaxSensorSetOffset() and aaxSensorSetOffsetSec() functions to set the offset within a sensor which supports seeking.
- Add an id3v2 header for mp3 playback.
- Add variable bit-rate support for mp3 playback (set bitrate to zero).
- Add a delay-line effect with one delayed signal for up to 200ms.
- Add a dynamic-timbe filter to dynamically mix between two sound layers in the sound section of aaxs files.
- Implement legato mode for Emitters.
- Rework how gain, expression, pressure and soft-mode interact for the
final volume in the Instrument class.
- Fix a segmentation fault for an empty sound section of an aaxs file.
- Fix an improbable situation where _batch_atanps can cause an unaligned data problem for the SIMD accelerated versions of this function.
- Fix a possible use-after-free situation for the ALSA backend.
AeonWave (3.9.1) stable; urgency=high
- Much improved top-end for synthesizer buffer playback.
- Removed a number of sources of possible small audio glitches.
- Fix a situation where the pointer could get a value before the start of the buffer when generating noise.
- Explicitly set handle->ctx to NULL for PulseAudio when it is destroyed to prevent a segmentation fault.
AeonWave (3.9.0) stable; urgency=medium
- Implement a native PulseAudio backend.
- Support HTTPS streams when an OpenSSL compatible library is found.
- Delay volume clipping until the every last moment. This may require the emitters AAX_MAX_GAIN to be set to a higher value since the gain could get higher than AAX_MAX_GAIN for the final calculation.
- Limit the cutoff frequency range for frequency filters between 20Hz and 90% of half the sample frequency to prevent instability.
- Speed up of up to 100% for instrument generation.
- Speed up of the frequency filter by not filtering all of the delay effects buffer but only the no. samples that are required by the delay-effects.
- A complete rewrite of the reverb effect fixing a regression in the process.
- Complete rewrite of the non-graphical equalizer. Add support for a third cutoff frequency, making it a four-band equalizer. And add the option to define a filtering order for every section when using AAXS files.
- Add the option to assign the compressor to the final mixer stage.
- Ad the option to limit the spread of instruments which are wide-stereo.
- Fix a bug where in case of unaligned data for conversion functions the result was added to a possibly uninitialized buffer.
- Fix a regression for the compressor.
- Fix a few one-time memory leaks.
AeonWave (3.8.3) stable; urgency=high
- Use the Doppler factor to attenuate the sound moving towards the listener near the speed of sound.
- Make it possible to create a reproducible random sequence by specifying a random attribute for noise waveforms which defines the random seed.
- Fix a possible buffer out-of-bounds when using noise waveforms.
- Fix a problem where a release-time for the timed gain filter, which is shorter than a single update, would silence the sound.
AeonWave (3.8.2) stable; urgency=medium
- Switch to binary forward, and backward, compatible strong typed handles for compile time error detection.
- Add AAX_RANDOMNESS as an option to certain filters and effects, which generates a low-frequency noise as a waveform.
- Add support for 1st-order only reverb (with 4 reflection paths and a direct path).
- Fix a segmentation fault when specifying an unsupported protocol name.
- Limit writing of stream data to known safe paths such as the user home directory and the temporary directory.
- Fix sporadic crackling sounds caused by the timed-gain filter.
- Fix an artefact when the frequency filter cut-off frequency became too low.
AeonWave (3.8.1) stable; urgency=medium
- Fix a problem where calling aaxBufferReadFromStream with a handle which was not opened using one of the aaxDriverOpen functions could cause a segmentation fault.
AeonWave (3.8.0) stable; urgency=medium
- Make it possible to specify the parameter-type for tied properties, defaults to AAX_LINEAR.
- Enable reverb for the instrument code to support reverb the way MIDI dictates.
- Improved Reverb and make it possible to split the 1st order reflections section and the reverberation (nth order reflections) section between audio-frames. This will allow multiple instruments with different reverb levels to be combined in a single reverberation stage
- Add the option to define a AAX_DECAY_LEVEL greater than 1.0 for reverb, in which case the decay level will max out at 1.0 and the direct path will be reduced by 1.0/AAX_DECAY_LEVEL simulating an obstruction between the sound source and the listener.
- Add AAX_RANDOM_SELECT as a state option for the frequency filter.
- Add the option to slide logarithmically through the frequency range for frequency filters.
- Make the applying-mode of filters and effects using AAXS files default to 'append' rather than 'overwrite' if the mode attribute is not defined.
- Reorganize the order in which the gains are applied because in some cases the gain value used for envelope following was always maxed out.
- Prevent a double lock problem when assigning AAXS files to the mixer.
- Better handle registering objects to unregistered audio-frames.
- Prevent a segmentation fault when an object which is registered to another object gets deregistered from a completely different object.
- Fix a number of buffer data conversion bugs:
- Set the correct ring-buffer format after conversion, if required.
- Do not convert from 32-bit to 24-bit if it already is 24-bit
- Also convert to AAX_PCM24S_PACKED when requested.
- Fix occlusion. Due to a missing line the filters data-buffer was not set.
- Fix pitch-slide timing problems.
AeonWave (3.7.3) stable; urgency=low
- Speed up waveform generation and RMS calculation by a factor of 2 for AVX
- Speed up frequency filtering and re-sampling for systems that support FMA3
- Deprecate the release-factor attribute for timed-gain filters in favor of a release-time attribute. (Use AAXSstandardize for automatic conversion).
- Fix an issue where chorus could produce clicks on low pitch values.
- Reset timed filters and effects to their initial value when an emitter gets initialized again.
- Bump version numbers of filters and effects that now support timed operation.
- Make sure that filters and effects don't run if the parameter selection doesn't have an effect anyhow.
AeonWave (3.7.2) stable; urgency=low
- Add the option to use timed-transition as an alternative to envelope-following or waveform-shapes for filters and effects.
- Add the option to define an <fm/> section in addition to a <sound/> section specially for improved synthesizer modes.
- Fix a read one sample beyond the buffer length for convolution.
- Various updates to quite a number of instruments.
AeonWave (3.7.1) stable; urgency=low
- Fix a typo which caused the forward gain to be zero when it wasn't explicitly set after retrieving the filter from the emitter.
- Fix a division by zero for IMA4 encoded WAV files.
- Fix tied parameter math operators. Speedup when it's basically a no-op.
- Fix a harmless void reported error when the mixer is initialized: _aaxGetCapabilities: Invalid or NULL handle type at initialization
- Fix a harmless pointer mismatch when destroying buffers using the AeonWave class.
- Fix using shared non-static data for multiple emitters when using ISO9613 distance attenuation.
AeonWave (3.7.0) stable; urgency=low
- Add an 80's FM Synthesizer style playback mode for AAXS defined instruments.
- Add a 70's Arcade Game Console playback mode for AAXS defined instruments.
- Fix initial delay support for the dynamic-pitch-effect.
- Fix combining a sound file and one or more waveforms.
- Fix support for a combination of AAX_RELEASE_FACTOR and AAX_(INVERSE)_ENVELOPE_FOLLOW
AeonWave (3.6.7) stable; urgency=medium
- Speed up Brightness and Harmonic Intensity handling for instruments.
- Vorbis: fix CVE-2019-13217, -13218, -13219, -13220, -13221, -13222, -13223
- Disable stream ICY support for now for security reasons.
AeonWave (3.6.6) stable; urgency=low
- Completely updated default instrument set.
AeonWave (3.6.5) stable; urgency=medium
- Implement support for sampled-release after an AAX_STOP message.
- Handle looping as specified in the smpl chunk of WAV files.
- Handle WAV files with a data-size of 0 gracefully to prevent a crash.
- Prevent a crash when calling aaxMixerGetSetup with NULL as a config parameter.
- Fix a case where specifying repeat="max" in AAXS files automatically resulted in an envelope following timed-gain filter.
- Fix HRTF calculation, where the time delays of front-back and left-right where switched which makes a fairly big difference in the perception.
- Fix a possible incorrect playback pitch for files included in the sound section of an AAXS file.
- Fix support for Brownian noise.
AeonWave (3.6.4) stable; urgency=medium
- Switch to using the data-buffer handling code when handling stream ICY data to get much safer stream data handling.
- Use the fastest path for waveform generation which might or might not be SIMD
- Get ARM support up to par with x86 support again, and add support for VFPv4.
- Speed up the bit-crusher filter for SSE2 and NEON systems by a factor of two.
- Fix the bit-crusher filter for non-accelerated architectures.
- Fix a streaming problem where the pdmp3_info function was always used, even with libmpg123 installed.
AeonWave (3.6.3) stable; urgency=medium
- 4x increase in waveform generation speed.
- Fix a buffer overflow when capturing with ALSA
AeonWave (3.6.2) stable; urgency=medium
- Reduce waveform generation overhead.
- Add the option to retrieve the system capabilities by calling aaxMixerGetSetup with AAX_CAPABILITIES as the type parameter.
- Fix a possible read beyond a buffer length when handling AAXS files.
- Fix OGG streams, a missing OGG framing-bit is not a reason to discard a stream as invalid.
AeonWave (3.6.1) stable; urgency=high
- Fix a massive buffer overflow when both reverb and phasing or chorus or flanging are defined for an audio frame. This was discovered by valgrind.
AeonWave (3.6.0) stable; urgency=medium
- Further work to support General MIDI 2.0
- Combine phasing, chorus and flanging into the chorus effect.
- Implement frequency-filtering of the delayed signal for phasing and chorus.
- Introduce envelope-following timed gain filters (with exponential decay).
- Allow one to override the shared data directory in the configuration file.
- Improvements to the handling of mangled audio-streams and harden the ICY
stream data handling code.
- Fix a buffer issue where small parts of the buffer where added twice when
the frequency filter and the flanging effect were applied to an audio-frame.
- Fix a hardly noticeable sound artefact when the re-sampling factor == 1.0
- Fix reverb, the volume of the delayed signal was handled improperly.
- Small code speedups.
AeonWave (3.5.7) stable; urgency=medium
- Support URL redirects for the HTTP protocol.
- Skip frequencies which are higher than the Nyquist frequency when
synthesizing sounds.
- Add dithering when converting to a lower number of bits in the final mix.
- Support General MIDI 2.0 specifications, add support for setting modulation, chorus and frequency filter parameters in the instrument class. Do not apply many effects to the drum channels.
- Allow setting a default panning value in the info section of AAXS files.
- Fix a bug where an incorrect data pointer was freed when the code decided to swap the low-frequency part and high-frequency part of the equalizer.
- Leave the loop when finished destroying the buffer in the AeonWave class, preventing a possible segmentation fault.
- Fix frequency filter cutoff behavior for > 12dB/Oct filters, the coefficients
where not selected properly.
- Fix the naming of aaxSensorGetMatrix64 and aaxAudioFrameGetMatrix64.
AeonWave (3.5.6) stable; urgency=medium
- Fix a segmentation fault in case of a (intentionally) corrupt AAXS file.
Parse the socket or file reported size to the binary-format so the number
of samples (with pcm8u samples) matches the number of bytes it reports back.
- Add a few new instruments.
AeonWave (3.5.5) stable; urgency=low
- 3x to 8x speedup of batched RMS calculation.
- Speed up of about 25% for frequency filters.
- Massive speedup for audio-frames with no active sound emitters.
- Allow Bessel filters with orders other than 12dB/Oct in AAXS files.
AeonWave (3.5.4) stable; urgency=high
- Add support for the fma3 and fma4 instructions.
- Fix a bug where data of filters or effects could be accessed when it
was freed already.
This was a leftover of the data swapping change.
- Improve the way filters and effects swap their data structures.
AeonWave (3.5.3) stable; urgency=high
- Implement after-touch using pitch in the Instrument class.
- Fix a number of memory related issues as reported by valgrind.
- Switch from swapping data structure-pointers to copying the contents of the
data structure when assigning filters and effects. This prevents that the
filter or effect destroy-function will destroy a data structure which might
still be in use by a thread.
AeonWave (3.5.2) stable; urgency=low
- Improve various instrument configurations.
- Speed and accuracy improvements for volume ramps (also used by the timed-gain filter).
- Fix an audible glitch when resetting (re-initializing) emitters while playing. Most noticeable for MIDI file playback.
AeonWave (3.5.1) stable; urgency=low
- Improve various instrument configurations.
- Fix another issue with delay effects.
- Remove a debugging statement.
AeonWave (3.5.0) stable; urgency=medium
- Add the option to set the location of the shared-data directory at runtime
using the new aaxDriverSetSetup function.
- Add a C++ instrument header file which can be used to simulate a single,
complete, musical instrument. And use it for the MIDI playback code.
- Re-initialize the emitter after it is set to suspended. This makes the
emitter ready for the next playing state.
- Fix a possible race condition when using tied properties.
- Fix some issues with the timed gain filter and timed pitch effect.
- Fix an issue when two registered audio-frames both use a delay effect.
- Add the option to define the loop staring point and loop end point in AAXS
files that include a file in the sound section.
- Allow AAXS defined filters and effects to be set as optional, in which case
they will be omitted on systems which are low on resources (CPU and memory).
- AAXS generated buffers will now use mip-mapping to extend the pitch range
beyond a pitch level of 32.
AeonWave (3.4.0) stable; urgency=low
- Add support for the ISO9613-1 specified distance attenuation model.
- If the ISO9613-1 distance model is applied, and the velocity effect was
not yet set, then the corresponding speed of sound will be set automatically.
- Add a RingModulator effect, mainly to be able to simulate atmospheric
anomalies for wireless communications. But useful for other purposes too.
- If the source has stopped then finish the current time envelope and stop,
otherwise an envelope with repeat set to max will never stop until the
emitter is set to processed.
- Remove debugging output from OGG streaming code.
AeonWave (3.3.0) stable; urgency=low
- Automatically convert an effect name like "effects/nature/birds" to a full
path name using APP_DATA_DIR when it is parsed to the buffer retrieving
function of the AeonWave class.
- Add a Param class which encapsulates a float variable and which can
be tied to a DSP parameter. Every time the param gets a new value
assigned the DSP parameter will be updated too.
- Fix a small problem with stopping an emitter which has a timed-gain
envelope defined with one of the time settings to "inf". They should now
finish properly after the emitter is requested to stop playing.
- Overhaul of the C++ classes to make them C++11 compliant.
- Remove support for an ancient way of handling config files.
- Prevent a crash when the state of the timed-gain filter or timed-pitch
effect is not set before it is registered the the sensor, audioframe or
emitter.
AeonWave (3.2.3-1) stable; urgency=low
- Fix AAX_SHARED_DATA_DIR support for Linux.
- Add and improve the shared instruments and effects.
- There where no code changes.
AeonWave (3.2.3) stable; urgency=low
- Fix a missing offset(enum aaxType) error for the AeonWave class.
- Fix a problem with AAX_SHARED_DATA_DIR support for Windows.
AeonWave (3.2.2) stable; urgency=medium
- Add the AAX_PCM24S_PACKED format for 3-byte packed 24-bit samples.
AAX_PCM24S is used for 32-bit encoded 24-bit samples.
- Fix 24-bit packed PCM data handling.
- Fix a possible stream synchronization problem at the start of streams
that support ICY meta-data song information.
AeonWave (3.2.1) stable; urgency=low
- Improve timing for some backends by using a regular interval method
instead of waiting just a number of milliseconds from the time of calling.
This mostly affected OSS and SDL backends.
- Move the mixing code from the callback to the backend-thread for the SDL
backend reducing the time spent in the callers code to a mere memcpy.
- Enable the SDL DirectSound backend for Windows XP.
- Rename the angular filter (which was lost in translation) to directional
filter. For backwards compatibility the angular name is still being
recognized internally and the library is binary compatible with previous
versions.
AeonWave (3.2.0) stable; urgency=high
- Add SDL audio support for backends AeonWave does not support natively.
This potentially opens up the option to use AeonWave on MacOS and BSD.
SDL 2.0.5 or later is required.
- Allow retrieving the data directory which AeonWave uses to store shared data
like preset files by calling aaxDriverGetSetup(cfg, AAX_SHARED_DATA_DIR)
- Allow defining AAX_ENVELOPE_FOLLOW or AAX_INVERSE_ENVELOPE_FOLLOW alongside
the waveform type to control the noise behavior when setting the state for
the bit-crusher filter. The default behavior is still a constant noise level.
- Fix a number of potential buffer overflows when enumerating the available
backend interfaces.
- Fix a number of one-off memory leaks.
AeonWave (3.1.2) stable; urgency=low
- Deliver on the promise that one can add a named, but empty, buffer in
case aaxBufferReadFromStream fails when calling buffer() from the
aeonwave class.
- Add the bit-crusher filter to simulate (communication line) sound degradation.
AeonWave (3.1.1) stable; urgency=medium
- Add the aaxPlaySoundLogo() function to play back the official sound
logo at the requested device.
- Add the option to mark an LFO based filter or effect 'stereo' for
audio-frames.
- Fix volume glitches for dynamic-gain and timed-gain filters
- Account for the fact that pink-noise and Brownian-noise both have a lowest
cut-off frequency of 100Hz. Which can be used to create continuous noise
instead of noise with possible volume glitches.
- Fix a case where LFO filters and/or effects could be initialized improperly
for use with audio-frames.
AeonWave (3.1.0) stable; urgency=high
- Explicitly allow GPL version 2 and GPL version 3 applications to use
the library.
- Add distance filter frequency response.
- Speed up waveform generation quite a bit.
- Turn the reverb effect into a true 3d effect.
- Add the option to register the reverb effect to audio-frames.
- Due to memory considerations they only support up to large room sizes,
any reflections with a larger delay will be ignored.
- Add the option to define audio-frames as indoor by setting AAX_POSITION
to AAX_INDOOR when calling aaxAudioFrameSetMode. It is possible to combine
AAX_INDOOR with AAX_RELATIVE or AAX_ABSOLUTE (the default when omitted).
This allows for indoor sound propagation where every audio-frame represents
a room or a section of a room. Reverb and frequency filters can be used
to simulate the properties of the room section defined by the audio-frame.
By specifying the audio-frame indoor, sound will not become directional until
it arrives at the scene of the listener.
- Add the option to define occlusion object parameters to the volume-filter
and reverb-effect, which will influence the sound properties of the direct
path of the sound.
- Harden the matrix multiplication code so it will be more correct in more
situations. A smaller update-rate than the refresh-rate could cause emitter
and parent-frame data to be out of sync. Also absolute positions are handled
better now.
- Fix a mistake in 32-bit matrix calculations caused by copying just one
row instead of all rows.
- Add support for a static parametric-equalizer within the <sound/> section
of AAXS files.
- Increase the HTTP stream timeout value. The default was too low.
- Protect against de-registering an unregistered audio-frame or emitter.
AeonWave (3.0.11) stable; urgency=medium
- Fix a speed regression for matrix multiplications.
- Add the 'auto-sustain' option for filters and effects which calculates the sustain time by subtracting the logarithmic frequency value multiplied by the auto-sustain value from the original value.
AeonWave (3.0.10) stable; urgency=medium
- Considerably speed up envelope following calculation.
- Add the option to define the duration of the waveform generated by the sound section of an AAXS file. The minimum duration is 1 second.
- Allow pitch to be set as an attribute for frequency related parameters in filters and effects of AAXS files. The frequency then becomes pitch multiplied by the frequency defined in the sound section.
- Protect against unrecognized filter or effect type definitions in AAXS files.
- Fix audio device detection on Linux if Pulse Audio is inactive.
- Fix the case where filters in the sound section of AAXS files could only be 12dB/Oct.
AeonWave (3.0.9) stable; urgency=low
- Prevent an endless loop for mangled WAV files.
- Waveforms, filters and effects in the sound section of an AAXS file now are processed in the order of appearance.
- Fix static frequency filter anomalies at the loop points of AAXS defined
waveforms.
AeonWave (3.0.8) stable; urgency=low
- Fix a problem for AAXS buffers added to AudioFrames.
- Fix detecting directories with a dot in the name as not being a remote host. e.g.: sound.dir/file.mp3
AeonWave (3.0.7) stable; urgency=low
- Fix a problem where large AAXS files where truncated.
- Reorganize the filter and effect cleanup for emitters, audio-frames and the
sensor.
- Add support for a static frequency filter and a static distortion effect
within the <sound/> section.
AeonWave (3.0.6) stable; urgency=low
- Postpone initialization of AAXS filter and effect code for emitters to
make sure they will be set after initializing the mixer which could change
parameters like the refresh rate. As a bonus it is now possible to stream
different AAXS buffers one after the other.
- Reduce getaddrinfo timeout considerably by specifying ai_family = AF_INET
- Fix a bug where a suspended configuration could not be resumed.
AeonWave (3.0.5) stable; urgency=medium
- Add the aaxGetFrequencyFilterTypeByName function.
- Restructure the filter and effects code a bit to make it easier to remove
allocated data.
- Add function to the C++ support class to get the type, waveform_type,
frequency_filter_type and distance_model by name
AeonWave (3.0.4) stable; urgency=medium
- Add the option to repeat the timed-gain filter for a specified number of
times. This could be useful for repeating sounds like alarm and clock sounds.
If a timed-pitch effect is present for the same emitter then it will repeat
at the same moment the timed-gain filter restarts.
- Fix the buffer length when a file is specified for the sound section of an
AAXS file.
AeonWave (3.0.3) stable; urgency=medium
- Fix playback support to MP3 files.
- Support WAV files with LIST ADTL, BEXT, CUE and SMPL tags
- Allow specifying a file attribute in the sound section of AAXS files.
- Allow processing, pitch, ratio and staticity to be attributes instead of
sub-nodes of the XML waveform node for a shorter notation of the sound
definition.
- Fix a possible segmentation fault when a requested WAV file was not found.
AeonWave (3.0.2) stable; urgency=medium
- Add a function to add a buffer to the dsp class.
- Fix a bug in the matrix code which could create a segmentation fault.
AeonWave (3.0.1) stable; urgency=medium
- Add a function to get the distance model by name.
- Use the proper distance model if type is DISTANCE for AAXS defined filters.
- Add functions to add a buffer object to the AeonWave and Frame classes.
- Add the option to retrieve the original AAXS file when calling
aaxBufferGetData when the buffer format is AAX_AAXS16S or AAX_AAXS24S.
- Fix a few bugs for unusual situations in the new streaming code.
AeonWave (3.0.0) stable; urgency=low