tune

Make xenharmonic music and create synthesizer tuning files for microtonal scales.

MIT License

Downloads
79.8K
Stars
121
Committers
3
tune - Isomorphic keyboard, automatic color schemas Latest Release

Published by Woyten 11 months ago

  • New: Render a hexagonal isomorphic keyboard
    • Press Alt+Y to toggle through compatible keyboard layouts
    • Press Alt+K to toggle through different keyboard types
  • New: Find automatic color schemas for compatible keyboard layouts
  • New: Full browser support via WASM and WebGL or WebGPU
  • Improvement: Support Mavila[9] and Porcupine[8] temperaments
  • Change: Rewrite / flatten the profile structure
tune - Improved stage nesting

Published by Woyten 11 months ago

  • Improvement: Add BufferWriter::{process, read}
  • Improvement / Change: Magnetron::{process, process_nested} is now a combination Magnetron::{prepare, prepare_nested} and BufferWriter::process
  • Improvement / Change: Homogenize BufferWriter::read_x_write_y
    • Add out_level / out_levels argument in every function
    • out_level / out_levels receives an Option<f64> defaulting to an amplitude of 1.0 if absent
  • Improvement: Add StageActivity::Observer
tune - Update dependencies

Published by Woyten 11 months ago

Upgrade tune to 0.34.0

tune - More temperament layouts

Published by Woyten 11 months ago

  • Improvement: tune est uses a better strategy to identify compatible temperament layouts
  • Improvement: tune est supports Mavila[9] and Porcupine[8] temperaments
tune - More temperament layouts, automatic color schemas

Published by Woyten 11 months ago

  • Change: Complete rewrite of temperament::EqualTemperament, moved to layout::EqualTemperament
    • New: Add EqualTemperament::get_colors for auto-generated color schemas
    • Improvement: Add EqualTemperament::get_keyboard to obtain an isomorphic keyboard layout
  • Change: Merge temperament::{TemperamentType, TemperamentPreference} into a single type layout::PrototypeTemperament
    • Improvement: Add PrototypeTemperament::Mavila9 and PrototypeTemperament::Porcupine8
    • Improvement: TemperamentFinder::{by_edo, by_step_size} now returns a list of matching temperaments
  • Change: Move key::Keyboard to layout::IsomorphicKeyboard
    • Change: IsomorphicKeyboard now returns a scale degree instead of a PianoKey
  • Change: Move all types of the comma package to temperament
  • Improvement: Add Val::pick_alternative to select the second-best prime representation ("wart")
tune - Stereo buffers, unified audio pipeline, sympathetic resonance

Published by Woyten over 1 year ago

  • Improvement / Change: Treat effects and waveform stages the same. You can now apply filters in the main audio pipeline as effects or you can include effects in your waveform stages.
  • Improvement: Apply buffer concept to main audio pipeline. This offers new possibilities:
    • Declare multiple instances of output targets (Magnetron synth, Fluid synth, MIDI-out)
    • Route different waveforms to different effect processors
    • Simulate a key-based sympathetic resonance effect
  • Improvement: Enhance envelope routing. You can use any waveform buffer as an envelope source and output the enveloped signal to any main pipeline buffer
  • New: Add some example profiles
  • New: Handle balance events (CCN 8, configurable) and pan events (CCN 10, configurable)
  • New: Add LfSource::Fader. This enables you to gradually fade a control parameter between two values.
  • Change: The configuration method changed a lot and it is difficult to document every change here. Please refer to the current documentation to fix your old config.
tune - Magnetron overhaul

Published by Woyten over 1 year ago

  • Deletion: InBuffer and OutBuffer no longer exist. Use the BufferIndex enum instead.
  • Change: BufferWriter::read_<n>_and_write is now BufferWriter::read_<n>_write_1
  • New: Add BufferWriter::read_<n>_write_2 for stereo signal processing
  • Change: spec::Spec is now automation::AutomatableValue
  • Change: spec::Creator is now creator::Creator
  • Change: Creator::create is now Creator::create_value
  • Change: Stage is now stage::Stage
  • Change: StageState is now stage::StageActivity
  • Deletion: The waveform module has been removed in order to de-specialize waveforms, further changes include:
    • Change: Creator::new no longer accepts the envelopes argument
    • Deletion: Creator::create_envelope has been removed
  • Improvement: Magnetron has been overhauled:
    • Change: Magnetron::clear and Magnetron::write have been merged to Magnetron::process
    • Improvement: Magnetron::process evaluates and returns the StageActivity
    • New: Use Magnetron::process_nested to call a Magnetron instance within a Stage
    • Change: Magnetron::mix is now Magnetron::read_buffer
    • Deletion: Magnetron::set_audio_in has been removed
      • This functionality was too specific and it can be easily achieved now by creating a Stage that writes to BufferIndex::External.
