Advanced Gtk+ Sequencer
====

Copyright (C) 2005-2021 Joël Krähemann

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".

Overview of Changes in AGS 4.0.0
================================

* Migrated to Gtk4, provide header bar in GSequencer.
* Migrated to libsoup-3.0.
* Improved libgsequencer.so, added spacings and tool tips.
* Refactored objects to make use of AgsConnectableFlags and give it a
  dedicated field.
* Refactored utility functions to provide a uniform API by passing utility
  boxed type.
* Removed deprecated ags/audio/recall.
* Removed deprecated utility functions.
* Dropped functional integration tests.

Overview of Changes in AGS 3.17.0
================================

* Implemented AgsSFZSynth computing just in time synth using ags-fx-sfz-synth.

Overview of Changes in AGS 3.16.0
================================

* Implemented AgsSF2Synth computing just in time synth using ags-fx-sf2-synth.

Overview of Changes in AGS 3.15.0
================================

* Implemented AgsHybridFMSynth computing just in time synth using ags-fx-fm-synth.

Overview of Changes in AGS 3.15.0
================================

* Implemented AgsHybridFMSynth computing just in time synth using ags-fx-fm-synth.

Overview of Changes in AGS 3.14.0
================================

* Implemented AgsHybridSynth computing just in time synth using ags-fx-synth.


Overview of Changes in AGS 3.12.2
================================

* Finally completed the composite editor. All editing happens in main window, now.


Overview of Changes in AGS 3.11.0
================================

* Completed VST3 host support. Enjoy your AgsVst3Bridge and AgsLiveVst3Bridge.
* AgsAudioThread and AgsChannelThread are always on, now.

Overview of Changes in AGS 3.8.0
================================

* Implemented additional volume controls of AgsMatrix, AgsSyncsynth, AgsFMSyncsynth,
  AgsFFPlayer and AgsPitchSampler.
* Implemented aliase of AgsFFPlayer and AgsPitchSampler with 4 controls.
* new utility functions to computer linear interpolation.
* new utility functions to frequency aliase.
* new utility functions to phase shift.
* new ags-fx-two-pass-aliase effect processor.

Overview of Changes in AGS 3.6.0
================================

* Implemented AgsGstreamerFile capable of reading or writing common media file
  types like MP3, MP4, MKV and WEBM.
* Started to implement get type functions of enum values.

Overview of Changes in AGS 3.4.0
================================

* Implemented AgsSF2SynthGenerator and AgsSFZSynthGenerator allowing you
  to pitch missing samples.
* Extended functionality of AgsFFPlayer and AgsPitchSampler to use SF2 and SFZ
  synth generators.
* Refactored ags_filter_util.c.

Overview of Changes in AGS 3.3.0
================================

* Implemented new ags-fx engine, replaced all existing recalls with fx counterpart.
* Implemented staging program of AgsAudioLoop, AgsAudioThread and AgsChannelThread.

Overview of Changes in AGS 3.0.0
================================

* Implemented AgsAudiorec's fast export.
* Implemented support for GObject-Introspection. Many gtk-doc annotations
  fixed and extended symbol descriptions.
* Refactored AgsComplex and AgsUUID in order to work with introspection. The
  typedef doesn't use array types, anymore. But derived from a struct, now.
* Implemented the AgsServer API dropped xmlrpc-c in favor of Libsoup2.4. Session
  support using HTTP cookies.
* Yay, AGS-OSC-OVER-XMLRPC has arrived. You can send your OSC packets now over
  HTTP based on AgsServer supporting authentication and responses arrive on a
  Websocket.
* Migrated to Gtk+-3.0, dropped builtin theme. Minimal CSS file enabling stepper
  for editors.
* Migrated to GThread API, this was a quiet big refactoring. AgsThread core functions
  have been rewritten, mainly AgsThread::clock() and AgsThread::run().
  Removed exotic functions like lock, unlock, wait and signal the tree.
* Major API changes, dropped many old functions like writing the "Wall of XML" file.
* Supporting LLVM's clang compiler for now. Replaced all nested functions.
* Fixed some potential SIGSEGVs.
* Added online help browser along the WebKitGtk dependency.
* Added basic key accelerators like: Ctrl-o, Ctrl-s, Ctrl-q and Ctrl-h. To open or
  save files, quit the application or open online help browser.
* Added better resolution to AgsSpectrometer.
* Improved MIDI import/export.

Overview of Changes in AGS 2.3.0
================================

* Improved AgsSynthGenerator to support impulse and FM LFO oscillator.
* Implemented new impulse oscillator in ags_synth_util.c 
* Implemented ags_fm_synth_util.c to do frequency modulation oscillators.
  Used by AgsSynthGenerator.
* Implemented ags_lfo_synth_util.c to do amplification using LFO oscillator.
* Added new machines AgsFMSynth, AgsFMSyncsynth and AgsPitchSampler.
* Added support for complex data type.

Overview of Changes in AGS 2.2.39
================================

* Added AgsComplex data type support in ags_audio_buffer_util.h and completed
  Float32 support.

Overview of Changes in AGS 2.2.38
================================

* Completed reworking unrolled loops to use vectorized builtin functions in
  ags_audio_buffer_util.c. Improved the vector and audio buffer access using
  incrementing indices.

Overview of Changes in AGS 2.2.0
================================

* Implemented OSC export controller. Allowing you to trigger AgsExportOutput
  task by the OSC server.
* Reworked parsing LV2 RDF Turtles. Providing a better conforming
  interpretation of prefixes and faster XPath expressions.
* Improved copyright and licenses notices for many files.

Overview of Changes in AGS 2.1.0
================================

