Skip to content

Latest commit

 

History

History
189 lines (155 loc) · 9.5 KB

CHANGES.md

File metadata and controls

189 lines (155 loc) · 9.5 KB

Changes

Version 0.21 (Next Version)

  • New PolyBLEP oscillator opcodes poly_saw, poly_saw_hz, poly_square, poly_square_hz, poly_pulse and poly_pulse_hz.
  • Noise functions now accept seed as u64 instead of i64.
  • sine_phase, ramp_phase and ramp_hz_phase opcodes were removed: there is a new builder notation for setting the initial phase, for example, sine().phase(0.0).
  • New builder notation for setting noise generator seed, for example, noise().seed(1).
  • New opcode biquad_bank().
  • BiquadBank parameters for channel i are now set with the syntax Setting::biquad(...).index(i).
  • New Wave methods mix and mix_channel.
  • New builder notation for setting envelope sampling interval, for example, lfo(|t| exp(-t)).interval(0.01).
  • New Wave methods append, amplify and retain.

Version 0.20

  • Net::chain is more robust now.
  • Ring buffer component in the module ring.
  • New method Net::fade_in for adding a node with a fade-in.
  • Net::pipe is now Net::pipe_all and can no longer panic.
  • Net::pipe_op is now Net::pipe, Net::bus_op is Net::bus, Net::bin_op is Net::binary, Net::stack_op is Net::stack, Net::branch_op is Net::branch, and Net::thru_op is Net::thru.
  • New methods Net::can_pipe, Net::can_bus, Net::can_binary, Net::can_stack, Net::can_branch, Net::can_thru, Net::can_sum and Net::can_product.
  • New methods Net::sum and Net::product.
  • Net::pipe_input and Net::pipe_output can no longer panic.
  • New method Net::ids for iterating over contained node IDs.
  • New method Net::contains for checking existence of a node.
  • New methods Net::source and Net::output_source for retrieving network edge information.
  • New methods Net::inputs_in and Net::outputs_in for querying contained node arity.
  • New methods Net::set_source and Net::set_output_source for setting network edges.
  • New type net::NetError and method Net::error for detecting errors. Cycles no longer cause a panic, but trigger an error condition instead.

Version 0.19.1

  • Fixed no_std support.

Version 0.19

  • Added choice of interpolation algorithm to AtomicSynth.
  • New opcode sine_phase.
  • Opcodes delay and tap_linear now support zero sample delays.
  • New method Net::crossfade for replacing a unit with a smooth crossfade.
  • Clarified latency: it only applies to involuntary causal latencies.
  • AdaptiveTanh is now generic Adaptive distortion with an inner shape. To migrate, try Adaptive::new(timescale, Tanh(hardness)).
  • Clip shape now has a hardness parameter. Clip(1.0) to migrate.
  • SvfCoeffs is now SvfCoefs.
  • Implemented denormal prevention for x86 inside feedback loops.
  • The resonator now accepts a Q parameter instead of bandwidth in Hz. To migrate, Q = center / bandwidth.
  • Feedback biquads and dirty biquads by Jatin Chowdhury.
  • Sine oscillator has now generic inner state. To migrate, use Sine<f32> if speed is important or Sine<f64> if steady maintenance of phase is important.
  • Non-bandlimited ramp node with opcodes ramp, ramp_hz, ramp_phase and ramp_hz_phase.

Version 0.18.2

  • 64-bit atomics were removed in order to support 32-bit targets.
  • Fixed no_std support.

Version 0.18.1

  • Denormal flushing was removed for now.

Version 0.18

  • This release involves a major rewrite and many changes.
  • 64-bit sample support is gone. All samples are now f32.
  • The 64-bit prelude presents a 32-bit interface now, with 64-bit internal state.
  • All types and traits with 32/64 suffix are replaced with the 32-bit version with the suffix removed.
  • Explicit SIMD support in block processing via the wide crate.
  • no_std support can be enabled by disabling the std feature.
  • Buffers for the process method have been rewritten. Both stack and heap allocation is supported.
  • Settings have been rewritten, to make them compatible with the AudioUnit system.
  • Waveshaping is done using a trait now. Remove Shape:: prefix from shapes to migrate, except for AdaptiveTanh, which is created using AdaptiveTanh::new.
  • The Atan shape was tweaked to return values in -1...1 while retaining a slope of 1 at the origin.
  • Asymmetric follow filters are now explicitly declared: follow((a, r)) is now afollow(a, r).
  • Functions corresponding to operators are now available as an option, for example, A >> B can now be written pipe(A, B). What used to be pipe etc. now has an i suffix, for example, pipei.
  • rnd function is now rnd1.
  • hash function is now hash1. Added new hash function hash2.
  • Wavetable oscillator now accepts an Arc<Wavetable> in the constructor.
  • Denormals are now flushed to zero in feedback loops.

