giada (0.21.0-1) unstable; urgency=medium
authorDennis Braun <d_braun@kabelmail.de>
Sun, 15 May 2022 16:50:55 +0000 (18:50 +0200)
committerDennis Braun <d_braun@kabelmail.de>
Sun, 15 May 2022 16:50:55 +0000 (18:50 +0200)
  * New upstream version 0.21.0
  * Remove obsolete ds tag
  * Refresh patchset
  * Bump Standards Version to 4.6.1
  * Update mcl-audio-buffer in d/missing-sources
  * The desktop file is now correctly installed by upstream
  * Bring back keywords and translations to the desktop file and add german
    translation
  * Add metainfo file to d/copyright
  * Bump my d/copyright year
  * Add d/upstream/metadata

[dgit import unpatched giada 0.21.0-1]

26 files changed:
1  2 
debian/README.source
debian/changelog
debian/control
debian/copyright
debian/copyright_hints
debian/gbp.conf
debian/gbp/postclone.sh
debian/giada.1
debian/giada.fr.1
debian/giada.manpages
debian/missing-sources/README.md
debian/missing-sources/mcl-atomic-swapper/atomic-swapper.hpp
debian/missing-sources/mcl-audio-buffer/audioBuffer.cpp
debian/missing-sources/mcl-audio-buffer/audioBuffer.hpp
debian/patches/02-geompp.patch
debian/patches/03-system-rtaudio.patch
debian/patches/04-system-json.patch
debian/patches/06-system-jpg+png.patch
debian/patches/RtAudio52.patch
debian/patches/desktop_improvements.patch
debian/patches/series
debian/rules
debian/salsa-ci.yml
debian/source/format
debian/upstream/metadata
debian/watch

