- Increase MSRV to 1.76
- Greatly improved the ConvolverNode performance for large impulse responses
- Fix AudioBufferSourceNode reverse playback
- Implement sub-sample AudioBufferSourceNode stitching
- AudioBufferSourceNode: handle reverse playback and looping
- AudioBufferSourceNode: handle sub-sample stop/duration times
- AudioBufferSourceNode: fix handling of out of bound offsets
- Breaking: MediaRecorder constructor now requires options (e.g. mime type)
- Added MediaRecorder::is_type_supported to check if recording is supported for this mime type
- Fixed the up/down-sampling of the WaveShaperNode
- Fixed an infinite loop in AudioBufferSourceNode when using out-of-bound loop start/end values
- Fixed AudioBufferSourceNode crashing or restarting on certain loop value changes
- Fix excessive buffer size (latency) on Android
- Fixed a crash for AudioWorkletNode with zero outputs
- Increase MSRV to 1.71
- Changed: AudioContext::render_capacity now returns owned AudioRenderCapacity instead of ref
- Added AudioParamValues.keys iterator
- Fix regression: ensure all async fns return a Send + Sync Future object
- Breaking: the ScriptProcessorNode::set_onaudioprocess no longer takes a ref to the event
- Fixed a panic for multi-channel output with the ScriptProcessorNode
- Fixed an issue when calling suspend/close on an already suspended context
- Changed: renamed AudioNode::connect_at to connect_from_output_to_input
- Changed: renamed AudioNode::disconnect_from to disconnect_dest
- Added AudioNode::disconnect_output and disconnect_dest_from_output(to_input)
- Fix: AudioNode::disconnect() would clear all connections instead of only outgoing ones
- Fix: A panic is now thrown when attempting to disconnect an unconnected node
- Changed: enforce minimum 2k and maximum 384k Hertz sample rate for audio contexts
- Added the ScriptProcessorNode
- Fix: all events are now dispatched for OfflineAudioContext
- Fix: BiquadFilter/IIRFilterNode freq response return NaN for invalid frequencies
- Fix: do not allow length 0 for OfflineAudioContext and AudioBuffer
- Breaking: ChannelConfigOptions is renamed to AudioNodeOptions
- Fix WaveShaperNode: do not emit silence for non-centric curve
- Fix DynamicsCompressorNode: handle channel constraints
- Fixed error messages and constraints for DestinationNode and ChannelSplitter/MergerNode
- Changed: the AudioContext will continue playing if it is dropped (use
close()
instead) - Apply AudioParamDescriptor validations
- Apply limits of compound AudioParams
- Fix AudioParam rounding errors
- Fix k-rate AudioParams not always delivering constant value
- Fixed a panic while rendering AudioParams with dynamic lifetimes
- Disallow constructing an AudioBuffer with length zero
- Breaking: the AudioProcessor trait is now superseded by AudioWorkletProcessor
- Breaking: the RenderScope struct is renamed to AudioWorkletGlobalScope
- Added message port functionality to AudioWorkletNode and AudioWorkletProcessor
- Added OfflineAudioContext event handlers
- Added validation of AudioScheduledSourceNode start/stop actions
- Fixed a bug with min/max decibels in the AnalyserNode
- Fixed panic in AudioBufferSourceNode when duration exceeds buffer length
- Add
Debug
implementation for all public facing items - Fix: return proper channelCountMode for StereoPannerNode
- Added MediaTrackConstraints.channelCount for multi-channel microphone input
- Fix: needless upmixing of AudioNode input channels for
max
andclampedMax
interpretation - Fix: AudioParam value not returned correctly before rendering has started
- Fix: eagerly panic for invalid AudioNode settings in constructors
- Unified panic messages to format
<JsErrorType> - <Actual message>
- Unified README.md and crate level docs
- Fix: minimize floating point errors in AudioBufferSourceNode currentTime calculation
- Fix: AudioParam automationRate does not instantly update on the control thread
- Fix: AudioParam better handling of non finite values in arguments
- Fix: Panic at Analyser initialization for some combinations of min/maxDecibel
- Fix BaseAudioContext onChangeState to signal device readiness
- Fix OfflineAudioContext::state is not updated when calling suspend and resume
- Fix AudioContext resume_sync, suspend_sync, close_sync now block until completion
- Added async versions of AudioContext suspend/resume/close
- Assert
AudioScheduledSourceNode
start and stop time values are valid - Added BaseAudioContext
clearOnstatechange
and fix some event type names
- Fix AudioWorkletNode custom output channel counts
- Added async OfflineAudioContext methods: startRendering, suspend and resume
- Added sync OfflineAudioContext methods: suspend
- Added BaseAudioContext::onStateChange
- Breaking:
OfflineAudioContext::start_rendering_sync
takes&mut
instead ofself
- Fix panic in AudioBufferSource when supplying buffer in options
- Fix panic in Oscillator when supplying periodic wave in options
- Fix panic in AudioContext for really low sample rates
- Support up/down-mixing of all speaker layouts with 6 channels or less
- Disallow channel merger/splitter configurations with more than 32 channels
- Added the AudioWorkletNode and AudioWorkletProcessor interfaces
- Added stereo-to-stereo panning for PannerNode in EqualPower mode
- Aggressively release resources of 'orphaned' audio nodes
- Tuned the volume of stereo-to-stereo panning for PannerNode in HRTF mode
- Added
context.run_diagnostics
for debugging purposes - Fixed a panic that could occur during audio graph booting (flawed
is_active
check) - Fix:
disconnect
would disassociate an AudioNode from its AudioParams - Fix: properly clamp PannerNode rollOffFactor according to the distance model
- Fix compilation on targets that are not x86/aarch64
- Added the ability to run benchmarks locally with
criterion
- Disable floating point denormals in audio processing via processor flags
- Do not spawn a garbage collector thread for an OfflineAudioContext
- AudioParam now derives
Clone
- Fix: panic when creating and dropping PannerNodes
- Improved performance of setting panning mode to HRTF
- Breaking: many AudioNode setter methods now require
&mut self
instead of&self
- Fix: all audio node settings are now applied in order in the audio graph
- Fix: render thread would crash when a PannerNode is removed
- Fixed and improved device ids for audio input/output devices
- Added current playhead position for AudioBufferSourceNode
- Fix: clamp to number of output channels to 32 even if the hardware supports more to prevent runtime panics
- Fix: prevent a render thread panic if the audio graph is not fully initialized yet
- Fix: rename AudioDestination max_channels_count to max_channel_count
- Fix: AudioBufferSourceNode is now Send + Sync
- Change AudioProcessor::onmessage signature to prevent deallocations
- Add garbage collector thread as sidecar of the render thread to handle some deallocations
- Fix for some audio node settings being applied out of order
- Fix setting the ChannelCountMode for the OfflineAudioContext destination node
- Fix and extend AAC/M4A/ALAC decoding
- Fix broken MediaElementSourceNode for multi-channel output
- Updated Minimum Supported Rust Version (MSRV) to 1.70
- Avoid allocations in Waveshaper node for real-time safety
- Improvements for the JACK audio host
- Document ALSA limitations for low latencies, and add fallback to examples
- Improve real-time safety of the render thread by using bounded channels
- Improve our usage of atomics
- Update to Rust edition 2021
- Implement MediaRecorder API
- AudioContext now uses default stereo channels
- Fix issue with AudioBufferSourceNode playback rate and detune
- Rename
enumerate_devices
toenumerate_devices_sync
- Don't panic on unavailable input/output device selection
- Implement part of the MediaStreams API (MediaStream, MediaStreamTrack)
- Implement part of the MediaDevices API (getUserMedia, enumerateDevices)
- Changed enumerateDevices to also include input devices
- Microphone input can now specify desired deviceId
- Added MediaStreamTrackAudioSourceNode
- Fixed windows build by removing termion from dev-dependencies
- Improved AnalyserNode (performance and correctness)
- Fixed microphone input on Raspberry Pi
- Fixed overriding channel config for PannerNode
- Head Related Transfer Function (HRTF) panning mode
- Implemented event handlers
- Prepare API for variable render quantum sizes
- Added the "none"
sinkId
, render audio graph without emitting to speakers - Fix
ConvolverNode.set_normalize
to take&self
, not&mut self
- Added AudioRenderCapacity functionality
- Added sinkId functionality to AudioContext (specify audio output device)
- Renamed
ChannelConfigOptions.{mode -> count_mode}
- Added ConvolverNode (mono only)
- GainNode, BiquadFilterNode, AudioParam performance improvements
- AudioParam computed values array now contains only a single value when k-rate or no automations scheduled
- DelayNode supports sub-quantum delay
- IIRFilterNode and BiquadFilterNode can handle multi-channel inputs
- Various performance improvements
- Added DynamicsCompressorNode
- Added
cubeb
as an alternative audio backend
- Implemented MediaElement and MediaElementSourceNode
- Improved performance of AudioBufferSourceNode and DelayNode
- Make AudioContext and OfflineAudioContext
Send
andSync
- Relaxed the 'balanced' and 'playback' latency - to run smoothly on RPi
- Fixes on clamping and value calculations of AudioParams
- Can now change automation rate of an AudioParam on the fly
- Implemented the concept of 'actively processing' for AudioNodes
- Change sample rate type to plain f32
- Remove namespacing of buffer, audio_param and periodic_wave
- Reduce AudioRenderQuantum public API surface
- Remove ConcreteBaseAudioContext from public API docs
- Added baseLatency and outputLatency attributes
- Audio processor callback now has access to AudioWorkletGlobalScope-like env
- Performance optimization for sorting large audio graphs
- Use default sample rate for output devices instead of highest to prevent insane values
- Fixed incorrect channel mixing for AudioNode input buffers
- Implement BaseAudioContext state
- AudioContext can now change the number of output channels while running
- Microphone input stream is now configurable
- Microphone can properly pause, resume and close
- Consistently use
usize
for channels, inputs, lengths
- Simplify AudioNode's required channel methods
- Apply all channel count/mode/interpretation constraints
- AudioContext can now update channel count while playing
- Improve AudioContext constructor
- Validate more input values for AudioParam events
- AudioBufferSourceNode can now resample
- Add MediaStreamAudioDestinationNode
- Performance improvement when no PannerNodes are present
- More consistent method/argument names
- Added benchmark program
- Removed MediaElement and MediaElementSourceNode for now, will reimplement
- Allow method chaining on AudioParams
- Some fallible methods will now panic instead of returning a Result
- Sub sample scheduling for OscillatorNode
- Implement AudioContext.close to free resources
- Rename BaseAudioContext trait and concrete type
- Fix spec deviations for node methods and constructor options and defaults
- Rename some functions to
_sync
to denote they do not return a Promise
- Implemented context.decodeAudioData
- New media decoder using symphonia crate (with MP3 support)
- WaveShaper fixes
- Spec compliance: float for sample rate, thread safe nodes, naming of nodes
- Support cyclic audio graphs with DelayNode acting as cycle breaker
- Greatly improved AudioBufferSourceNode (sub quantum scheduling, more controls, performance)
- Added cone gain functionality for PannerNode
- Improved performance of audio graph rendering
- Support all AudioParam automation methods
- Change AudioProcessor API to match spec better
- Support AudioParam.exponentialRampToValueAtTime
- Fix runaway memory and CPU usage due to unreleased nodes from graph
- Added IirFilterNode
- Added AudioContextOptions
- Support more audio mixing modes
- Added WaveShaperNode
- Added StereoPannerNode
- OscillatorNode improvements
- Added BiquadNode