tune - Minor improvement, update dependencies

Published by Woyten over 1 year ago

  • Improvement: Add Xenth::read to retrieve a continuous stream of rendered audio samples
tune - No functional changes, prepare microwave release

Published by Woyten over 1 year ago

tune - Remove obsolete error codes

Published by Woyten over 1 year ago

  • Deletion: SclBuildError::ScaleIsTrivial and SclBuildError::ItemOutOfRange are no longer part of the API
    • They weren't returned since tune-0.32.1 but remained a part of the API to ensure compatibility
tune - Use Bevy graphics engine

Published by Woyten over 1 year ago

  • Improvement: microwave uses Bevy as graphics engine including 3D graphics
tune - Support exotic scales

Published by Woyten over 1 year ago

  • Improvement: Scales with exotic properties (negative period, no period, with overshooting items) are supported
tune - Feature-completeness of Scala tuning files support

Published by Woyten over 1 year ago

  • Improvement: Support for Scala tuning files is now feature-complete
    • New: Support wonky scales / scales with items that were previously considered out-of-range
    • New: Support non-periodic scales / scales with a period of 0 cents
    • New: Support scales with negative-cents period
tune - Templates, flexible envelopes, improved customization

Published by Woyten almost 2 years ago

  • New: Add waveform_templates and effect_templates section for reusable abstractions.
  • New: Add LfSource::Semitones to convert values in semitones to frequency ratios.
  • New: Add OffVelocitySet, OffVelocity and KeyPressureSet live parameters.
  • Improvement: Envelopes support automations.
    • Change: The parameters amplitude and fadeout are mandatory parameters.
  • Improvement: Customize velocity sensitivity.
    • The envelope's amplitude parameter controls how the waveform's amplitude depends on the velocity or any other control value.
  • Improvement: Customize damper-pedal / fadeout behavior.
    • The envelope's fadeout parameter controls how the waveform is faded out depending on the damper pedal state or any other control value.
  • Improvement: Customize pitch-bend wheel behavior.
    • The current pitch-bend value is queryable via the PitchBend live parameter.
    • Use LfSource::Semitones to calculate the correct frequency depending on the pitch-bend value.
  • Improvement: Control magnetron volume via Velocity events (CCN 7, configurable).
  • Change: Rename from/to in Linear and Controller to map0/map1 to better explain the mathematical behavior.
tune - Templates, flexible envelopes

Published by Woyten almost 2 years ago

  • Improvement: Add templates to Creator.
    • Change: Add generic parameter A: AutomationSpec to Creator.
  • Improvement: Introduce WaveformProperties.
    • Change: WaveformProperties replaces WaveformState.
    • New: Add off_velocity property.
    • Improvement: key_pressure property is Option<f64>.
    • Deletion: Remove secs_since_pressed and secs_since_released. Those values are supposed to be aggregated within the render stages.
    • Change: Remove note_suspension argument from Magnetron::write.
  • Improvement: Envelopes are modeled as stages and support automations.
    • Change: EnvelopeSpec replaces Envelope.
    • New: Add velocity property. Waveform stages can decide to ignore this property if no velocity sensitivity is desired.
    • New: Add fadeout property. Waveform stages can use any LF source to control the fade-out phase.
  • Change: Update Waveform design.
    • Waveform::envelope is of type Stage<T>
    • Stage<T>::render returns StageState::Exhausted when waveform can no longer deliver any non-zero values
    • Waveform exhaustion is tracked in Wavform::is_active
tune - Many new features and improvements