* Implemented OSC server with different server paths. It has a front
  controller passing the requests to the matching context path of a
  controller.
* There is a new OSC buffer util and util file. Further you may use the
  AgsOscBuilder or AgsOscParser to interact with the OSC content format.
* Configuration in place is done by AgsApplySoundConfig task.

Overview of Changes in AGS 2.0.0
================================

* Implemented wave form editor with basic editing capabilities. Like copy &
  paste, cursor positioning and editing dialogs.
* New machines available AgsEqualizer10, AgsSpectrometer and AgsAudiorec.
  You can now have a built-in 10 band equalizer, a spectrometer visualizing
  the frequency using FFTW3 library and the ability to edit or record audio
  data.
* Refactored libags*.so by providing many API improvements. Grained control
  of sound file resources. New lock strategy and many objects are thread-safe,
  now.
* Implemented AgsWave and AgsBuffer to contain large amount of audio data.
* Added AgsMidi and AgsTrack skelleton.

Overview of Changes in AGS 1.3.0
================================

* Supporting 4 different paste modes by allowing the user to activate
  do 2 different check menu tool buttons. Switches are match audio channel
  or line as well no duplicates.
* New widget AgsScale available. It visualizes a control's possible value.
  It is accessible, implements AtkValue and AtkAction interface to control
  the ::value-changed signal or retrieving the range.
* New widgets AgsScaleBox, AgsVScaleBox and AgsHScaleBox available. It is
  responsible to layout your AgsScale. It inherits of GtkBox and overrides
  GtkWidget::size-allocate and GtkWidget::size-request.
* New widget AgsScrolledScaleBox available. It shall contain a AgsScaleBox
  and make it scrollable.
* Refactored automation editor by removing AgsAutomationArea and using
  AgsAutomationEdit instead. The editor supports segmented automation.

Overview of Changes in AGS 1.2.7
================================

* Completed migrating to asynchronous communication from libags*.so.1 to
  libgsequencer.so.
* Refactored large parts of ags_channel.c to remove redundant code and
  make all functions thread-safe. Fixed some regression related to linking.

Overview of Changes in AGS 1.2.0
================================

* Audio input support for all common backends like ALSA, OSS4, JACK and
  Pulseaudio. 
* New widget AgsPiano available. It is an accessible widget which draws
  a piano. It has events like ::key-pressed, ::key-released and ::key-clicked.
* New widget AgsScrolledPiano available. It contains an AgsPiano and addtional
  scrolling capabilities.
* New widget AgsNotebook available. It is has been moved from libgsequencer to
  libags-gui. It was refactored to be generic.
* Refactored notation editor by replacing AgsEditor with AgsNotationEditor.
  Notes have an alpha channel now. The editor supports segmented notation.

Overview of Changes in AGS 1.0.0
================================

* Sticky controls allows you to adjust multiple controls at once.
* Various bug-fixes especially improved Lv2ui syncing controls.

Overview of Changes in AGS 1.0.0-beta
================================

* Experimental XMLRPC-C service prototype.

Overview of Changes in AGS 0.9.29
================================

* New automation editor dialogs to select or ramp acceleration.
* New editor dialog to select notes.

Overview of Changes in AGS 0.9.28
================================

* all functional tests pass now again, since  gtk_main() integration.

Overview of Changes in AGS 0.9.26
================================

* full gtk_main() support you might want to run it by calling
  ags_gui_thread_do_run().

Overview of Changes in AGS 0.9.24
================================

* Support for LADSPA_PATH, DSSI_PATH and LV2_PATH environment variables
* Core-audio audio unit backend in order to port the application to
  Apple OS X.

Overview of Changes in AGS 0.9.10
================================

* Pulseaudio sink support. AgsPulseDevout has got a bigger ring-buffer
  to avoid caching and allow slower write functions.

Overview of Changes in AGS 0.9.8
================================

* You may now specify base note of AgsSynth or AgsSyncsynth.

Overview of Changes in AGS 0.9.7
================================

* Implemented new functions to handle LV2_Event_Buffer. Note the old
  functions to do so are deprecated and are incompatible to the
  newer API.
* AgsSyncsynth is a new AgsMachine object, allowing you to edit synth
  notation.
* Smaller refactoring of AgsApplySynth to use new AgsSynthGenerator
  API.

Overview of Changes in AGS 0.9.0
================================

* Using destroy worker for AgsRecall related unref resulting in much
  better performance.
* Many new unit tests and improved code by detecting errors.
* Extended chapter 3 about concurrency of developer's book.

Overview of Changes in AGS 0.8.9
================================

* Lots of properties applied during AgsTask sub-type instantiation.
  Thus implemented missing ::finalize() and ::dispose().

Overview of Changes in AGS 0.8.8
================================

* Additional editing tools available. After a Standard MIDI File import
  you might want to move or crop notes. There are 2 dialogs available of
  the toolbar allowing you to do so.

Overview of Changes in AGS 0.8.5
================================

* Envelope is ready now for use. Featuring envelope editor with presets,
  pattern presets and information tab.
* Envelope dialog available trough machine's context menu. Supported by
  AgsDrum, AgsMatrix, AgsFFPlayer, AgsDssiBridge and AgsLv2Bridge.
* Fixed missing persistence of AgsLiveDssiBridge and AgsLiveLv2Bridge

Overview of Changes in AGS 0.8.2
================================

* Added gettext support

Overview of Changes in AGS 0.8.0
================================

* Added MIDI import wizard
* Added MIDI export wizard

Overview of Changes in AGS 0.7.0
================================

* provide GSequencer functionality as libraries
