All notable changes to the Forsynth project will be documented in this file. The format is based on Keep a Changelog.
- 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.
ELECTRONIC_MUSIC_HISTORY.md
: improved layout (hidden URLs).
- In
src/audio_effects.f90
: anapply_reverse_effect(tape, track, t1, t2)
subroutine to reverse the order of samples. - In
src/envelopes.f90
:apply_fade_in()
andapply_fade_out()
subroutines. - In
src/music.f90
:add_broken_chord()
writes a broken chord using an array containing the intervals. It uses plucked strings (Karplus-Strong). - An
ADSR_envelope
object can now be passed optionally toadd_sine_wave()
,add_square_wave()
,add_triangle_wav()
,add_sawtooth_wave()
,add_noise()
,add_weierstrass()
signals, andadd_note()
andadd_chord()
subroutines. - In
tape_recorder_class.f90
, the methodmix_tracks()
now accepts an optional array with the panoramic settings of each track. - In
wav_file_class.f90
, a methodget_name()
that returns the filename. - In
example/
:shepard_scale.f90
: a Shepard scale, giving the illusion of an ever increasing pitch in the first half of the tape and an ever decreasing pitch in the 2nd half.shepard_risset_glissando.f90
: a Shepard-Risset glissando, giving the illusion of an ever increasing pitch. It is the continuous version of the Shepard scale.doppler_effect.f90
: a simulation of Doppler effect, with a car passing in front of you.arpeggios.f90
: arpeggios played in various ways using the circles of fifths.
src/signals.f90
:- the Karplus-Strong algorithms are now using the track 0 as an auxilliary track, to avoid overwriting what is already present on the track of the signal.
- Signals use
do concurrent
loops when possible.
src/audio_effects.f90
: the effects now usedo concurrent
loops (except for delay).example/drone_music.f90
andexample/shepard_risset_glissando.f90
: added fade in and fade out.src/envelopes.f90
: the ADSR envelope is now a classADSR_envelope
.
- In
tape_recorder_class.f90
, the routinemix_tracks()
is now clearing first the track 0, which can be used previously as an auxiliary track by some routines.
- music module:
- A subroutine
add_chord()
, using an array containing the intervals of the chord. Allows chords such as 7th, Sus2, Sus4... using themusic_common
module. - A function
fr()
to compute the frequency of a note, for example "A#3". - Several music scales stored in arrays.
- A subroutine
signals.f90
module:- a new fractal
add_weierstrass()
signal. add_karplus_strong_drum()
signal.add_karplus_strong_drum_stretched()
.karplus_strong_stretched()
.
- a new fractal
- The method
mix_tracks()
now accepts an optional array containing the levels of each track (except track 0) in the mix. - Demos in
example/
:drum_machine.f90
using Karplus Strong drums, following a pattern defined in an array.misc_sounds.f90
: creates miscellaneous sounds in WAV files, especially obtained by frequency or phase modulation.drone_music.f90
: experimental drone music.
- A
ROADMAP.md
file. - A
logo
. - The
example/README.md
file.
src/forsynth.f90
:- the working precision is now
wp
instead ofdp
. - The class
file_t
was renamedWAV_file
and put in a separate filewav_file_class.f90
.close_WAV_file()
,write_header()
andwrite_normalized_data()
are now methods of the object.- The duration and number of tracks can now be set when we create a new WAV.
- A class
tape_recorder
was created and moved totape_recorder_class.f90
. It contains the arrays and their related parameters, and the methodsclear_tracks
,mix_tracks
,copy_section
...clear_tracks()
is now automatically called when creating awav_file
ortape_recorder
object.
- the working precision is now
src/music.f90
was splitted in two files:src/music.f90
andsrc/music_common.f90
which contain music theory elements common to the ForMIDI and ForSynth projects.src/demos.f90
was removed and split intoexample/demo1.f90
,example/demo2.f90
andexample/demo3.f90
. They can be run with thefpm run --example
command.example/demo3.f90
was then split in two: demo3 (two scales and a blues) and demo4 (signals).- and demo3 renamed
blues.f90
and improved.
- and demo3 renamed
demo1
was renamedchords_and_melody
.demo2
was renameddemo_effects
.
demo4.f90
renamedsignals.f90
.- Examples are now using keyword argument lists to better document how the API must be used.
- The alternative
build.sh
was improved. - Now under GPL-3.0-or-later license.
app/main.f90
was removed. Thetest_the_machine()
subroutine is now called byfpm test
.- The routines
add_major_chord()
andadd_minor_chord()
in themusic
module (replaced byadd_chord()
).
- A bug in
add_karplus_strong()
.
- forsynth module:
copy_section()
clear_tracks()
- music module:
add_note()
to generate a note with a sum of harmonics.add_major_chord()
add_minor_chord()
- demos module:
demo1()
demo2()
demo3()
- envelopes module:
ADSR_envelope()
function - signals module:
add_karplus_strong()
for plucked stringsadd_square_wave()
add_sawtooth_wave()
add_triangle_wave()
add_noise()
- sound_effects module:
apply_delay_effect()
apply_fuzz_effect()
apply_tremolo_effect()
apply_autopan_effect()
add_sinusoidal_signal
has been renamedadd_sine_wave
, on the same model as the other waveforms.
- Initial commit.
- Translated from the C version (2014-07-26).