Published by Woyten almost 2 years ago

  • New: Add separate effects section to microwave.yml (formerly waveforms.yml)
    • Available effects: Echo, SchroederReverb, RotarySpeaker
    • All effects can be MIDI controlled or automated via LfSources
    • Multiple instances of the same effect category can be used
  • New: F1..F10 keys trigger Sound1..Sound10 events
    • Those events can be used to control sound effects
    • Events are accessible through MIDI CCNs 70..79 (configurable)
  • Improvement: Toggle wav recording via Foot events (CCN 4, configurable)
  • Improvement: Control legato option via Legato events (CCN 68, configurable)
  • New: Touchpad gestures trigger polyphonic KeyPressure events
  • Change: Touchpad gestures no longer trigger Breath events
  • Change: Vertical mouse movement always triggers Breath events (CCN 2, configurable)
  • New: Add LfSourceExpr::Linear to remap values in the range 0..1
  • Change: Velocity and KeyPressure are now waveform properties
    • They can be accessed in the same way as WaveformPitch and WaveformPeriod
    • Use LfSourceExpr::Linear to remap them to the desired range
  • Deletion: LfSourceExpr::Envelope has been removed
    • This feature required knowledge about the press state of a key which is not available in all contexts (e.g. effects)
    • It will come back with a different design in a future release
    • It is still possible i.e. mandatory to define a final envelope for each waveform
  • Internal: Upgrade oxisynth to 0.0.2
  • Improvement: Facilitate handling of input sources with shifted MIDI numbers
  • Improvement / change: The harm subcommand is now able to generate NEJI scales
    • e.g. tune scl harm 27 --neji 12
    • The [harm] --sub parameter has been renamed to [harm] -u (for utonal)
    • Default names are in JI chord notation (e.g. "JI scale 8:9:10:11:12:13:14:15:16")
  • Change: The import subcommand has been renamed to scl-file in order to be consistent with other subcommands
tune - Waveform-agnostic automations

Published by Woyten almost 2 years ago

  • Improvement: Add key_pressure field to WaveformState
  • Improvement / Change: Make automations compatible with non-waveform stages
    • AutomationContext<T> no longer includes WaveformState. If access to WaveformState is required include it in the generic parameter T.
    • AutomatedValue now uses generic type argument T instead of associated type Context.
    • AutomationSpec has been removed. All types are generic over the live parameter T, not the spec parameter A.
    • PhantomType<T> no longer implements Spec. Use () instead.
tune - Upgrade dependencies

Published by Woyten almost 2 years ago

tune - NEJIs, better MTS support

Published by Woyten almost 2 years ago

  • Improvement: Facilitate handling of input sources with shifted MIDI numbers
  • Improvement / change: The harm subcommand is now able to generate NEJI scales
    • e.g. tune scl harm 27 --neji 12
    • The [harm] --sub parameter has been renamed to [harm] -u (for utonal)
    • Default names are in JI chord notation (e.g. "JI scale 8:9:10:11:12:13:14:15:16")
  • Improvement / change: The mts subcommand now supports the options octave-1, octave-1-rt, octave-2, octave-2-rt, full and full-rt
    • The [mts] octave subcommand has been renamed to [mts] octave-1
    • The [mts] full subcommand has been renamed to [mts] full-rt
  • Change: The import subcommand has been renamed to scl-file in order to be consistent with other subcommands
tune - NEJIs, more practical keyboard mappings

Published by Woyten almost 2 years ago

  • Improvement / change: scala::create_harmonics_scale is now able to generate NEJI scales
    • The 2nd argument, segment_type, replaces the old subharmonics flag
    • The 3rd argument, segment_start, replaces the old lowest_harmonic argument
    • The 4th argument, segment_size, replaces the old number_of_notes argument
    • The 5th argument, neji_divisions, has been added
    • Default names are in JI chord notation (e.g. "JI scale 8:9:10:11:12:13:14:15:16")
  • Change: scala::KbmRoot now is defined via ref_key, ref_pitch and root_offset instead of origin, ref_pitch and ref_degree
    • The parameter root_offset facilitates the creation of mappings where the note numbers of a MIDI input source (e.g. the Lumatone) are shifted
    • Degree 0 (ref_key) is mapped to ref_key + root_offset