index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..6b617bb372060946556701362dd27a189877e287
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,38 @@@
++repacking upstream sources
++--------------------------
++
++The original tarball has been repacked to remove files already in Debian.
++
++Upstream also bundles the 'JUCE' framework which is available as a Debian
++package.
++
++Upstream also bundles a slightly modified version of RtAudio.
++Since upstream relies on their modifications, we are using the bundled version
++(rather than the system provided package!)
++
++Files stripped away are enumerated in the Files-Excluded stanza in
++debian/copyright.
++
++
++gbp clone
++---------
++
++Starting with gbp>0.8.1, here's an simple way to automatically fine-tune the
++repository in the following ways:
++- make git ignore any .pc/ directory (created by quilt)
++- enable the "--follow-tags" when running 'git-push', so it's harder
++  to forget to push packaging tags along with the branches.
++
++To enable this, run gbp-clone with the '--postclone debian/gbp/postclone.sh'
++option.
++To enable this for ALL repositories cloned via 'gbp' (in the future), do
++something like the following:
++
++    $ mkdir -p ~/bin
++    $ cp debian/gbp/postclone.sh ~/bin/gbphook-postclone
++    $ cat >> ~/.gbp.conf <<EOF
++    [clone]
++    postclone = ~/bin/gbphook-postclone
++    EOF
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Mon, 1 Aug 2016 12:15:50 +0200
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..0ee96e9d1b72cc6f373307bd8af57e8d225a6a51
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,454 @@@
++giada (0.21.0-1) unstable; urgency=medium
++
++  * New upstream version 0.21.0
++  * Remove obsolete ds tag
++  * Refresh patchset
++  * Bump Standards Version to 4.6.1
++  * Update mcl-audio-buffer in d/missing-sources
++  * The desktop file is now correctly installed by upstream
++  * Bring back keywords and translations to the desktop file and add german
++    translation
++  * Add metainfo file to d/copyright
++  * Bump my d/copyright year
++  * Add d/upstream/metadata
++
++ -- Dennis Braun <d_braun@kabelmail.de>  Sun, 15 May 2022 18:50:55 +0200
++
++giada (0.20.1+ds1-1) unstable; urgency=medium
++
++  * New upstream version 0.20.1+ds1
++    * Refresh patches
++  * Add patch that fixes missing include
++  * Update geompp library
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Thu, 03 Mar 2022 15:40:12 +0100
++
++giada (0.20.0+ds1-1) unstable; urgency=medium
++
++  * New upstream version 0.20.0+ds1
++    - Refresh patches
++  * Update dates in d/copyright
++    - Regenerate d/copyright_hints
++  * Bump d/watch version to 4
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Wed, 02 Feb 2022 19:08:36 +0100
++
++giada (0.19.2+ds1-1) unstable; urgency=medium
++
++  * New upstream version 0.19.2+ds1
++    - Refresh patches
++  * Add 'licensecheck' target
++    - Generate d/copyright_hints
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Mon, 10 Jan 2022 09:13:23 +0100
++
++giada (0.19.1+ds1-1) unstable; urgency=medium
++
++  * Upload to unstable.
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Thu, 23 Dec 2021 12:58:30 +0100
++
++giada (0.19.1+ds1-1~exp1) experimental; urgency=medium
++
++  * New upstream version 0.19.1+ds1
++
++  [ IOhannes m zmölnig ]
++  * Update patches
++    + Drop obsolete patches
++    + Refresh patches
++  * Add patch for geompp library
++  * Add patch to allow compilation with RtAudio-5.2
++  * Add patch to fix underlinking against libjpeg and libpng
++  * Modernize build with CMake
++  * B-D on fst-dev
++    + Apply some hacks for FST bugs
++  * Versioned B-D on juce
++  * Add missing upstream sources
++  * Update d/copyright
++  * Bump standards version to 4.6.0
++
++  [ Olivier Humbert ]
++  * Update README.source
++  * d/install: use the upstream icon
++  * d/giada.desktop: use the upstream icon
++  * Delete giada.svg (we use the upstream logo now)
++  * d/copyright: update year for me
++  * d/install: typo fix
++
++  [ Dennis Braun ]
++  * Update rtmidi patch
++  * d/control:
++    + Bump dh-compat to 13
++    + Add me as uploader
++  * d/copyright:
++    + Update Files-Excluded
++    + Update copyright year
++    + Add me to the d/ section
++  * d/rules:
++    + Update CXXFLAGS
++    + Remove -Wl,--as-needed flags
++    + Remove get-orig-source
++  * d/copyright: Remove .travis* from Files-Excluded
++
++  [ Debian Janitor ]
++  * Remove constraints unnecessary since buster
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Thu, 23 Dec 2021 09:48:37 +0100
++
++giada (0.16.2.2+ds1-1) unstable; urgency=medium
++
++  * New upstream version 0.16.2.2+ds1
++
++  * Refresh patches
++    * Refresh RtMidi patch
++    * Dropped RtAudio patch
++    * Refresh JUCE patch
++  * Build against system-provided nlohmann-json3 library
++    * Provide a patch for that as well
++  * Fix spelling errors
++  * Add salsa-ci configuration
++  * Refresh d/copyright
++  * Bump standards version to 4.5.0
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Thu, 02 Apr 2020 15:19:12 +0200
++
++giada (0.15.4+ds1-1) unstable; urgency=medium
++
++  * New upstream version 0.15.4+ds1
++
++  [ Ondřej Nový ]
++  * Use debhelper-compat instead of debian/compat
++
++  [ IOhannes m zmölnig ]
++  * B-D on juce>=5.4.4 (Closes: #925695)
++  * d/patches
++    * Refresh patches
++    * Refresh patches with 'gbp pq'
++    * Add patch for JUCE-5.4.4 compatibility
++  * Build requires C++14
++  * Dropped unrecognized 'IX' macro from manpages
++  * Drop obsolete d/source/local-options
++  * Bump dh compat to 12
++  * Bump standards version to 4.4.0
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Tue, 20 Aug 2019 15:32:54 +0200
++
++giada (0.15.2+ds1-2) unstable; urgency=medium
++
++  * B-D and link against libcurl (Closes: #923898)
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Wed, 06 Mar 2019 23:08:53 +0100
++
++giada (0.15.2+ds1-1) unstable; urgency=medium
++
++  * New upstream version 0.15.2+ds1
++    * Refreshed patches
++  * Bumped standards version to 4.2.1
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Sat, 08 Sep 2018 18:22:39 +0200
++
++giada (0.15.1+ds1-1) unstable; urgency=medium
++
++  * New upstream version 0.15.1+ds1
++
++  [ Olivier Humbert ]
++  * debian/control :
++    - Build-Depends: alphabetical order + one package per line
++    - long description (lines were too short)
++  * debian/copyright :
++    - adding myself
++  * debian/giada.desktop :
++    - removes [es] name (no need since it's not translated)
++    - adds Comment for EN and ES (then they get displayed when mouseovering the
++      menu item)
++    - adds French Generic Name and Comment
++  * debian/giada.1 :
++    - suppresses a duplicate (.TH)
++  * debian/giada.fr.1 :
++    - adds a French manpage (translated from the English one)
++  * debian/giada.manpages :
++    - install the French manpage
++
++  [ IOhannes m zmölnig ]
++  * Refreshed patches
++  * Switched to +ds suffix (more widespread than +repack)
++  * debian/control :
++    - Set Rules-Requires-Root to no
++    - Bumped standards version to 4.1.5
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Wed, 04 Jul 2018 22:23:58 +0200
++
++giada (0.15.0+repack1-2) unstable; urgency=medium
++
++  * Dropped versioned depends on alsa/sndfile/samplerate
++  * Added libatomic to riscv64 builds
++  * Install updstream changelog
++
++  * Upload to unstable.
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Thu, 24 May 2018 10:20:47 +0200
++
++giada (0.15.0+repack1-2~exp2) experimental; urgency=medium
++
++  * Pass "-latomic" via the LIBS
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Wed, 23 May 2018 19:56:50 +0200
++
++giada (0.15.0+repack1-2~exp1) experimental; urgency=medium
++
++  * Link against libatomic (on platforms that require it)
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Wed, 23 May 2018 16:36:00 +0200
++
++giada (0.15.0+repack1-1) unstable; urgency=medium
++
++  * New upstream version 0.15.0+repack1
++
++  * Enabled VST support
++    * Build with JUCE
++  * Repacked sources
++    * Exclude all travis-ci related stuff
++    * Don't exclude VST files (dropped upstream)
++    * Updated d/watch to new repacksuffix "+repack"
++  * Bumped standards version to 4.1.4
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Tue, 22 May 2018 21:10:08 +0200
++
++giada (0.14.6~dfsg1-1) unstable; urgency=medium
++
++  * New upstream version 0.14.6~dfsg1
++
++  [ Jaromír Mikeš ]
++  * Patch forwarded.
++
++  [ Ondřej Nový ]
++  * d/control: Set Vcs-* to salsa.debian.org
++
++  [ IOhannes m zmölnig ]
++  * Refreshed patches
++  * Run unit-tests in fake-X environment
++  * Updated maintainer email
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Wed, 04 Apr 2018 21:39:36 +0200
++
++giada (0.14.5~dfsg1-2) unstable; urgency=medium
++
++  * Add patch to fix build on some archs.
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Wed, 17 Jan 2018 18:45:49 +0100
++
++giada (0.14.5~dfsg1-1) unstable; urgency=medium
++
++  * New upstream version 0.14.5~dfsg1
++  * Patches removed/updated.
++  * Set dh/compat 11.
++  * Bump Standards.
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Tue, 16 Jan 2018 23:19:27 +0100
++
++giada (0.14.4~dfsg1-1) unstable; urgency=medium
++
++  * New upstream version 0.14.4~dfsg1
++  * Patch refreshed.
++  * Vcs - use git instead of cgit.
++  * Remove trailing-whitespaces.
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Sat, 25 Nov 2017 16:35:14 +0100
++
++giada (0.14.3~dfsg1-1) unstable; urgency=medium
++
++  * New upstream version 0.14.3~dfsg1
++
++  [ Jaromír Mikeš ]
++  * Introduce postclone.sh script to ignore .pc/ dir.
++  * Patches refreshed.
++
++  [ IOhannes m zmölnig ]
++  * Updated patches
++    * Updated patch headers for use with gbp-pq
++    * Refreshed patches
++    * Updated bundled RtAudio to RtAudio5
++    * Added patch to fix compilation with g++-7 (Closes: #853418)
++    * Added missing files to catch-patch
++  * Dropped unneeded B-D on autotools-dev
++  * Dropped override_dh_autoconf
++  * Calculated BUILD_DATE based on SOURCE_DATE_EPOCH
++  * Switched to https:// where possible
++  * Fixed typo in d/README.source
++  * Bumped standards version to 4.1.1
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Mon, 30 Oct 2017 10:08:45 +0100
++
++giada (0.14.1~dfsg1-1) unstable; urgency=medium
++
++  * New upstream version 0.14.1~dfsg1
++  * Patch refreshed.
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Mon, 24 Jul 2017 01:10:36 +0200
++
++giada (0.14.0~dfsg1-1) unstable; urgency=medium
++
++  * New upstream version 0.14.0~dfsg1
++  * Patch forwarded.
++  * Bump Standards.
++  * Add catch as B-D.
++  * Add patch to test with system-wide catch.
++  * Update copyright file.
++  * Remove not-needed override file.
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Mon, 26 Jun 2017 11:43:49 +0200
++
++giada (0.13.2~dfsg1-1) unstable; urgency=medium
++
++  * Remove more files on repack.
++  * New upstream version 0.13.2~dfsg1
++  * Patches deleted/refreshed.
++  * Clean up rules file.
++  * Remove B-D dh_autoreconf.
++  * Update copyright file.
++  * Sign tags.
++  * Install only svg icon.
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Sun, 15 Jan 2017 18:51:32 +0100
++
++giada (0.13.1~dfsg1-1) unstable; urgency=medium
++
++  * New upstream version 0.13.1~dfsg1
++  * Patch refreshed.
++  * Set dh/compat 10.
++  * Add patch to fix FTBFS.
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Mon, 21 Nov 2016 09:32:55 +0100
++
++giada (0.13.0~dfsg1-1) unstable; urgency=medium
++
++  * New upstream version 0.13.0~dfsg1
++  * Refresh patch.
++  * Drop patches applied upstream.
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Fri, 02 Sep 2016 01:35:02 +0200
++
++giada (0.12.2~dfsg1-3) unstable; urgency=medium
++
++  * Add patch to build with gcc6 (Closes: ##831183).
++  * Numbering patches.
++  * Tune .gitignore file.
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Mon, 25 Jul 2016 01:09:36 +0200
++
++giada (0.12.2~dfsg1-2) unstable; urgency=medium
++
++  * Add patch to build with new rtmidi lib. (Closes: #828955)
++    Thanks to James Cowgill <jcowgill@debian.org>
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Mon, 04 Jul 2016 16:03:13 +0200
++
++giada (0.12.2~dfsg1-1) unstable; urgency=medium
++
++  * Imported Upstream version 0.12.2~dfsg1
++  * Patch refreshed.
++  * Update copyright file.
++  * Fix hardening.
++  * Add overrides file.
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Wed, 22 Jun 2016 14:41:40 +0200
++
++giada (0.12.1~dfsg1-1) unstable; urgency=medium
++
++  * Imported Upstream version 0.12.1~dfsg1
++    * Dropped embedded copy of non-free ASIO SDK in rtaudio-mod
++      that had accidentally crept in with 0.11.0 (Closes: #823318)
++  * Dropped patches applied upstream.
++  * Dropped references to JUCE
++  * Bumped to standards version 3.9.8
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Tue, 17 May 2016 15:54:31 +0200
++
++giada (0.11.2~dfsg-1) unstable; urgency=medium
++
++  * Imported Upstream version 0.11.2~dfsg
++
++  * File-Exclude bundled libraries
++    * Explain repacking in detail
++    * Simplified get-orig-source rule
++    * Added repack-suffix to debian/watch
++  * Refreshed patches
++  * Skip tests that require missing files
++  * Clean up in rtaudio-mod directory
++  * Use https:// in Vcs-Git stanza
++  * Bumped standards to 3.9.7
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Tue, 16 Feb 2016 15:39:16 +0100
++
++giada (0.11.0~dfsg1-1) unstable; urgency=medium
++
++  * Imported Upstream version 0.11.0~dfsg1
++  * Patch applied upstream.
++  * Add libjansson-dev as build dep.
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Wed, 02 Dec 2015 09:45:41 +0100
++
++giada (0.10.2~dfsg1-2) unstable; urgency=medium
++
++  * unit-tests
++    * Made tests failing more verbosely
++    * Set ${HOME} to /tmp
++  * debian/README.source
++    * Documented git-tuneclone.sh
++    * Fixed typos
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Mon, 23 Nov 2015 00:15:05 +0100
++
++giada (0.10.2~dfsg1-1) unstable; urgency=medium
++
++  [ Jaromír Mikeš ]
++  * Imported Upstream version 0.10.2~dfsg1
++
++  [ IOhannes m zmölnig ]
++  * Enable C++11 to prevent FTBFS in tests
++  * Made build reproducible
++    * Patch to allow setting of DATE in about-dialog
++    * Set BUILD_DATE to date from debian/changelog
++  * Removed giada.menu
++    (in response to the tech-ctte decision on #741573)
++  * Updated debian/copyright
++  * Updated Vcs-Browser stanza
++  * Added debian/git-tuneclone.sh script
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Fri, 06 Nov 2015 22:28:02 +0100
++
++giada (0.10.1~dfsg1-1) unstable; urgency=medium
++
++  * Imported Upstream version 0.10.1~dfsg1
++  * Remove patch - apllied upstream.
++  * Refresh patch.
++  * Upstream build changed - tune rules file accordingly.
++  * Update copyright file.
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Thu, 03 Sep 2015 03:43:59 +0200
++
++giada (0.10.0~dfsg1-1) unstable; urgency=medium
++
++  * Imported Upstream version 0.10.0~dfsg1
++  * Patches refreshed.
++  * Added spelling patch.
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Tue, 07 Jul 2015 14:40:16 +0200
++
++giada (0.9.6~dfsg1-3) unstable; urgency=medium
++
++  * Fixed FTBFS due to parenthesization (Closes: #791544)
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Tue, 07 Jul 2015 11:20:10 +0200
++
++giada (0.9.6~dfsg1-2) unstable; urgency=medium
++
++  * Attempt to fix build on arm64 and ppc64el.
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Thu, 18 Jun 2015 09:58:19 +0200
++
++giada (0.9.6~dfsg1-1) unstable; urgency=medium
++
++  * Initial release. (Closes: Bug#786610)
++
++ -- Jaromír Mikeš <mira.mikes@seznam.cz>  Wed, 08 Apr 2015 14:59:44 +0200
diff --cc debian/control
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..d4c746bcdf764f4e442d93d3558b59e025b3b5bc
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,50 @@@
++Source: giada
++Section: sound
++Priority: optional
++Maintainer: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
++Uploaders:
++ Jaromír Mikeš <mira.mikes@seznam.cz>,
++ IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>,
++ Dennis Braun <d_braun@kabelmail.de>
++Build-Depends:
++ debhelper-compat (= 13),
++ catch2,
++ cmake,
++ fst-dev,
++ juce-modules-source (>= 6.0.0~),
++ libfltk1.3-dev,
++ libcurl4-gnutls-dev | libcurl-dev,
++ libjack-dev,
++ libjansson-dev,
++ librtaudio-dev,
++ librtmidi-dev,
++ libsamplerate0-dev,
++ libsndfile1-dev,
++ libxext-dev,
++ libxft2-dev,
++ libxpm-dev,
++ nlohmann-json3-dev,
++ xauth,
++ xvfb,
++Standards-Version: 4.6.1
++Rules-Requires-Root: no
++Vcs-Git: https://salsa.debian.org/multimedia-team/giada.git
++Vcs-Browser: https://salsa.debian.org/multimedia-team/giada
++Homepage: https://www.giadamusic.com
++
++Package: giada
++Architecture: any
++Built-Using: ${juce:BuiltUsing},
++Depends:
++ ${shlibs:Depends},
++ ${misc:Depends},
++Recommends:
++ jackd,
++Description: Hardcore Loop Machine
++ free, minimal, hardcore audio tool for DJs, live performers and electronic
++ musicians. Pick up your channel, fill it with samples or MIDI events and start
++ the show by using this tiny piece of software as a loop machine, drum machine,
++ sequencer, live sampler or yet as a plugin/effect host.
++ .
++ Giada aims to be a compact and portable virtual device for production use and
++ live sets.
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e1f9f173464654cbb928b6330959da2dcee586db
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,45 @@@
++Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
++Upstream-Name: Giada
++Upstream-Contact: Giovanni A. Zuliani | Monocasual <giadaloopmachine@gmail.com>
++Source: https://www.giadamusic.com
++
++Files: *
++Copyright:
++ 2010-2022 Giovanni A. Zuliani | Monocasual
++License: GPL-3+
++
++Files: debian/*
++Copyright:
++ 2018-2020 Olivier Humbert <trebmuh@tuxfamily.org>
++ 2015-2017 Jaromír Mikeš <mira.mikes@seznam.cz>
++ 2015-2022 IOhannes m zmölnig <umlaeute@debian.org>
++ 2020-2022 Dennis Braun <d_braun@kabelmail.de>
++License: GPL-3+
++
++Files: debian/missing-sources/mcl-*
++Copyright:
++ 2021 Giovanni A. Zuliani | Monocasual
++License: GPL-3+
++
++Files: extras/com.giadamusic.Giada.metainfo.xml
++Copyright:
++ 2010-2021 Giovanni A. Zuliani | Monocasual
++License: CC0
++ On Debian systems, the complete text of the CC0 license
++ can be found in /usr/share/common-licenses/CC0-1.0.
++
++License: GPL-3+
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3 of the License, or
++ (at your option) any later version.
++ .
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ GNU General Public License for more details.
++Comment: You should have received a copy of the GNU General Public License
++ along with this program.  If not, see <https://www.gnu.org/licenses/>.
++ .
++ On Debian systems, the complete text of the GNU General
++ Public License can be found in `/usr/share/common-licenses/GPL-3'.
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..16f4461ae13eee188edec28aaea64c904d46cb2b
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,398 @@@
++Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
++Upstream-Name: FIXME
++Upstream-Contact: FIXME
++Source: FIXME
++Disclaimer: Autogenerated by licensecheck
++
++Files: ./src/core/actions/action.h
++ ./src/core/actions/actionRecorder.cpp
++ ./src/core/actions/actionRecorder.h
++ ./src/core/actions/actions.cpp
++ ./src/core/actions/actions.h
++ ./src/core/channels/audioReceiver.cpp
++ ./src/core/channels/audioReceiver.h
++ ./src/core/channels/channel.cpp
++ ./src/core/channels/channel.h
++ ./src/core/channels/channelManager.cpp
++ ./src/core/channels/channelManager.h
++ ./src/core/channels/midiActionRecorder.cpp
++ ./src/core/channels/midiActionRecorder.h
++ ./src/core/channels/midiController.cpp
++ ./src/core/channels/midiController.h
++ ./src/core/channels/midiLearner.cpp
++ ./src/core/channels/midiLearner.h
++ ./src/core/channels/midiLighter.cpp
++ ./src/core/channels/midiLighter.h
++ ./src/core/channels/midiReceiver.cpp
++ ./src/core/channels/midiReceiver.h
++ ./src/core/channels/midiSender.cpp
++ ./src/core/channels/midiSender.h
++ ./src/core/channels/sampleActionRecorder.cpp
++ ./src/core/channels/sampleActionRecorder.h
++ ./src/core/channels/sampleAdvancer.cpp
++ ./src/core/channels/sampleAdvancer.h
++ ./src/core/channels/samplePlayer.cpp
++ ./src/core/channels/samplePlayer.h
++ ./src/core/channels/sampleReactor.cpp
++ ./src/core/channels/sampleReactor.h
++ ./src/core/channels/waveReader.cpp
++ ./src/core/channels/waveReader.h
++ ./src/core/conf.cpp
++ ./src/core/conf.h
++ ./src/core/const.h
++ ./src/core/engine.cpp
++ ./src/core/engine.h
++ ./src/core/eventDispatcher.cpp
++ ./src/core/eventDispatcher.h
++ ./src/core/graphics.cpp
++ ./src/core/graphics.h
++ ./src/core/idManager.cpp
++ ./src/core/idManager.h
++ ./src/core/init.cpp
++ ./src/core/init.h
++ ./src/core/jackTransport.cpp
++ ./src/core/jackTransport.h
++ ./src/core/kernelAudio.cpp
++ ./src/core/kernelAudio.h
++ ./src/core/kernelMidi.cpp
++ ./src/core/kernelMidi.h
++ ./src/core/metronome.cpp
++ ./src/core/metronome.h
++ ./src/core/midiDispatcher.cpp
++ ./src/core/midiDispatcher.h
++ ./src/core/midiEvent.cpp
++ ./src/core/midiEvent.h
++ ./src/core/midiLearnParam.cpp
++ ./src/core/midiLearnParam.h
++ ./src/core/midiMapper.cpp
++ ./src/core/midiMapper.h
++ ./src/core/mixer.cpp
++ ./src/core/mixer.h
++ ./src/core/mixerHandler.cpp
++ ./src/core/mixerHandler.h
++ ./src/core/model/mixer.cpp
++ ./src/core/model/mixer.h
++ ./src/core/model/model.cpp
++ ./src/core/model/model.h
++ ./src/core/model/recorder.cpp
++ ./src/core/model/recorder.h
++ ./src/core/model/sequencer.cpp
++ ./src/core/model/sequencer.h
++ ./src/core/model/storage.cpp
++ ./src/core/model/storage.h
++ ./src/core/patch.cpp
++ ./src/core/patch.h
++ ./src/core/plugins/plugin.cpp
++ ./src/core/plugins/plugin.h
++ ./src/core/plugins/pluginHost.cpp
++ ./src/core/plugins/pluginHost.h
++ ./src/core/plugins/pluginManager.cpp
++ ./src/core/plugins/pluginManager.h
++ ./src/core/plugins/pluginState.cpp
++ ./src/core/plugins/pluginState.h
++ ./src/core/quantizer.cpp
++ ./src/core/quantizer.h
++ ./src/core/queue.h
++ ./src/core/range.h
++ ./src/core/recorder.cpp
++ ./src/core/recorder.h
++ ./src/core/resampler.cpp
++ ./src/core/resampler.h
++ ./src/core/ringBuffer.h
++ ./src/core/sequencer.cpp
++ ./src/core/sequencer.h
++ ./src/core/synchronizer.cpp
++ ./src/core/synchronizer.h
++ ./src/core/types.h
++ ./src/core/wave.cpp
++ ./src/core/wave.h
++ ./src/core/waveFx.cpp
++ ./src/core/waveFx.h
++ ./src/core/waveManager.cpp
++ ./src/core/waveManager.h
++ ./src/core/weakAtomic.h
++ ./src/core/worker.cpp
++ ./src/core/worker.h
++ ./src/glue/actionEditor.cpp
++ ./src/glue/actionEditor.h
++ ./src/glue/channel.cpp
++ ./src/glue/channel.h
++ ./src/glue/config.cpp
++ ./src/glue/config.h
++ ./src/glue/events.cpp
++ ./src/glue/events.h
++ ./src/glue/io.cpp
++ ./src/glue/io.h
++ ./src/glue/layout.cpp
++ ./src/glue/layout.h
++ ./src/glue/main.cpp
++ ./src/glue/main.h
++ ./src/glue/plugin.cpp
++ ./src/glue/plugin.h
++ ./src/glue/recorder.cpp
++ ./src/glue/recorder.h
++ ./src/glue/sampleEditor.cpp
++ ./src/glue/sampleEditor.h
++ ./src/glue/storage.cpp
++ ./src/glue/storage.h
++ ./src/gui/dialogs/about.cpp
++ ./src/gui/dialogs/about.h
++ ./src/gui/dialogs/actionEditor/baseActionEditor.cpp
++ ./src/gui/dialogs/actionEditor/baseActionEditor.h
++ ./src/gui/dialogs/actionEditor/midiActionEditor.cpp
++ ./src/gui/dialogs/actionEditor/midiActionEditor.h
++ ./src/gui/dialogs/actionEditor/sampleActionEditor.cpp
++ ./src/gui/dialogs/actionEditor/sampleActionEditor.h
++ ./src/gui/dialogs/beatsInput.cpp
++ ./src/gui/dialogs/beatsInput.h
++ ./src/gui/dialogs/bpmInput.cpp
++ ./src/gui/dialogs/bpmInput.h
++ ./src/gui/dialogs/browser/browserBase.cpp
++ ./src/gui/dialogs/browser/browserBase.h
++ ./src/gui/dialogs/browser/browserDir.cpp
++ ./src/gui/dialogs/browser/browserDir.h
++ ./src/gui/dialogs/browser/browserLoad.cpp
++ ./src/gui/dialogs/browser/browserLoad.h
++ ./src/gui/dialogs/browser/browserSave.cpp
++ ./src/gui/dialogs/browser/browserSave.h
++ ./src/gui/dialogs/channelNameInput.cpp
++ ./src/gui/dialogs/channelNameInput.h
++ ./src/gui/dialogs/config.cpp
++ ./src/gui/dialogs/config.h
++ ./src/gui/dialogs/keyGrabber.cpp
++ ./src/gui/dialogs/keyGrabber.h
++ ./src/gui/dialogs/mainWindow.cpp
++ ./src/gui/dialogs/mainWindow.h
++ ./src/gui/dialogs/midiIO/midiInputBase.cpp
++ ./src/gui/dialogs/midiIO/midiInputBase.h
++ ./src/gui/dialogs/midiIO/midiInputChannel.cpp
++ ./src/gui/dialogs/midiIO/midiInputChannel.h
++ ./src/gui/dialogs/midiIO/midiInputMaster.cpp
++ ./src/gui/dialogs/midiIO/midiInputMaster.h
++ ./src/gui/dialogs/midiIO/midiOutputBase.cpp
++ ./src/gui/dialogs/midiIO/midiOutputBase.h
++ ./src/gui/dialogs/midiIO/midiOutputMidiCh.cpp
++ ./src/gui/dialogs/midiIO/midiOutputMidiCh.h
++ ./src/gui/dialogs/midiIO/midiOutputSampleCh.cpp
++ ./src/gui/dialogs/midiIO/midiOutputSampleCh.h
++ ./src/gui/dialogs/pluginChooser.cpp
++ ./src/gui/dialogs/pluginChooser.h
++ ./src/gui/dialogs/pluginList.cpp
++ ./src/gui/dialogs/pluginList.h
++ ./src/gui/dialogs/pluginWindow.cpp
++ ./src/gui/dialogs/pluginWindow.h
++ ./src/gui/dialogs/pluginWindowGUI.cpp
++ ./src/gui/dialogs/pluginWindowGUI.h
++ ./src/gui/dialogs/progress.cpp
++ ./src/gui/dialogs/progress.h
++ ./src/gui/dialogs/sampleEditor.cpp
++ ./src/gui/dialogs/sampleEditor.h
++ ./src/gui/dialogs/warnings.cpp
++ ./src/gui/dialogs/warnings.h
++ ./src/gui/dialogs/window.cpp
++ ./src/gui/dialogs/window.h
++ ./src/gui/dispatcher.cpp
++ ./src/gui/dispatcher.h
++ ./src/gui/drawing.cpp
++ ./src/gui/drawing.h
++ ./src/gui/elems/actionEditor/baseAction.cpp
++ ./src/gui/elems/actionEditor/baseAction.h
++ ./src/gui/elems/actionEditor/baseActionEditor.cpp
++ ./src/gui/elems/actionEditor/baseActionEditor.h
++ ./src/gui/elems/actionEditor/envelopeEditor.cpp
++ ./src/gui/elems/actionEditor/envelopeEditor.h
++ ./src/gui/elems/actionEditor/envelopePoint.cpp
++ ./src/gui/elems/actionEditor/envelopePoint.h
++ ./src/gui/elems/actionEditor/gridTool.cpp
++ ./src/gui/elems/actionEditor/gridTool.h
++ ./src/gui/elems/actionEditor/pianoItem.cpp
++ ./src/gui/elems/actionEditor/pianoItem.h
++ ./src/gui/elems/actionEditor/pianoRoll.cpp
++ ./src/gui/elems/actionEditor/pianoRoll.h
++ ./src/gui/elems/actionEditor/sampleAction.cpp
++ ./src/gui/elems/actionEditor/sampleAction.h
++ ./src/gui/elems/actionEditor/sampleActionEditor.cpp
++ ./src/gui/elems/actionEditor/sampleActionEditor.h
++ ./src/gui/elems/actionEditor/splitScroll.cpp
++ ./src/gui/elems/actionEditor/splitScroll.h
++ ./src/gui/elems/actionEditor/velocityEditor.cpp
++ ./src/gui/elems/actionEditor/velocityEditor.h
++ ./src/gui/elems/basics/box.cpp
++ ./src/gui/elems/basics/box.h
++ ./src/gui/elems/basics/boxtypes.cpp
++ ./src/gui/elems/basics/boxtypes.h
++ ./src/gui/elems/basics/button.cpp
++ ./src/gui/elems/basics/button.h
++ ./src/gui/elems/basics/check.cpp
++ ./src/gui/elems/basics/check.h
++ ./src/gui/elems/basics/choice.cpp
++ ./src/gui/elems/basics/choice.h
++ ./src/gui/elems/basics/dial.cpp
++ ./src/gui/elems/basics/dial.h
++ ./src/gui/elems/basics/group.cpp
++ ./src/gui/elems/basics/group.h
++ ./src/gui/elems/basics/input.cpp
++ ./src/gui/elems/basics/input.h
++ ./src/gui/elems/basics/liquidScroll.cpp
++ ./src/gui/elems/basics/liquidScroll.h
++ ./src/gui/elems/basics/pack.cpp
++ ./src/gui/elems/basics/pack.h
++ ./src/gui/elems/basics/progress.cpp
++ ./src/gui/elems/basics/progress.h
++ ./src/gui/elems/basics/resizerBar.cpp
++ ./src/gui/elems/basics/resizerBar.h
++ ./src/gui/elems/basics/scroll.cpp
++ ./src/gui/elems/basics/scroll.h
++ ./src/gui/elems/basics/scrollPack.cpp
++ ./src/gui/elems/basics/scrollPack.h
++ ./src/gui/elems/basics/slider.cpp
++ ./src/gui/elems/basics/slider.h
++ ./src/gui/elems/basics/split.cpp
++ ./src/gui/elems/basics/split.h
++ ./src/gui/elems/basics/statusButton.cpp
++ ./src/gui/elems/basics/statusButton.h
++ ./src/gui/elems/browser.cpp
++ ./src/gui/elems/browser.h
++ ./src/gui/elems/config/tabAudio.cpp
++ ./src/gui/elems/config/tabAudio.h
++ ./src/gui/elems/config/tabBehaviors.cpp
++ ./src/gui/elems/config/tabBehaviors.h
++ ./src/gui/elems/config/tabMidi.cpp
++ ./src/gui/elems/config/tabMidi.h
++ ./src/gui/elems/config/tabMisc.cpp
++ ./src/gui/elems/config/tabMisc.h
++ ./src/gui/elems/config/tabPlugins.cpp
++ ./src/gui/elems/config/tabPlugins.h
++ ./src/gui/elems/mainWindow/keyboard/channel.cpp
++ ./src/gui/elems/mainWindow/keyboard/channel.h
++ ./src/gui/elems/mainWindow/keyboard/channelButton.cpp
++ ./src/gui/elems/mainWindow/keyboard/channelButton.h
++ ./src/gui/elems/mainWindow/keyboard/channelMode.cpp
++ ./src/gui/elems/mainWindow/keyboard/channelMode.h
++ ./src/gui/elems/mainWindow/keyboard/channelStatus.cpp
++ ./src/gui/elems/mainWindow/keyboard/channelStatus.h
++ ./src/gui/elems/mainWindow/keyboard/column.cpp
++ ./src/gui/elems/mainWindow/keyboard/column.h
++ ./src/gui/elems/mainWindow/keyboard/keyboard.cpp
++ ./src/gui/elems/mainWindow/keyboard/keyboard.h
++ ./src/gui/elems/mainWindow/keyboard/midiChannel.h
++ ./src/gui/elems/mainWindow/keyboard/midiChannelButton.cpp
++ ./src/gui/elems/mainWindow/keyboard/midiChannelButton.h
++ ./src/gui/elems/mainWindow/keyboard/sampleChannel.cpp
++ ./src/gui/elems/mainWindow/keyboard/sampleChannel.h
++ ./src/gui/elems/mainWindow/keyboard/sampleChannelButton.cpp
++ ./src/gui/elems/mainWindow/keyboard/sampleChannelButton.h
++ ./src/gui/elems/mainWindow/mainIO.cpp
++ ./src/gui/elems/mainWindow/mainIO.h
++ ./src/gui/elems/mainWindow/mainMenu.cpp
++ ./src/gui/elems/mainWindow/mainMenu.h
++ ./src/gui/elems/mainWindow/mainTimer.cpp
++ ./src/gui/elems/mainWindow/mainTimer.h
++ ./src/gui/elems/mainWindow/mainTransport.cpp
++ ./src/gui/elems/mainWindow/mainTransport.h
++ ./src/gui/elems/mainWindow/sequencer.cpp
++ ./src/gui/elems/mainWindow/sequencer.h
++ ./src/gui/elems/midiIO/midiLearner.cpp
++ ./src/gui/elems/midiIO/midiLearner.h
++ ./src/gui/elems/midiIO/midiLearnerPack.cpp
++ ./src/gui/elems/midiIO/midiLearnerPack.h
++ ./src/gui/elems/plugin/pluginBrowser.cpp
++ ./src/gui/elems/plugin/pluginBrowser.h
++ ./src/gui/elems/plugin/pluginElement.cpp
++ ./src/gui/elems/plugin/pluginElement.h
++ ./src/gui/elems/plugin/pluginParameter.cpp
++ ./src/gui/elems/plugin/pluginParameter.h
++ ./src/gui/elems/sampleEditor/boostTool.cpp
++ ./src/gui/elems/sampleEditor/boostTool.h
++ ./src/gui/elems/sampleEditor/panTool.cpp
++ ./src/gui/elems/sampleEditor/panTool.h
++ ./src/gui/elems/sampleEditor/pitchTool.cpp
++ ./src/gui/elems/sampleEditor/pitchTool.h
++ ./src/gui/elems/sampleEditor/rangeTool.cpp
++ ./src/gui/elems/sampleEditor/rangeTool.h
++ ./src/gui/elems/sampleEditor/shiftTool.cpp
++ ./src/gui/elems/sampleEditor/shiftTool.h
++ ./src/gui/elems/sampleEditor/volumeTool.cpp
++ ./src/gui/elems/sampleEditor/volumeTool.h
++ ./src/gui/elems/sampleEditor/waveTools.cpp
++ ./src/gui/elems/sampleEditor/waveTools.h
++ ./src/gui/elems/sampleEditor/waveform.cpp
++ ./src/gui/elems/sampleEditor/waveform.h
++ ./src/gui/elems/soundMeter.cpp
++ ./src/gui/elems/soundMeter.h
++ ./src/gui/types.h
++ ./src/gui/ui.cpp
++ ./src/gui/ui.h
++ ./src/gui/updater.cpp
++ ./src/gui/updater.h
++ ./src/main.cpp
++ ./src/utils/cocoa.h
++ ./src/utils/cocoa.mm
++ ./src/utils/fs.cpp
++ ./src/utils/fs.h
++ ./src/utils/gui.cpp
++ ./src/utils/gui.h
++ ./src/utils/log.cpp
++ ./src/utils/log.h
++ ./src/utils/math.cpp
++ ./src/utils/math.h
++ ./src/utils/string.cpp
++ ./src/utils/string.h
++ ./src/utils/time.cpp
++ ./src/utils/time.h
++ ./src/utils/vector.h
++ ./src/utils/ver.cpp
++ ./src/utils/ver.h
++Copyright: 2010-2018, Giovanni A. Zuliani | Monocasual
++  2010-2019, Giovanni A. Zuliani | Monocasual
++  2010-2020, Giovanni A. Zuliani | Monocasual
++  2010-2021, Giovanni A. Zuliani | Monocasual
++License: GPL-3+
++ FIXME
++
++Files: ./.clang-format
++ ./CMakeLists.txt
++ ./ChangeLog
++ ./extras/com.giadamusic.Giada.desktop
++ ./extras/giada-logo.svg
++ ./extras/giada.icns
++ ./scripts/create_source_tarball.sh
++ ./src/deps/juce-config.h
++ ./src/ext/giada.ico
++ ./src/ext/resource.h
++ ./src/ext/resource.rc
++ ./tests/actionRecorder.cpp
++ ./tests/main.cpp
++ ./tests/midiLighter.cpp
++ ./tests/mocks/kernelMidiMock.h
++ ./tests/resources/test.wav
++ ./tests/samplePlayer.cpp
++ ./tests/utils.cpp
++ ./tests/wave.cpp
++ ./tests/waveFx.cpp
++ ./tests/waveManager.cpp
++ ./tests/waveReader.cpp
++Copyright: NONE
++License: UNKNOWN
++ FIXME
++
++Files: ./README.md
++Copyright: NONE
++License: GPL
++ FIXME
++
++Files: ./src/gui/elems/mainWindow/keyboard/midiChannel.cpp
++Copyright: G_GUI_UNIT10-G_GUI_UNIT17 Giovanni A. Zuliani | Monocasual
++License: GPL-3+
++ FIXME
++
++Files: ./COPYING
++Copyright: 2007, Free Software Foundation, Inc. <http://fsf.org/>
++License: UNKNOWN
++ FIXME
++
++Files: ./extras/com.giadamusic.Giada.metainfo.xml
++Copyright: 2010-2021, Giovanni A. Zuliani | Monocasual Laboratories -->
++License: UNKNOWN
++ FIXME
++
diff --cc debian/gbp.conf
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..4a6c3712ad30e25f6310a1b54687420e22c58da5
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,5 @@@
++[DEFAULT]
++pristine-tar = True
++sign-tags = True
++
++debian-branch = master
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..5790ec6df6a4448d15f02b26febd0c55bcb94ed1
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,14 @@@
++#!/bin/sh
++
++## script to initialize a cloned repository
++## with per (local) repository settings.
++
++# - ignore quilt's .pc/ directory
++# - enable the "--follow-tags" mode for pushing
++
++echo "tuning git-repository for ${NAME}"
++git config push.followTags true && echo "enabled push.followTags"
++
++GITEXCLUDE=".git/info/exclude"
++egrep "^/?\.pc/?$" "${GITEXCLUDE}" >/dev/null 2>&1 \
++  || (echo "/.pc/" >> "${GITEXCLUDE}" && echo "ignoring /.pc/")
diff --cc debian/giada.1
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..606f9019df7779444d636cef297ca2b7a2f471ec
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,34 @@@
++.\"                                      Hey, EMACS: -*- nroff -*-
++.\" First parameter, NAME, should be all caps
++.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
++.\" other parameters are allowed: see man(7), man(1)
++.TH GIADA 1 "May 23, 2015"
++.\" Please adjust this date whenever revising the manpage.
++.\"
++.\" Some roff macros, for reference:
++.\" .nh        disable hyphenation
++.\" .hy        enable hyphenation
++.\" .ad l      left justify
++.\" .ad b      justify to both left and right margins
++.\" .nf        disable filling
++.\" .fi        enable filling
++.\" .br        insert line break
++.\" .sp <n>    insert n+1 empty lines
++.\" for manpage-specific macros, see man(7)
++.\" .IX Title "GIADA 1"
++.SH "NAME"
++giada \- Hardcore Loop Machine.
++.SH "SYNOPSIS"
++.\" .IX Header "SYNOPSIS"
++giada
++.SH "DESCRIPTION"
++.\" .IX Header "DESCRIPTION"
++Free, minimal, hardcore audio tool for DJs, live performers and electronic musicians.
++Pick up your channel, fill it with samples or MIDI events and start the show by using
++this tiny piece of software as a loop machine, drum machine, sequencer,
++live sampler or yet as a plugin/effect host.
++.LP
++Giada aims to be a compact and portable virtual device for production use and live sets.
++.SH AUTHOR
++This manual page was written by Jaromír Mikeš <mira.mikes@seznam.cz>,
++for the Debian project (but may be used by others).
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..a6e6882eb16386a02ab9d5e29e5f1777c0e98e39
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,42 @@@
++.\"                                      Hey, EMACS: -*- nroff -*-
++.\" First parameter, NAME, should be all caps
++.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
++.\" other parameters are allowed: see man(7), man(1)
++.TH GIADA 1 "May 23, 2015"
++.\" Please adjust this date whenever revising the manpage.
++.\"
++.\" Some roff macros, for reference:
++.\" .nh        disable hyphenation
++.\" .hy        enable hyphenation
++.\" .ad l      left justify
++.\" .ad b      justify to both left and right margins
++.\" .nf        disable filling
++.\" .fi        enable filling
++.\" .br        insert line break
++.\" .sp <n>    insert n+1 empty lines
++.\" for manpage-specific macros, see man(7)
++.\".IX Title "GIADA 1"
++.SH "NOM"
++giada \- Machine de boucle pure et dure
++.SH "SYNOPSIS"
++.\".IX Header "SYNOPSIS"
++giada
++.SH "DESCRIPTION"
++.\".IX Header "DESCRIPTION"
++Outil audio pur et dur, minimal, libre, pour les DJs, les performeurs live et
++les musiciens électroniques.
++Choisissez votre canal, remplissez-le avec des échantillons ou des événements
++MIDI, et démarrez le spectacle en utilisant ce petit morceau de logiciel en tant
++que boucleur, boîte à rythme, séquenceur, échantillonneur live, ou encore comme
++un hôte de greffon/effet.
++.LP
++Giada se veut être un périphérique virtuel compact et portable pour une
++utilisation en production et un ensemble live.
++.SH AUTEUR
++.PP
++Cette page de manuel (en anglais) a été écrite par Jaromír Mikeš
++<mira.mikes@seznam.cz>, pour le projet Debian (mais peut être utilisée par
++d'autres).
++.PP
++Elle a été traduite en français par Olivier Humbert <trebmuh@tuxfamily.org> pour
++le projet LibraZiK (et peut également être utilisée par d'autres).
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..c014cc78f14aef28af5df7ea414a7ca3cdffee87
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,2 @@@
++debian/giada.1
++debian/giada.fr.1
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..cc45e02418bb2e4625b9d54fc59e91905872b59b
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,18 @@@
++missing sources for giada
++=========================
++
++this directory contains sources that are missing from upstream's tarball.
++
++
++mcl-atomic-swapper
++==================
++
++is a tiny (1 source file) module released under the GPLv3+,
++maintained by giada upstream in a separate repository.
++
++mcl-audio-buffer
++================
++
++is a tiny (2 source files) module released under the GPLv3+,
++maintained by giada upstream in a separate repository.
++
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e3ca0d526647f511ac49c863f258d361dcca0909
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,163 @@@
++/* -----------------------------------------------------------------------------
++ *
++ * Atomic Swapper
++ *
++ * -----------------------------------------------------------------------------
++ *
++ * Copyright (C) 2021 Giovanni A. Zuliani | Monocasual Laboratories
++ *
++ * This file is part of Atomic Swapper.
++ *
++ * Atomic Swapper is free software: you can
++ * redistribute it and/or modify it under the terms of the GNU General
++ * Public License as published by the Free Software Foundation, either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * Atomic Swapper is distributed in the hope that it
++ * will be useful, but WITHOUT ANY WARRANTY; without even the implied
++ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++ * See the GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with Atomic Swapper. If not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * -------------------------------------------------------------------------- */
++
++#ifndef MONOCASUAL_ATOMIC_SWAPPER_H
++#define MONOCASUAL_ATOMIC_SWAPPER_H
++
++#include <array>
++#include <atomic>
++
++namespace mcl
++{
++template <typename T>
++class AtomicSwapper
++{
++public:
++      class RtLock
++      {
++              friend AtomicSwapper;
++
++      public:
++              RtLock(AtomicSwapper& s)
++              : m_swapper(s)
++              {
++                      m_swapper.rt_lock();
++              }
++
++              ~RtLock()
++              {
++                      m_swapper.rt_unlock();
++              }
++
++              const T& get() const
++              {
++                      return m_swapper.rt_get();
++              }
++
++      private:
++              AtomicSwapper& m_swapper;
++      };
++
++      AtomicSwapper()
++      {
++              static_assert(std::is_assignable_v<T, T>);
++      }
++
++      /* isLocked
++      Returns true if the busy bit is currently set, that is if the realtime 
++      thread is reading its copy of data. */
++
++      bool isLocked() const
++      {
++              return m_bits.load() & BIT_BUSY;
++      }
++
++      /* get (1)
++      Returns local data for non-realtime thread. */
++
++      const T& get() const
++      {
++              return m_data[(m_bits.load() & BIT_INDEX) ^ 1];
++      }
++
++      /* get (2)
++      As above, non-const version. */
++
++      T& get()
++      {
++              return const_cast<T&>(static_cast<const AtomicSwapper&>(*this).get());
++      }
++
++      /* swap
++      Core function: swaps the realtime data with the non-realtime one. Waits for
++      the realtime thread until it has finished reading its own copy of data. Only
++      then the indexes are swapped atomically. */
++
++      void swap()
++      {
++              int bits = m_bits.load();
++
++              /* Wait for the realtime thread to finish, i.e. until the BUSY bit 
++              becomes zero. Only then, swap indexes. This will let the realtime thread 
++              to pick the updated data on its next cycle. */
++              int desired;
++              do
++              {
++                      bits    = bits & ~BIT_BUSY;               // Expected: current value without busy bit set
++                      desired = (bits ^ BIT_INDEX) & BIT_INDEX; // Desired: flipped (xor) index
++              } while (!m_bits.compare_exchange_weak(bits, desired));
++
++              bits = desired;
++
++              /* After the swap above, m_data[(bits & BIT_INDEX) ^ 1] has become the 
++              non-realtime slot and it points to the data previously read by the
++              realtime thread. That data is old, so update it: overwrite it with the 
++              realtime data in the realtime slot (m_data[bits & BIT_INDEX]) that is 
++              currently being read by the realtime thread. */
++              m_data[(bits & BIT_INDEX) ^ 1] = m_data[bits & BIT_INDEX];
++      }
++
++private:
++      static constexpr int BIT_INDEX = (1 << 0); // 0001
++      static constexpr int BIT_BUSY  = (1 << 1); // 0010
++
++      /* [realtime] lock
++      Marks the data as busy. Used when the realtime thread starts reading its own 
++      copy of data. Can't call this directly (it's private), use the scoped lock
++      RtLock class above. */
++
++      void rt_lock()
++      {
++              /* Set the busy bit and also get the current index. */
++              m_index = m_bits.fetch_or(BIT_BUSY) & BIT_INDEX;
++      }
++
++      /* [realtime] unlock
++      Marks the data as free. Used when the realtime thread is done with reading 
++      its own copy of data. Can't call this directly (it's private), use the 
++      scoped lock     RtLock class above. */
++
++      void rt_unlock()
++      {
++              m_bits.store(m_index & BIT_INDEX);
++      }
++
++      /* [realtime] get
++      Get data currently being ready by the realtime thread. Can't call this 
++      directly (it's private), use the scoped lock RtLock class above.*/
++
++      const T& rt_get() const
++      {
++              return m_data[m_bits.load() & BIT_INDEX];
++      }
++
++      std::array<T, 2> m_data;
++      std::atomic<int> m_bits{0};
++      int              m_index{0};
++};
++} // namespace mcl
++
++#endif
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..1edc2abfdc304024bb936cbf40c73f269440ea0a
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,299 @@@
++/* -----------------------------------------------------------------------------
++ *
++ * AudioBuffer
++ *
++ * -----------------------------------------------------------------------------
++ *
++ * Copyright (C) 2021 Giovanni A. Zuliani | Monocasual
++ *
++ * This file is part of AudioBuffer.
++ *
++ * AudioBuffer is free software: you can redistribute it and/or modify it under 
++ * the terms of the GNU General Public License as published by the Free Software 
++ * Foundation, either version 3 of the License, or (at your option) any later 
++ * version.
++ *
++ * AudioBuffer is distributed in the hope that it will be useful, but WITHOUT 
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
++ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 
++ * details.
++ *
++ * You should have received a copy of the GNU General Public License along with 
++ * AudioBuffer. If not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * -------------------------------------------------------------------------- */
++
++#include "audioBuffer.hpp"
++#include <algorithm>
++#include <cassert>
++
++namespace mcl
++{
++AudioBuffer::AudioBuffer()
++: m_data(nullptr)
++, m_size(0)
++, m_channels(0)
++, m_viewing(false)
++{
++}
++
++/* -------------------------------------------------------------------------- */
++
++AudioBuffer::AudioBuffer(int size, int channels)
++: AudioBuffer()
++{
++      alloc(size, channels);
++}
++
++/* -------------------------------------------------------------------------- */
++
++AudioBuffer::AudioBuffer(float* data, int size, int channels)
++: m_data(data)
++, m_size(size)
++, m_channels(channels)
++, m_viewing(true)
++{
++      assert(channels <= NUM_CHANS);
++}
++
++/* -------------------------------------------------------------------------- */
++
++AudioBuffer::AudioBuffer(const AudioBuffer& o)
++{
++      copy(o);
++}
++
++/* -------------------------------------------------------------------------- */
++
++AudioBuffer::AudioBuffer(AudioBuffer&& o)
++{
++      move(std::move(o));
++}
++
++/* -------------------------------------------------------------------------- */
++
++AudioBuffer::~AudioBuffer()
++{
++      if (!m_viewing)
++              free();
++}
++
++/* -------------------------------------------------------------------------- */
++
++AudioBuffer& AudioBuffer::operator=(const AudioBuffer& o)
++{
++      if (this == &o)
++              return *this;
++      copy(o);
++      return *this;
++}
++
++/* -------------------------------------------------------------------------- */
++
++AudioBuffer& AudioBuffer::operator=(AudioBuffer&& o)
++{
++      if (this == &o)
++              return *this;
++      move(std::move(o));
++      return *this;
++}
++
++/* -------------------------------------------------------------------------- */
++
++float* AudioBuffer::operator[](int offset) const
++{
++      assert(m_data != nullptr);
++      assert(offset < m_size);
++      return m_data + (offset * m_channels);
++}
++
++/* -------------------------------------------------------------------------- */
++
++void AudioBuffer::clear(int a, int b)
++{
++      if (m_data == nullptr)
++              return;
++      if (b == -1)
++              b = m_size;
++      std::fill_n(m_data + (a * m_channels), (b - a) * m_channels, 0.0);
++}
++
++/* -------------------------------------------------------------------------- */
++
++int  AudioBuffer::countFrames() const { return m_size; }
++int  AudioBuffer::countSamples() const { return m_size * m_channels; }
++int  AudioBuffer::countChannels() const { return m_channels; }
++bool AudioBuffer::isAllocd() const { return m_data != nullptr; }
++
++/* -------------------------------------------------------------------------- */
++
++float AudioBuffer::getPeak(int channel) const
++{
++      assert(channel < m_channels);
++
++      float peak = 0.0f;
++      for (int i = 0; i < countFrames(); i++)
++              peak = std::max(peak, (*this)[i][channel]);
++      return peak;
++}
++
++/* -------------------------------------------------------------------------- */
++
++void AudioBuffer::alloc(int size, int channels)
++{
++      assert(channels <= NUM_CHANS);
++
++      free();
++      m_size     = size;
++      m_channels = channels;
++      m_data     = new float[m_size * m_channels];
++      clear();
++}
++
++/* -------------------------------------------------------------------------- */
++
++void AudioBuffer::free()
++{
++      if (m_data == nullptr)
++              return;
++      delete[] m_data;
++      m_data     = nullptr;
++      m_size     = 0;
++      m_channels = 0;
++      m_viewing  = false;
++}
++
++/* -------------------------------------------------------------------------- */
++
++void AudioBuffer::sum(const AudioBuffer& b, int framesToCopy, int srcOffset,
++    int destOffset, float gain, Pan pan)
++{
++      copyData<Operation::SUM>(b, framesToCopy, srcOffset, destOffset, gain, pan);
++}
++
++void AudioBuffer::set(const AudioBuffer& b, int framesToCopy, int srcOffset,
++    int destOffset, float gain, Pan pan)
++{
++      copyData<Operation::SET>(b, framesToCopy, srcOffset, destOffset, gain, pan);
++}
++
++void AudioBuffer::sum(const AudioBuffer& b, float gain, Pan pan)
++{
++      copyData<Operation::SUM>(b, -1, 0, 0, gain, pan);
++}
++
++void AudioBuffer::set(const AudioBuffer& b, float gain, Pan pan)
++{
++      copyData<Operation::SET>(b, -1, 0, 0, gain, pan);
++}
++
++/* -------------------------------------------------------------------------- */
++
++template <AudioBuffer::Operation O>
++void AudioBuffer::copyData(const AudioBuffer& b, int framesToCopy,
++    int srcOffset, int destOffset, float gain, Pan pan)
++{
++      const int  srcChannels  = b.countChannels();
++      const int  destChannels = countChannels();
++      const bool sameChannels = srcChannels == destChannels;
++
++      assert(m_data != nullptr);
++      assert(destOffset >= 0 && destOffset < m_size);
++      assert(srcChannels <= destChannels);
++
++      /* Make sure the amount of frames to copy lies within the current buffer 
++      size. */
++
++      framesToCopy = framesToCopy == -1 ? b.countFrames() : framesToCopy;
++      framesToCopy = std::min(framesToCopy, m_size - destOffset);
++
++      /* Case 1) source has less channels than this one: brutally spread source's
++      channel 0 over this one (TODO - maybe mixdown source channels first?)
++         Case 2) source has same amount of channels: copy them 1:1. */
++
++      for (int destF = 0, srcF = srcOffset; destF < framesToCopy && destF < b.countFrames(); destF++, srcF++)
++      {
++              for (int ch = 0; ch < destChannels; ch++)
++              {
++                      if constexpr (O == Operation::SUM)
++                              sum(destF + destOffset, ch, b[srcF][sameChannels ? ch : 0] * gain * pan[ch]);
++                      else
++                              set(destF + destOffset, ch, b[srcF][sameChannels ? ch : 0] * gain * pan[ch]);
++              }
++      }
++}
++
++/* -------------------------------------------------------------------------- */
++
++void AudioBuffer::applyGain(float g)
++{
++      for (int i = 0; i < countSamples(); i++)
++              m_data[i] *= g;
++}
++
++/* -------------------------------------------------------------------------- */
++
++void AudioBuffer::sum(int f, int channel, float val) { (*this)[f][channel] += val; }
++void AudioBuffer::set(int f, int channel, float val) { (*this)[f][channel] = val; }
++
++/* -------------------------------------------------------------------------- */
++
++void AudioBuffer::move(AudioBuffer&& o)
++{
++      assert(o.countChannels() <= NUM_CHANS);
++
++      m_data     = o.m_data;
++      m_size     = o.m_size;
++      m_channels = o.m_channels;
++      m_viewing  = o.m_viewing;
++
++      o.m_data     = nullptr;
++      o.m_size     = 0;
++      o.m_channels = 0;
++      o.m_viewing  = false;
++}
++
++/* -------------------------------------------------------------------------- */
++
++void AudioBuffer::copy(const AudioBuffer& o)
++{
++      m_data     = new float[o.m_size * o.m_channels];
++      m_size     = o.m_size;
++      m_channels = o.m_channels;
++      m_viewing  = o.m_viewing;
++
++      std::copy(o.m_data, o.m_data + (o.m_size * o.m_channels), m_data);
++}
++
++/* -------------------------------------------------------------------------- */
++
++void AudioBuffer::forEachFrame(std::function<void(float*, int)> f)
++{
++      for (int i = 0; i < countFrames(); i++)
++              f((*this)[i], i);
++}
++
++/* -------------------------------------------------------------------------- */
++
++void AudioBuffer::forEachChannel(int frame, std::function<void(float&, int)> f)
++{
++      assert(frame < m_size);
++
++      for (int i = 0; i < countChannels(); i++)
++              f((*this)[frame][i], i);
++}
++
++/* -------------------------------------------------------------------------- */
++
++void AudioBuffer::forEachSample(std::function<void(float&, int)> f)
++{
++      for (int i = 0; i < countSamples(); i++)
++              f(m_data[i], i);
++}
++
++/* -------------------------------------------------------------------------- */
++
++template void AudioBuffer::copyData<AudioBuffer::Operation::SUM>(const AudioBuffer&, int, int, int, float, Pan);
++template void AudioBuffer::copyData<AudioBuffer::Operation::SET>(const AudioBuffer&, int, int, int, float, Pan);
++} // namespace mcl
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..d77cde06c5fdbf8b0d07e596fee8307e8ac141e0
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,179 @@@
++/* -----------------------------------------------------------------------------
++ *
++ * AudioBuffer
++ *
++ * -----------------------------------------------------------------------------
++ *
++ * Copyright (C) 2021 Giovanni A. Zuliani | Monocasual
++ *
++ * This file is part of AudioBuffer.
++ *
++ * AudioBuffer is free software: you can redistribute it and/or modify it under 
++ * the terms of the GNU General Public License as published by the Free Software 
++ * Foundation, either version 3 of the License, or (at your option) any later 
++ * version.
++ *
++ * AudioBuffer is distributed in the hope that it will be useful, but WITHOUT 
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
++ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 
++ * details.
++ *
++ * You should have received a copy of the GNU General Public License along with 
++ * AudioBuffer. If not, see
++ * <http://www.gnu.org/licenses/>.
++ *
++ * -------------------------------------------------------------------------- */
++
++#ifndef MONOCASUAL_AUDIO_BUFFER_H
++#define MONOCASUAL_AUDIO_BUFFER_H
++
++#include <array>
++#include <functional>
++
++namespace mcl
++{
++/* AudioBuffer
++A class that holds a buffer filled with audio data. NOTE: currently it only
++supports 2 channels (stereo). Give it a mono stream and it will convert it to
++stereo. Give it a multichannel stream and it will throw an assertion. */
++
++class AudioBuffer
++{
++public:
++      static constexpr int NUM_CHANS = 2;
++
++      using Pan = std::array<float, NUM_CHANS>;
++
++      /* AudioBuffer (1)
++      Creates an empty (and invalid) audio buffer. */
++
++      AudioBuffer();
++
++      /* AudioBuffer (2)
++      Creates an audio buffer and allocates memory for size * channels frames. */
++
++      AudioBuffer(int size, int channels);
++
++      /* AudioBuffer (3)
++      Creates an audio buffer out of a raw pointer. AudioBuffer created this way
++      is instructed not to free the owned data on destruction. */
++
++      AudioBuffer(float* data, int size, int channels);
++
++      /* AudioBuffer(const AudioBuffer&)
++      Copy constructor. */
++
++      AudioBuffer(const AudioBuffer& o);
++
++      /* AudioBuffer(AudioBuffer&&)
++      Move constructor. */
++
++      AudioBuffer(AudioBuffer&& o);
++
++      /* ~AudioBuffer
++      Destructor. */
++
++      ~AudioBuffer();
++
++      /* operator = (const AudioBuffer& o)
++      Copy assignment operator. */
++
++      AudioBuffer& operator=(const AudioBuffer& o);
++
++      /* operator = (AudioBuffer&& o)
++      Move assignment operator. */
++
++      AudioBuffer& operator=(AudioBuffer&& o);
++
++      /* operator []
++      Given a frame 'offset', returns a pointer to it. This is useful for digging 
++      inside a frame, i.e. parsing each channel. How to use it:
++
++              for (int k=0; k<buffer->countFrames(), k++)
++                      for (int i=0; i<buffer->countChannels(); i++)
++                              ... buffer[k][i] ...
++
++      Also note that buffer[0] will give you a pointer to the whole internal data
++      array. */
++
++      float* operator[](int offset) const;
++
++      int  countFrames() const;
++      int  countSamples() const;
++      int  countChannels() const;
++      bool isAllocd() const;
++
++      /* getPeak
++      Returns the highest value from the specified channel. */
++
++      float getPeak(int channel) const;
++
++      void alloc(int size, int channels);
++      void free();
++
++      /* sum, set (1)
++      Merges (sum) or copies (set) 'framesToCopy' frames of buffer 'b' onto this 
++      one. If 'framesToCopy' is -1 the whole buffer will be copied. If 'b' has 
++      less channels than this one, they will be spread over the current ones. 
++      Buffer 'b' MUST NOT contain more channels than this one. */
++
++      void sum(const AudioBuffer& b, int framesToCopy = -1, int srcOffset = 0,
++          int destOffset = 0, float gain = 1.0f, Pan pan = {1.0f, 1.0f});
++      void set(const AudioBuffer& b, int framesToCopy = -1, int srcOffset = 0,
++          int destOffset = 0, float gain = 1.0f, Pan pan = {1.0f, 1.0f});
++
++      /* sum, set (2)
++      Same as sum, set (1) without boundaries or offsets: it just copies as much
++      as possibile. */
++
++      void sum(const AudioBuffer& b, float gain = 1.0f, Pan pan = {1.0f, 1.0f});
++      void set(const AudioBuffer& b, float gain = 1.0f, Pan pan = {1.0f, 1.0f});
++
++      /* clear
++      Clears the internal data by setting all bytes to 0.0f. Optional parameters
++      'a' and 'b' set the range. */
++
++      void clear(int a = 0, int b = -1);
++
++      void applyGain(float g);
++
++      /* forEachFrame
++      Applies a function to each frame in the audio buffer. */
++
++      void forEachFrame(std::function<void(float* /*channels*/, int /*numFrame*/)>);
++
++      /* forEachChannel
++      Applies a function to each channel in the given frame. */
++
++      void forEachChannel(int frame, std::function<void(float& /*value*/, int /*numChannel*/)>);
++
++      /* forEachSample
++      Applies a function to each sample in the audio buffer. */
++
++      void forEachSample(std::function<void(float& /*value*/, int /*numSample*/)>);
++
++private:
++      enum class Operation
++      {
++              SUM,
++              SET
++      };
++
++      template <Operation O = Operation::SET>
++      void copyData(const AudioBuffer& b, int framesToCopy = -1,
++          int srcOffset = 0, int destOffset = 0, float gain = 1.0f,
++          Pan pan = {1.0f, 1.0f});
++
++      void move(AudioBuffer&& o);
++      void copy(const AudioBuffer& o);
++      void sum(int f, int channel, float val);
++      void set(int f, int channel, float val);
++
++      float* m_data;
++      int    m_size;
++      int    m_channels;
++      bool   m_viewing;
++};
++} // namespace mcl
++
++#endif
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..4b5f32c432965d1c2fb5bfcaa0e890571fe702bf
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,586 @@@
++From: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
++Date: Fri, 17 Dec 2021 10:37:21 +0100
++Subject: Patch-in dependency library 'geompp'
++
++Origin: upstream
++Forwarded: not-needed
++Last-Update: 2021-08-30
++
++'geompp' is a GPL-3 licensed header-only helper-library by giada-upstream
++that is only referenced via a gitmodule; we include it via quilt
++Last-Update: 2021-08-30
++---
++ src/deps/geompp/src/line.hpp  |  81 +++++++++++++++
++ src/deps/geompp/src/point.hpp |  80 ++++++++++++++
++ src/deps/geompp/src/range.hpp |  61 +++++++++++
++ src/deps/geompp/src/rect.hpp  | 236 ++++++++++++++++++++++++++++++++++++++++++
++ 4 files changed, 458 insertions(+)
++ create mode 100644 src/deps/geompp/src/line.hpp
++ create mode 100644 src/deps/geompp/src/point.hpp
++ create mode 100644 src/deps/geompp/src/range.hpp
++ create mode 100644 src/deps/geompp/src/rect.hpp
++
++--- /dev/null
+++++ giada/src/deps/geompp/src/line.hpp
++@@ -0,0 +1,81 @@
+++/* -----------------------------------------------------------------------------
+++ *
+++ * geompp - Basic geometrical utilities for C++.
+++ *
+++ * -----------------------------------------------------------------------------
+++ *
+++ * Copyright (C) 2021 Giovanni A. Zuliani | Monocasual Laboratories
+++ *
+++ * This file is part of geompp - Basic geometrical utilities for C++.
+++ *
+++ * geompp - Basic geometrical utilities for C++ is free software: you can
+++ * redistribute it and/or modify it under the terms of the GNU General
+++ * Public License as published by the Free Software Foundation, either
+++ * version 3 of the License, or (at your option) any later version.
+++ *
+++ * geompp - Basic geometrical utilities for C++ is distributed in the hope that 
+++ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+++ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+++ * See the GNU General Public License for more details.
+++ *
+++ * You should have received a copy of the GNU General Public License
+++ * along with geompp - Basic geometrical utilities for C++. If not, see
+++ * <http://www.gnu.org/licenses/>.
+++ *
+++ * -------------------------------------------------------------------------- */
+++
+++#ifndef GEOMPP_LINE_HH
+++#define GEOMPP_LINE_HH
+++
+++namespace geompp
+++{
+++template <typename T>
+++class Line
+++{
+++public:
+++     /* Line (1) - invalid. */
+++
+++     constexpr Line()
+++     : Line(0, 0, 0, 0)
+++     {
+++     }
+++
+++     /* Line (2) - normal. */
+++
+++     constexpr Line(T x1, T y1, T x2, T y2)
+++     : x1(x1)
+++     , y1(y1)
+++     , x2(x2)
+++     , y2(y2)
+++     {
+++     }
+++
+++     /* shiftX
+++    Horizontally shifts the line of a certain amount. */
+++
+++     void shiftX(T amount)
+++     {
+++             x1 += amount;
+++             x2 += amount;
+++     }
+++
+++     /* with[...]
+++    Returns a copy of this Line with new coordintates. */
+++
+++     Line withX1(T v) const { return {v, y1, x2, y2}; }
+++     Line withY1(T v) const { return {x1, v, x2, y2}; }
+++     Line withX2(T v) const { return {x1, y1, v, y2}; }
+++     Line withY2(T v) const { return {x1, y1, x2, v}; }
+++     Line withX(T v) const { return {v, y1, v, y2}; }
+++     Line withY(T v) const { return {x1, v, x2, v}; }
+++
+++     /* withShiftedX
+++    Returns a new Line horizontally shifted by a certain amount. */
+++
+++     Line withShiftedX(T amount) const { return {x1 + amount, y1, x2 + amount, y2}; }
+++
+++     T x1, y1, x2, y2;
+++};
+++} // namespace geompp
+++
+++#endif
++\ No newline at end of file
++--- /dev/null
+++++ giada/src/deps/geompp/src/point.hpp
++@@ -0,0 +1,80 @@
+++/* -----------------------------------------------------------------------------
+++ *
+++ * geompp - Basic geometrical utilities for C++.
+++ *
+++ * -----------------------------------------------------------------------------
+++ *
+++ * Copyright (C) 2021 Giovanni A. Zuliani | Monocasual Laboratories
+++ *
+++ * This file is part of geompp - Basic geometrical utilities for C++.
+++ *
+++ * geompp - Basic geometrical utilities for C++ is free software: you can
+++ * redistribute it and/or modify it under the terms of the GNU General
+++ * Public License as published by the Free Software Foundation, either
+++ * version 3 of the License, or (at your option) any later version.
+++ *
+++ * geompp - Basic geometrical utilities for C++ is distributed in the hope that 
+++ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+++ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+++ * See the GNU General Public License for more details.
+++ *
+++ * You should have received a copy of the GNU General Public License
+++ * along with geompp - Basic geometrical utilities for C++. If not, see
+++ * <http://www.gnu.org/licenses/>.
+++ *
+++ * -------------------------------------------------------------------------- */
+++
+++#ifndef GEOMPP_POINT_HH
+++#define GEOMPP_POINT_HH
+++
+++#include <cassert>
+++
+++namespace geompp
+++{
+++template <typename T>
+++class Point
+++{
+++public:
+++     constexpr Point()
+++     : Point(0, 0)
+++     {
+++     }
+++
+++     constexpr Point(T x, T y)
+++     : x(x)
+++     , y(y)
+++     {
+++     }
+++
+++     bool operator==(const Point<T>& o) const
+++     {
+++             return x == o.x && y == o.y;
+++     }
+++
+++     bool operator!=(const Point<T>& o) const
+++     {
+++             return !(*this == o);
+++     }
+++
+++     Point<T> operator+(const Point<T>& o) const
+++     {
+++             return {x + o.x, y + o.y};
+++     }
+++
+++     Point<T> operator-(const Point<T>& o) const
+++     {
+++             return {x - o.x, y - o.y};
+++     }
+++
+++     /* with[...]
+++    Returns a copy of this Point with a new coordinate. */
+++
+++     Point<T> withX(T v) const { return {v, y}; }
+++     Point<T> withY(T v) const { return {x, v}; }
+++
+++     T x;
+++     T y;
+++};
+++} // namespace geompp
+++
+++#endif
++--- /dev/null
+++++ giada/src/deps/geompp/src/range.hpp
++@@ -0,0 +1,76 @@
+++/* -----------------------------------------------------------------------------
+++ *
+++ * geompp - Basic geometrical utilities for C++.
+++ *
+++ * -----------------------------------------------------------------------------
+++ *
+++ * Copyright (C) 2021 Giovanni A. Zuliani | Monocasual Laboratories
+++ *
+++ * This file is part of geompp - Basic geometrical utilities for C++.
+++ *
+++ * geompp - Basic geometrical utilities for C++ is free software: you can
+++ * redistribute it and/or modify it under the terms of the GNU General
+++ * Public License as published by the Free Software Foundation, either
+++ * version 3 of the License, or (at your option) any later version.
+++ *
+++ * geompp - Basic geometrical utilities for C++ is distributed in the hope that 
+++ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+++ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+++ * See the GNU General Public License for more details.
+++ *
+++ * You should have received a copy of the GNU General Public License
+++ * along with geompp - Basic geometrical utilities for C++. If not, see
+++ * <http://www.gnu.org/licenses/>.
+++ *
+++ * -------------------------------------------------------------------------- */
+++
+++#ifndef GEOMPP_RANGE_HH
+++#define GEOMPP_RANGE_HH
+++
+++#include <cassert>
+++
+++namespace geompp
+++{
+++template <typename T>
+++class Range
+++{
+++public:
+++     constexpr Range() // Invalid default range
+++     : a(0)
+++     , b(0)
+++     {
+++     }
+++
+++     constexpr Range(T a, T b)
+++     : a(a)
+++     , b(b)
+++     {
+++             assert(a < b);
+++     }
+++
+++     Range<T> operator*(const T m) const { return {a * m, b * m}; }
+++     Range<T> operator*=(const T m) const { return {a * m, b * m}; }
+++     Range<T> operator/(const T m) const { return {a / m, b / m}; }
+++     Range<T> operator/=(const T m) const { return {a / m, b / m}; }
+++     Range<T> operator+(const T m) const { return {a + m, b + m}; }
+++     Range<T> operator+=(const T m) const { return {a + m, b + m}; }
+++     Range<T> operator-(const T m) const { return {a - m, b - m}; }
+++     Range<T> operator-=(const T m) const { return {a - m, b - m}; }
+++
+++     T getLength() const { return b - a; }
+++
+++     bool isValid() const
+++     {
+++             return a < b;
+++     }
+++
+++     bool contains(T t) const
+++     {
+++             return t >= a && t < b;
+++     }
+++
+++     T a, b;
+++};
+++} // namespace geompp
+++
+++#endif
++--- /dev/null
+++++ giada/src/deps/geompp/src/rect.hpp
++@@ -0,0 +1,234 @@
+++/* -----------------------------------------------------------------------------
+++ *
+++ * geompp - Basic geometrical utilities for C++.
+++ *
+++ * -----------------------------------------------------------------------------
+++ *
+++ * Copyright (C) 2021 Giovanni A. Zuliani | Monocasual Laboratories
+++ *
+++ * This file is part of geompp - Basic geometrical utilities for C++.
+++ *
+++ * geompp - Basic geometrical utilities for C++ is free software: you can
+++ * redistribute it and/or modify it under the terms of the GNU General
+++ * Public License as published by the Free Software Foundation, either
+++ * version 3 of the License, or (at your option) any later version.
+++ *
+++ * geompp - Basic geometrical utilities for C++ is distributed in the hope that 
+++ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+++ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+++ * See the GNU General Public License for more details.
+++ *
+++ * You should have received a copy of the GNU General Public License
+++ * along with geompp - Basic geometrical utilities for C++. If not, see
+++ * <http://www.gnu.org/licenses/>.
+++ *
+++ * -------------------------------------------------------------------------- */
+++
+++#ifndef GEOMPP_RECT_HH
+++#define GEOMPP_RECT_HH
+++
+++#include "border.hpp"
+++#include "line.hpp"
+++#include "point.hpp"
+++#include "range.hpp"
+++
+++namespace geompp
+++{
+++template <typename T>
+++class Rect
+++{
+++public:
+++     /* Rect (1) 
+++    Invalid rectangle. */
+++
+++     constexpr Rect()
+++     : Rect(0, 0, 0, 0)
+++     {
+++     }
+++
+++     /* Rect (2) 
+++    Normal rectangle. */
+++
+++     constexpr Rect(T x, T y, T w, T h)
+++     : x(x)
+++     , y(y)
+++     , w(w)
+++     , h(h)
+++     , xw(x + w)
+++     , yh(y + h)
+++     {
+++     }
+++
+++     void setX(T v)
+++     {
+++             x  = v;
+++             xw = x + w;
+++     }
+++
+++     void setY(T v)
+++     {
+++             y  = v;
+++             yh = y + h;
+++     }
+++
+++     void setW(T v)
+++     {
+++             w  = v;
+++             xw = x + w;
+++     }
+++
+++     void setH(T v)
+++     {
+++             h  = v;
+++             yh = y + h;
+++     }
+++
+++     /* setPosition
+++     Sets the top-left corner to Point 'p'. */
+++
+++     void setPosition(Point<T> p)
+++     {
+++             setX(p.x);
+++             setY(p.y);
+++     }
+++
+++     /* shift[...]
+++     Shifts the rectangle by a certain amount. */
+++
+++     void shiftX(T amount)
+++     {
+++             x += amount;
+++             xw = x + w;
+++     }
+++
+++     void shiftY(T amount)
+++     {
+++             y += amount;
+++             yh = y + h;
+++     }
+++
+++     /* trim[..]
+++    Removes 'amount' from the one of the edges. */
+++
+++     void trimLeft(T amount)
+++     {
+++             x += amount;
+++             w -= amount;
+++     }
+++
+++     void trimRight(T amount)
+++     {
+++             w -= amount;
+++             xw = x + w;
+++     }
+++
+++     void trimTop(T amount)
+++     {
+++             y += amount;
+++             h -= amount;
+++     }
+++
+++     void trimBottom(T amount)
+++     {
+++             h -= amount;
+++             yh = y + h;
+++     }
+++
+++     /* reduce
+++    Reduces all four sides by a certain Border. */
+++
+++     void reduce(Border<T> b)
+++     {
+++             x += b.left;
+++             y += b.top;
+++             w -= b.left + b.right;
+++             h -= b.top + b.bottom;
+++             xw = x + w;
+++             yh = y + h;
+++     }
+++
+++     /* isValid
+++     True if this Rect has size greater than zero. */
+++
+++     bool isValid() const { return w > 0 && h > 0; }
+++
+++     /* expand (1), (2)
+++     The opposite of reduce (1), (2). */
+++
+++     void expand(T amountX, T amountY) { reduce(-amountX, -amountY); }
+++     void expand(T amount) { reduce(-amount); }
+++
+++     /* with[...]
+++    Returns a copy of this Rect with a new position/size. */
+++
+++     Rect<T> withX(T v) const { return {v, y, w, h}; }
+++     Rect<T> withY(T v) const { return {x, v, w, h}; }
+++     Rect<T> withW(T v) const { return {x, y, v, h}; }
+++     Rect<T> withH(T v) const { return {x, y, w, v}; }
+++
+++     /* withPosition
+++     Returns a copy of this Rect with a new top-left corner given by Point 'p'. */
+++
+++     Rect<T> withPosition(Point<T> p) const { return {p.x, p.y, w, h}; }
+++
+++     /* withShifted[...]
+++     Returns a copy of this Rect shifted by a certain amount. */
+++
+++     Rect<T> withShiftedX(T amount) const { return {x + amount, y, w, h}; }
+++     Rect<T> withShiftedY(T amount) const { return {x, y + amount, w, h}; }
+++
+++     /* withTrimmed[...]
+++    Returns a copy of this Rect with 'amount' removed from the one of the 
+++    edges. */
+++
+++     Rect<T> withTrimmedLeft(T amount) const { return {x + amount, y, w - amount, h}; }
+++     Rect<T> withTrimmedRight(T amount) const { return {x, y, w - amount, h}; }
+++     Rect<T> withTrimmedTop(T amount) const { return {x, y + amount, w, h - amount}; }
+++     Rect<T> withTrimmedBottom(T amount) const { return {x, y, w, h - amount}; }
+++
+++     /* get[Width|Height]AsLine
+++    Returns width or height as a new Line object. */
+++
+++     Line<T> getWidthAsLine() const { return Line(x, y, xw - 1, y); }
+++     Line<T> getHeightAsLine() const { return Line(x, y, x, yh - 1); }
+++
+++     Point<T> getPosition() const { return Point(x, y); }
+++
+++     /* reduced 
+++    Returns a copy of this Rect with all four sides reduced by a certain Border. */
+++
+++     Rect<T> reduced(Border<T> b) const
+++     {
+++             Rect r = *this;
+++             r.reduce(b);
+++             return r;
+++     }
+++
+++     /* expanded (1), (2)
+++     The opposite of reduced (1), (2). */
+++
+++     Rect<T> expanded(T amountX, T amountY) const { return reduced(-amountX, -amountY); }
+++     Rect<T> expanded(T amount) const { return reduced(-amount); }
+++
+++     /* contains (1)
+++     Returns true if Point p is inside this Rect. */
+++
+++     bool contains(Point<T> p) const
+++     {
+++             return p.x >= x && p.y >= y && p.x < xw && p.y < yh;
+++     }
+++
+++     /* contains (2)
+++     Returns true if Line l is inside this Rect. */
+++
+++     bool contains(Line<T> l) const
+++     {
+++             return l.x1 >= x && l.x1 < xw && l.x2 >= x && l.x2 < xw &&
+++                    l.y1 >= y && l.y1 < yh && l.y2 >= y && l.y2 < yh;
+++     }
+++
+++     T x, y, w, h, xw, yh;
+++};
+++} // namespace geompp
+++
+++#endif
++\ No newline at end of file
++--- /dev/null
+++++ giada/src/deps/geompp/src/border.hpp
++@@ -0,0 +1,75 @@
+++/* -----------------------------------------------------------------------------
+++ *
+++ * geompp - Basic geometrical utilities for C++.
+++ *
+++ * -----------------------------------------------------------------------------
+++ *
+++ * Copyright (C) 2021 Giovanni A. Zuliani | Monocasual Laboratories
+++ *
+++ * This file is part of geompp - Basic geometrical utilities for C++.
+++ *
+++ * geompp - Basic geometrical utilities for C++ is free software: you can
+++ * redistribute it and/or modify it under the terms of the GNU General
+++ * Public License as published by the Free Software Foundation, either
+++ * version 3 of the License, or (at your option) any later version.
+++ *
+++ * geompp - Basic geometrical utilities for C++ is distributed in the hope that 
+++ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+++ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+++ * See the GNU General Public License for more details.
+++ *
+++ * You should have received a copy of the GNU General Public License
+++ * along with geompp - Basic geometrical utilities for C++. If not, see
+++ * <http://www.gnu.org/licenses/>.
+++ *
+++ * -------------------------------------------------------------------------- */
+++
+++#ifndef GEOMPP_BORDER_HH
+++#define GEOMPP_BORDER_HH
+++
+++namespace geompp
+++{
+++template <typename T>
+++class Border
+++{
+++public:
+++     /* Border (1) 
+++    Empty border. */
+++
+++     constexpr Border()
+++     : Border(0, 0, 0, 0)
+++     {
+++     }
+++
+++     /* Border (2) 
+++    Normal border. */
+++
+++     constexpr Border(T t, T r, T b, T l)
+++     : top(t)
+++     , right(r)
+++     , bottom(b)
+++     , left(l)
+++     {
+++     }
+++
+++     /* Border (3) 
+++    Normal border, all sides equal. */
+++
+++     constexpr Border(T v)
+++     : Border(v, v, v, v)
+++     {
+++     }
+++
+++     /* Border (4) 
+++    Normal border, horizontal and vertical sides equal. */
+++
+++     constexpr Border(T x, T y)
+++     : Border(y, x, y, x)
+++     {
+++     }
+++
+++     T top, right, bottom, left;
+++};
+++} // namespace geompp
+++
+++#endif
++\ No newline at end of file
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..4d06c2183c043925cd74efcb6cd18b0252db7409
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,101 @@@
++From: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
++Date: Fri, 17 Dec 2021 10:37:21 +0100
++Subject: Use system-provided RtAudio
++
++Origin: Debian
++Forwarded: not-needed
++Last-Update: 2022-05-04
++
++Index: giada/CMakeLists.txt
++===================================================================
++--- giada.orig/CMakeLists.txt
+++++ giada/CMakeLists.txt
++@@ -204,7 +204,6 @@ list(APPEND SOURCES
++      src/utils/fs.cpp
++      src/utils/ver.cpp
++      src/utils/string.cpp
++-     src/deps/rtaudio/RtAudio.cpp
++      src/deps/mcl-audio-buffer/src/audioBuffer.cpp)
++ 
++ list(APPEND PREPROCESSOR_DEFS)
++@@ -294,6 +293,15 @@ elseif (PkgConfig_FOUND)
++      endif()
++ endif()
++ 
+++if (PkgConfig_FOUND)
+++     pkg_check_modules(RtAudio IMPORTED_TARGET rtaudio)
+++     if (RtAudio_FOUND)
+++             list(APPEND LIBRARIES PkgConfig::RtAudio)
+++             message("RtAudio library found")
+++     endif()
+++endif()
+++
+++
++ if (NOT RtMidi_FOUND)
++      # Fallback to find_library mode (in case rtmidi is too old). 
++      find_library(LIBRARY_RTMIDI NAMES rtmidi)
++Index: giada/src/core/kernelAudio.h
++===================================================================
++--- giada.orig/src/core/kernelAudio.h
+++++ giada/src/core/kernelAudio.h
++@@ -28,7 +28,7 @@
++ #define G_KERNELAUDIO_H
++ 
++ #include "core/conf.h"
++-#include "deps/rtaudio/RtAudio.h"
+++#include "rtaudio/RtAudio.h"
++ #include <cstddef>
++ #include <functional>
++ #include <memory>
++Index: giada/src/glue/config.cpp
++===================================================================
++--- giada.orig/src/glue/config.cpp
+++++ giada/src/glue/config.cpp
++@@ -32,7 +32,7 @@
++ #include "core/kernelMidi.h"
++ #include "core/midiMapper.h"
++ #include "core/plugins/pluginManager.h"
++-#include "deps/rtaudio/RtAudio.h"
+++#include "rtaudio/RtAudio.h"
++ #include "gui/dialogs/browser/browserDir.h"
++ #include "gui/dialogs/config.h"
++ #include "gui/dialogs/warnings.h"
++Index: giada/src/gui/elems/config/tabAudio.cpp
++===================================================================
++--- giada.orig/src/gui/elems/config/tabAudio.cpp
+++++ giada/src/gui/elems/config/tabAudio.cpp
++@@ -27,7 +27,7 @@
++ #include "tabAudio.h"
++ #include "core/const.h"
++ #include "core/kernelAudio.h"
++-#include "deps/rtaudio/RtAudio.h"
+++#include "rtaudio/RtAudio.h"
++ #include "gui/elems/basics/box.h"
++ #include "gui/elems/basics/check.h"
++ #include "gui/elems/basics/choice.h"
++Index: giada/src/utils/ver.cpp
++===================================================================
++--- giada.orig/src/utils/ver.cpp
+++++ giada/src/utils/ver.cpp
++@@ -26,7 +26,7 @@
++ 
++ #include "ver.h"
++ #include "core/const.h"
++-#include "deps/rtaudio/RtAudio.h"
+++#include "rtaudio/RtAudio.h"
++ #include <RtMidi.h>
++ #include <sndfile.h>
++ 
++Index: giada/src/core/kernelAudio.cpp
++===================================================================
++--- giada.orig/src/core/kernelAudio.cpp
+++++ giada/src/core/kernelAudio.cpp
++@@ -263,7 +263,7 @@ const std::vector<m::KernelAudio::Device
++ #ifdef WITH_AUDIO_JACK
++ jack_client_t* KernelAudio::getJackHandle() const
++ {
++-     return static_cast<jack_client_t*>(m_rtAudio->HACK__getJackClient());
+++     return nullptr;
++ }
++ #endif
++ 
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..6f949462a6174509c1dd4b41be84191f7b801627
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,48 @@@
++From: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
++Date: Fri, 17 Dec 2021 10:37:21 +0100
++Subject: Build against system-provided nlohmann/json
++
++Origin: Debian
++Forwarded: no
++Last-Update: 2020-04-02
++
++Last-Update: 2020-04-02
++---
++ src/core/conf.cpp     | 2 +-
++ src/core/midiMapper.h | 2 +-
++ src/core/patch.cpp    | 2 +-
++ 3 files changed, 3 insertions(+), 3 deletions(-)
++
++--- giada.orig/src/core/conf.cpp
+++++ giada/src/core/conf.cpp
++@@ -27,7 +27,7 @@
++ #include "core/conf.h"
++ #include "core/const.h"
++ #include "core/types.h"
++-#include "deps/json/single_include/nlohmann/json.hpp"
+++#include "nlohmann/json.hpp"
++ #include "utils/fs.h"
++ #include "utils/log.h"
++ #include <FL/Fl.H>
++--- giada.orig/src/core/midiMapper.h
+++++ giada/src/core/midiMapper.h
++@@ -27,7 +27,7 @@
++ #ifndef G_MIDIMAPPER_H
++ #define G_MIDIMAPPER_H
++ 
++-#include "deps/json/single_include/nlohmann/json.hpp"
+++#include "nlohmann/json.hpp"
++ #include <string>
++ #include <vector>
++ 
++--- giada.orig/src/core/patch.cpp
+++++ giada/src/core/patch.cpp
++@@ -26,7 +26,7 @@
++ 
++ #include "patch.h"
++ #include "core/mixer.h"
++-#include "deps/json/single_include/nlohmann/json.hpp"
+++#include "nlohmann/json.hpp"
++ #include "utils/log.h"
++ #include "utils/math.h"
++ #include <fstream>
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..0437243303f43b981e102fae0dc88aa2f0570fe9
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,20 @@@
++Description: link against system libpng/libjpeg
++Author: IOhannes m zmölnig <umlaeute@debian.org>
++Forwarded: not-needed
++Last-Update: 2021-12-20
++---
++This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
++Index: giada/CMakeLists.txt
++===================================================================
++--- giada.orig/CMakeLists.txt
+++++ giada/CMakeLists.txt
++@@ -394,6 +394,9 @@ else()
++      message("Libsamplerate library found in " ${LIBRARY_SAMPLERATE})
++ endif()
++ 
+++pkg_check_modules(JpegPng IMPORTED_TARGET libjpeg libpng)
+++list(APPEND LIBRARIES PkgConfig::JpegPng)
+++
++ # Catch (if tests enabled)
++ 
++ if (WITH_TESTS)
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b1fc3fbc2c06258367ada694478a493c40d1b7d5
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,168 @@@
++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <zmoelnig@iem.at>
++Date: Fri, 17 Dec 2021 10:35:28 +0100
++Subject: RtAudio-5.2.0 support
++
++Upstream vendored in a RtAudio-6 git snapshot and called it 5.2.0
++---
++ src/core/kernelAudio.cpp | 107 ++++++++++++++++++++++++++---------------------
++ 1 file changed, 60 insertions(+), 47 deletions(-)
++
++Index: giada/src/core/kernelAudio.cpp
++===================================================================
++--- giada.orig/src/core/kernelAudio.cpp
+++++ giada/src/core/kernelAudio.cpp
++@@ -95,10 +95,6 @@ int KernelAudio::openDevice(const Conf::
++              return 0;
++      }
++ 
++-     m_rtAudio->setErrorCallback([](RtAudioErrorType type, const std::string& msg) {
++-             u::log::print("[KA] RtAudio error %d: %s\n", type, msg.c_str());
++-     });
++-
++      u::log::print("[KA] Opening device out=%d, in=%d, samplerate=%d\n",
++          conf.soundDeviceOut, conf.soundDeviceIn, conf.samplerate);
++ 
++@@ -159,33 +155,33 @@ int KernelAudio::openDevice(const Conf::
++ 
++ #endif
++ 
++-     m_callbackInfo = {
++-         /* kernelAudio      = */ this,
++-         /* ready            = */ true,
++-         /* withJack         = */ getAPI() == G_SYS_API_JACK,
++-         /* outBuf           = */ nullptr, // filled later on in audio callback
++-         /* inBuf            = */ nullptr, // filled later on in audio callback
++-         /* bufferSize       = */ 0,       // filled later on in audio callback
++-         /* channelsOutCount = */ m_channelsOutCount,
++-         /* channelsInCount  = */ m_channelsInCount};
++-
++-     RtAudioErrorType res = m_rtAudio->openStream(
++-         &outParams,                                     // output params
++-         conf.soundDeviceIn != -1 ? &inParams : nullptr, // input params if inDevice is selected
++-         RTAUDIO_FLOAT32,                                // audio format
++-         m_realSampleRate,                               // sample rate
++-         &m_realBufferSize,                              // buffer size in byte
++-         &audioCallback,                                 // audio callback
++-         &m_callbackInfo,                                // user data passed to callback
++-         &options);
++-
++-     if (res == RtAudioErrorType::RTAUDIO_NO_ERROR)
+++     try
++      {
+++             m_callbackInfo = {
+++                 /* kernelAudio      = */ this,
+++                 /* ready            = */ true,
+++                 /* withJack         = */ getAPI() == G_SYS_API_JACK,
+++                 /* outBuf           = */ nullptr, // filled later on in audio callback
+++                 /* inBuf            = */ nullptr, // filled later on in audio callback
+++                 /* bufferSize       = */ 0,       // filled later on in audio callback
+++                 /* channelsOutCount = */ m_channelsOutCount,
+++                 /* channelsInCount  = */ m_channelsInCount};
+++
+++             m_rtAudio->openStream(
+++                 &outParams,                                     // output params
+++                 conf.soundDeviceIn != -1 ? &inParams : nullptr, // input params if inDevice is selected
+++                 RTAUDIO_FLOAT32,                                // audio format
+++                 m_realSampleRate,                               // sample rate
+++                 &m_realBufferSize,                              // buffer size in byte
+++                 &audioCallback,                                 // audio callback
+++                 &m_callbackInfo,                                // user data passed to callback
+++                 &options);
++              m_ready = true;
++              return 1;
++      }
++-     else
+++     catch (RtAudioError& e)
++      {
+++             u::log::print("[KA] RtAudio init error: %s\n", e.getMessage());
++              closeDevice();
++              return 0;
++      }
++@@ -195,24 +191,33 @@ int KernelAudio::openDevice(const Conf::
++ 
++ int KernelAudio::startStream()
++ {
++-     if (m_rtAudio->startStream() == RtAudioErrorType::RTAUDIO_NO_ERROR)
+++     try
++      {
++-             u::log::print("[KA] Start stream - latency = %lu\n", m_rtAudio->getStreamLatency());
+++             m_rtAudio->startStream();
+++             u::log::print("[KA] latency = %lu\n", m_rtAudio->getStreamLatency());
++              return 1;
++      }
++-     return 0;
+++     catch (RtAudioError& e)
+++     {
+++             u::log::print("[KA] Start stream error: %s\n", e.getMessage());
+++             return 0;
+++     }
++ }
++ 
++ /* -------------------------------------------------------------------------- */
++ 
++ int KernelAudio::stopStream()
++ {
++-     if (m_rtAudio->stopStream() == RtAudioErrorType::RTAUDIO_NO_ERROR)
+++     try
++      {
++-             u::log::print("[KA] Stop stream\n");
+++             m_rtAudio->stopStream();
++              return 1;
++      }
++-     return 0;
+++     catch (RtAudioError& /*e*/)
+++     {
+++             u::log::print("[KA] Stop stream error\n");
+++             return 0;
+++     }
++ }
++ 
++ /* -------------------------------------------------------------------------- */
++@@ -329,24 +334,32 @@ void KernelAudio::logCompiledAPIs()
++ 
++ m::KernelAudio::Device KernelAudio::fetchDevice(size_t deviceIndex) const
++ {
++-     RtAudio::DeviceInfo info = m_rtAudio->getDeviceInfo(deviceIndex);
+++     try
+++     {
+++             RtAudio::DeviceInfo info = m_rtAudio->getDeviceInfo(deviceIndex);
++ 
++-     if (!info.probed)
+++             if (!info.probed)
+++             {
+++                     u::log::print("[KA] Can't probe device %d\n", deviceIndex);
+++                     return {deviceIndex};
+++             }
+++
+++             return {
+++                 deviceIndex,
+++                 true,
+++                 info.name,
+++                 static_cast<int>(info.outputChannels),
+++                 static_cast<int>(info.inputChannels),
+++                 static_cast<int>(info.duplexChannels),
+++                 info.isDefaultOutput,
+++                 info.isDefaultInput,
+++                 u::vector::cast<int>(info.sampleRates)};
+++     }
+++     catch (RtAudioError& e)
++      {
++-             u::log::print("[KA] Can't probe device %d\n", deviceIndex);
++-             return {deviceIndex};
+++             u::log::print("[KA] Error fetching device %d: %s\n", deviceIndex, e.getMessage());
+++             return {0};
++      }
++-
++-     return {
++-         deviceIndex,
++-         true,
++-         info.name,
++-         static_cast<int>(info.outputChannels),
++-         static_cast<int>(info.inputChannels),
++-         static_cast<int>(info.duplexChannels),
++-         info.isDefaultOutput,
++-         info.isDefaultInput,
++-         u::vector::cast<int>(info.sampleRates)};
++ }
++ 
++ /* -------------------------------------------------------------------------- */
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b5c104f306bb55eccb2e50447deb24a17d9cbb81
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,29 @@@
++Description: Add keywords and translations from old debian desktop file
++ and add german translation
++Author: Dennis Braun <d_braun@kabelmail.de>
++Forwarded: yes 
++
++Index: giada/extras/com.giadamusic.Giada.desktop
++===================================================================
++--- giada.orig/extras/com.giadamusic.Giada.desktop
+++++ giada/extras/com.giadamusic.Giada.desktop
++@@ -2,11 +2,17 @@
++ Version=1.0
++ Type=Application
++ Name=Giada
++-Name[es]=Giada
++ GenericName=Drum machine and loop sequencer
+++Comment=Drum machine and loop sequencer
+++GenericName[de]=Drum Maschine und Loop Sequenzer
++ GenericName[es]=Caja de ritmos y secuenciador de loops
+++GenericName[fr]=Boîte à rythme et séquenceur de boucle
+++Comment=Drum machine and loop sequencer
+++Comment[de]=Drum Maschine und Loop Sequenzer
+++Comment[es]=Caja de ritmos y secuenciador de loops
+++Comment[fr]=Boîte à rythme et séquenceur de boucle
++ Exec=giada %f
++ Terminal=false
++ Icon=com.giadamusic.Giada
++ Categories=Music;AudioVideo;Audio;Midi;X-Digital_Processing;X-Jack;X-MIDI;
++-Keywords=Giada;
+++Keywords=midi;jackd;alsa;pulse;audio;sound;loop;
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..4ea11b611fde4c79b11a8e22f6654b18f951bdd1
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,6 @@@
++desktop_improvements.patch
++02-geompp.patch
++03-system-rtaudio.patch
++04-system-json.patch
++RtAudio52.patch
++06-system-jpg+png.patch
diff --cc debian/rules
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..58ad929b6344e67a99b16af7a2b648d735a483c1
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,83 @@@
++#!/usr/bin/make -f
++
++export DEB_BUILD_MAINT_OPTIONS = hardening=+all
++# see ENVIRONMENT in dpkg-buildflags(1)
++export DEB_CPPFLAGS_MAINT_APPEND =
++export DEB_CXXFLAGS_MAINT_APPEND =
++export DEB_LDFLAGS_MAINT_APPEND =
++
++# workaround for an FST bug
++DEB_CPPFLAGS_MAINT_APPEND += -D_fstEffect=AEffect
++
++DATE_FMT = %Y-%m-%d
++ifdef SOURCE_DATE_EPOCH
++    BUILD_DATE ?= $(shell date -u -d "@$(SOURCE_DATE_EPOCH)" "+$(DATE_FMT)"  2>/dev/null || date -u -r "$(SOURCE_DATE_EPOCH)" "+$(DATE_FMT)" 2>/dev/null || date -u "+$(DATE_FMT)")
++else
++    BUILD_DATE ?= $(shell date "+$(DATE_FMT)")
++endif
++
++JUCE_VERSION := $(shell dpkg-query --show --showformat='$${source:Version}' juce-modules-source)
++
++DEB_CPPFLAGS_MAINT_APPEND += -DBUILD_DATE='"$(BUILD_DATE)"' -DTEST_RESOURCES_DIR='"tests/resources/"'
++DEB_CXXFLAGS_MAINT_APPEND += -std=c++17 -Wno-error -Wno-error=format-security
++LIBS=$(shell pkg-config --libs libjpeg libpng libcurl rtaudio)
++DEB_CXXFLAGS_MAINT_APPEND += $(shell pkg-config --cflags libjpeg libpng libcurl rtaudio)
++
++# JUCE (used by giada) uses some c++11 features requiring atomic_store_8 and
++# atomic_load_8, so we need to link with libatomic on
++# armel, powerpc, powerpcspe, m68k, mips, mipsel, sh4, ...
++# see also:
++# - https://gcc.gnu.org/wiki/Atomic
++# - https://gcc.gnu.org/wiki/Atomic/GCCMM/LIbrary
++# - the 'clasp' packaging
++noatomicarch = $(shell dpkg-architecture -qDEB_HOST_ARCH | egrep -x "(armel|powerpc|powerpcspe|m68k|mips|mipsel|sh4|riscv64)")
++# link with libatomic on architectures without built-in atomic
++ifeq ($(if $(noatomicarch),atomic), atomic)
++      LIBS += -latomic
++endif
++
++DEB_LDFLAGS_MAINT_APPEND += $(LIBS)
++
++%:
++      dh $@
++
++execute_before_dh_auto_configure:
++      for d in $(notdir $(patsubst %/,%,$(wildcard debian/missing-sources/mcl-*/))); do \
++              mkdir -p src/deps/$$d/src/; \
++              cp debian/missing-sources/$$d/* src/deps/$$d/src/; \
++      done
++      cp -ra /usr/share/juce src/deps/
++      # patch around some bugs in FST
++      sed -e 's|\(.*t_fstTimeInfo.smpteFrameRate.*\)|};\ntypedef enum {\1|' -e 's|\(.*SmpteFilm35mm.*\)|\1 } VstSmpteFrameRate;\nenum {dummy_enum|' /usr/include/pluginterfaces/fst/fst.h > src/deps/juce/modules/juce_audio_processors/format_types/fst.h
++      sed -e 's|<pluginterfaces/fst/fst.h>|"fst.h"|' -i src/deps/juce/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp
++override_dh_auto_configure:
++      dh_auto_configure -- \
++              -DWITH_VST2=ON \
++              $(empty)
++
++override_dh_auto_test:
++      HOME=/tmp xvfb-run -a dh_auto_test -a || (grep . test-suite.log giada_test.log; false)
++
++execute_after_dh_clean:
++      test -e src/deps/rtaudio-mode/Makefile && make -C src/deps/rtaudio-mod/ distclean || true
++      for d in $(notdir $(patsubst %/,%,$(wildcard debian/missing-sources/mcl-*/))); do \
++              rm -rf src/deps/$$d; \
++      done
++      rm -rf src/deps/juce/
++
++override_dh_installchangelogs:
++      dh_installchangelogs ChangeLog
++
++override_dh_gencontrol:
++      dh_gencontrol -- \
++                -Vjuce:BuiltUsing="juce ( = $(JUCE_VERSION) )"
++
++
++DEB_COPYRIGHT_CHECK_IGNORE_REGEX = \
++      \.pc/.*|\.git/.*|debian/.*|.*\.png
++
++licensecheck:
++      licensecheck -i "^\./($(DEB_COPYRIGHT_CHECK_IGNORE_REGEX))$$" --deb-machine -r . \
++              > debian/copyright_newhints
++      cmp debian/copyright_hints debian/copyright_newhints \
++              && rm debian/copyright_newhints
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..33c3a640d2a84306b6a8b5640692ac3481739e65
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,4 @@@
++---
++include:
++  - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml
++  - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..163aaf8d82b6c54f23c45f32895dbdfdcc27b047
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++3.0 (quilt)
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..a562349ed1f7abe96d53ce8b921cd03ebca85525
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,5 @@@
++Archive: github
++Bug-Database: https://github.com/monocasual/giada/issues
++Bug-Submit: https://github.com/monocasual/giada/issues/new
++Repository: https://github.com/monocasual/giada.git
++Repository-Browse: https://github.com/monocasual/giada
diff --cc debian/watch
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..f0fe5af83d8a7152139c9bb138547a24c6c5a516
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,3 @@@
++version=4
++opts=filenamemangle=s/.+\/v?(\d\S+)\.tar\.gz/giada-$1\.tar\.gz/ \
++  https://github.com/monocasual/giada/tags .*/v?(\d\S*)\.tar\.gz