Version 0.17

  • Wave32/64: silence is now zero.
  • New opcode impulse.
  • Attempted optimization of reverb delay times in the example optimize.
  • New opcodes node64 and node32 for converting an AudioUnit into an AudioNode.
  • New reverb opcodes reverb2_stereo and reverb3_stereo.
  • New opcodes allnest and allnest_c for nested allpass filters.
  • New opcodes tap_linear and multitap_linear for delay lines with linear interpolation.
  • High frequency damping parameter was added to reverb_stereo. Damping used to be hardcoded to 1.
  • New opcode rotate for rotating a stereo signal.

Version 0.16

  • AudioNode now requires Send and Sync.
  • Feedback units Feedback64 and Feedback32.
  • Shape::Atan was contributed by Serdnad.
  • New opcode resynth for frequency domain resynthesis.

Version 0.15

  • Snoop node for sharing audio data with a frontend thread.
  • Meter smoothing parameters are now timescales specified in seconds.
  • Shape::SoftCrush was tweaked.
  • New adaptive distortion mode Shape::AdaptiveTanh.
  • Oversampling now employs a minimum phase halfband filter.
  • Net64Backend and Net32Backend are now called NetBackend64 and NetBackend32.
  • Sequencer64Backend and Sequencer32Backend are now called SequencerBackend64 and SequencerBackend32.
  • Slot32/64 is a real-time updatable audio unit slot with crossfading between units.
  • "Hammond" wavetable, which emphasizes the first three partials.
  • Reverb time calculation was tweaked to take into account room size.

Version 0.14

  • New math functions sqr_hz and tri_hz for non-bandlimited square and triangle waves.
  • Lorenz and Rössler chaotic system oscillators as opcodes lorenz and rossler.
  • swap_stereo is now generic reverse, which reverses channel order.
  • Resonant two-pole filter by Paul Kellett as bandrez and lowrez.
  • Sample-and-hold opcodes hold and hold_hz.
  • Fixed inbuilt waveform phases.
  • Reduced number of all-pass stages in phaser to 10.
  • Sequencer add and add_duration are now push and push_duration.
  • Reseting a node and setting its sample rate are now two distinct operations.
  • Sequencer can now have a real-time safe backend.

Version 0.13

  • Fade curves for Sequencer events. To migrate, use the curve Fade::Smooth.
  • Net32/64 now operates on stable node IDs of type NodeId. Other improvements.
  • swap opcode is now swap_stereo, to avoid possible conflicts with std::mem::swap.
  • New method AudioNode::allocate for preallocating everything.
  • Identity function has been renamed from id to identity, to match the standard library.
  • Setting system MPSC channels were async by mistake; they are now blocking.
  • Net32/64 can now have a real-time safe backend.

Version 0.12

  • More settings implemented.
  • Signal routing is now an exclusive operation, for practical reasons.
  • Granular synthesizer. FunUTD is now a dependency.
  • Block rate adapter that converts calls to block processing.
  • New random function rnd2 from Krull64 output stage.

Version 0.11

  • Composable setting system for making it easier to control basic settings in real time.
  • system opcode was renamed update.
  • New waveforms, organ and soft saw.
  • New envelope opcodes with any number of inputs: envelope_in and lfo_in.

Version 0.10

  • New opcode resample for variable speed cubic resampling.
  • Wave32/64 improvements. Symphonia integration for reading audio files.
  • Tagged constants were removed. They were not scaleable.
  • Callbacks were removed from Sequencer32/64 and Net32/64. Will reimplement if requested.
  • The follow filter now jumps immediately to the very first input value.

Version 0.9

  • detector was removed (it did not work).
  • New opcode biquad for an arbitrary biquad filter.
  • Net32/64 method add was renamed push (it conflicted with the operator implementation).
  • Graph syntax was implemented for Net32/64. They can also be combined with components from the preludes.

Version 0.8

  • semitone is now semitone_ratio.
  • New opcodes feedback2 and fdn2, which include extra feedback loop processing. The extra processing is not applied in the feedforward path.
  • Wetness argument was removed from reverb_stereo. Room size argument was added. An average room size is 10 meters. To migrate, replace reverb_stereo(wet, time) with wet * reverb_stereo(10.0, time) & (1.0 - wet) * multipass().
  • goertzel is now detector.
  • chorus gain was adjusted.
  • flanger was tweaked.
  • New opcode system with a user provided callback. See the sound module for an example.
  • Ability to replace nodes in Net32 and Net64. Improved chaining method.
  • Sequencer has been replaced with Sequencer32 and Sequencer64.
  • Au has been removed.
  • Callback functionality was added to the sequencer and network components.
  • Ability to jump in time was added to the sequencer.