Skip to content

Releases: vmagnin/forsynth

ForSynth 0.5 "Daphne Oram"

30 Mar 13:26
0080cb9

Choose a tag to compare

Added

  • A FORD documentation: a project file ford.yml and a workflow .github/workflows/ford.yml to generate GitHub Pages.
  • In example/README.md: links to listen the OGG files.
  • example/multiplication_bells.f90: a demo using the add_bell signal.
  • example/four_thirty_three.f90: a minimalist ForSynth file! And a double tribute to John Cage and Joy Division.
  • example/radioactivity.f90 is a tribute to Kraftwerk. You can hear the simulation of the radioactive decay of a population of atoms heard with a Geiger counter, with chords in a whole tone scale and a Morse code message.
  • src/morse_code.f90 is offering basic Morse code support.
  • src/signals.f90: added add_bell(), based on the [Risset, 1969] bell signal #430 with 11 frequencies.
  • src/acoustics.f90 module with the dB_to_linear(dB) and linear_to_dB(amp) conversion functions.
  • src/audio_effects.f90: a basic apply_dynamic_effect() that can be used for downward/upward compression or expansion, or as a limiter depending on the parameters.
  • src/envelopes.f90: added fit_exp(x, x1, y1, x2, y2) for computing an exponentially decreasing y(x) envelope between (x1,y1) and (x2,y2).
  • In test/main.f90: more tests and a assert_reals_equal(a, b, tolerance) function.
  • src/sonification.f90 module with sonify_from_array() and sonify_from_file() subroutines, to transform your data into a WAV file.
  • app/sonify.f90: the associated command to easily sonify your data.
  • test/sonify.f90 and test/signal.dat: the associated tests.

Changed

  • ELECTRONIC_MUSIC_HISTORY.md: improved layout (hidden URLs).

Fixed

  • example/shepard_risset_glissando.f90: obtaining a good glissando was not easy, as you need to understand that each sin(omega * t) is in fact sin(omega(t) * t). Using a common time for all components was causing problems as t was increasing. In this new version, each component has its own time: sin(omega(tj) * tj). Moreover, a downward glissando can also be computed.
  • src/tape_recorder_class.f90:
    • added a self%last variable which is the index of the last sample on the track. In tracks, it must be used instead of self%samples which is equal to self%last+1, the first sample having a 0 index.
    • The final subroutine auto_finalize() now verifies that arrays are still allocated before deallocating.
  • Replaced nint(t2*RATE)-1 by min(nint(t2*RATE), tape%last) to avoid exceeding the right limit of the tape array.