From: Dennis Braun Date: Sun, 15 May 2022 16:50:55 +0000 (+0200) Subject: giada (0.21.0-1) unstable; urgency=medium X-Git-Tag: archive/raspbian/0.22.0-1+rpi1~1^2^2^2~6 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=6360903e4512955dd923f8d2bdb6870d439fcb9e;p=giada.git 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 [dgit import unpatched giada 0.21.0-1] --- 6360903e4512955dd923f8d2bdb6870d439fcb9e diff --cc debian/README.source index 0000000,0000000..6b617bb new file mode 100644 --- /dev/null +++ b/debian/README.source @@@ -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 < Mon, 1 Aug 2016 12:15:50 +0200 diff --cc debian/changelog index 0000000,0000000..0ee96e9 new file mode 100644 --- /dev/null +++ b/debian/changelog @@@ -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 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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š 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š 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š 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) 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š 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š 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š 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š 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š 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š 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 ++ ++ -- Jaromír Mikeš 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š 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) 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) 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š 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) 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) 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š 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š 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) 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š 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š Wed, 08 Apr 2015 14:59:44 +0200 diff --cc debian/control index 0000000,0000000..d4c746b new file mode 100644 --- /dev/null +++ b/debian/control @@@ -1,0 -1,0 +1,50 @@@ ++Source: giada ++Section: sound ++Priority: optional ++Maintainer: Debian Multimedia Maintainers ++Uploaders: ++ Jaromír Mikeš , ++ IOhannes m zmölnig (Debian/GNU) , ++ Dennis Braun ++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. diff --cc debian/copyright index 0000000,0000000..e1f9f17 new file mode 100644 --- /dev/null +++ b/debian/copyright @@@ -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 ++Source: https://www.giadamusic.com ++ ++Files: * ++Copyright: ++ 2010-2022 Giovanni A. Zuliani | Monocasual ++License: GPL-3+ ++ ++Files: debian/* ++Copyright: ++ 2018-2020 Olivier Humbert ++ 2015-2017 Jaromír Mikeš ++ 2015-2022 IOhannes m zmölnig ++ 2020-2022 Dennis Braun ++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 . ++ . ++ On Debian systems, the complete text of the GNU General ++ Public License can be found in `/usr/share/common-licenses/GPL-3'. diff --cc debian/copyright_hints index 0000000,0000000..16f4461 new file mode 100644 --- /dev/null +++ b/debian/copyright_hints @@@ -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. ++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 0000000,0000000..4a6c371 new file mode 100644 --- /dev/null +++ b/debian/gbp.conf @@@ -1,0 -1,0 +1,5 @@@ ++[DEFAULT] ++pristine-tar = True ++sign-tags = True ++ ++debian-branch = master diff --cc debian/gbp/postclone.sh index 0000000,0000000..5790ec6 new file mode 100755 --- /dev/null +++ b/debian/gbp/postclone.sh @@@ -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 0000000,0000000..606f901 new file mode 100644 --- /dev/null +++ b/debian/giada.1 @@@ -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 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š , ++for the Debian project (but may be used by others). diff --cc debian/giada.fr.1 index 0000000,0000000..a6e6882 new file mode 100644 --- /dev/null +++ b/debian/giada.fr.1 @@@ -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 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š ++, pour le projet Debian (mais peut être utilisée par ++d'autres). ++.PP ++Elle a été traduite en français par Olivier Humbert pour ++le projet LibraZiK (et peut également être utilisée par d'autres). diff --cc debian/giada.manpages index 0000000,0000000..c014cc7 new file mode 100644 --- /dev/null +++ b/debian/giada.manpages @@@ -1,0 -1,0 +1,2 @@@ ++debian/giada.1 ++debian/giada.fr.1 diff --cc debian/missing-sources/README.md index 0000000,0000000..cc45e02 new file mode 100644 --- /dev/null +++ b/debian/missing-sources/README.md @@@ -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. ++ diff --cc debian/missing-sources/mcl-atomic-swapper/atomic-swapper.hpp index 0000000,0000000..e3ca0d5 new file mode 100644 --- /dev/null +++ b/debian/missing-sources/mcl-atomic-swapper/atomic-swapper.hpp @@@ -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 ++ * . ++ * ++ * -------------------------------------------------------------------------- */ ++ ++#ifndef MONOCASUAL_ATOMIC_SWAPPER_H ++#define MONOCASUAL_ATOMIC_SWAPPER_H ++ ++#include ++#include ++ ++namespace mcl ++{ ++template ++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); ++ } ++ ++ /* 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(static_cast(*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 m_data; ++ std::atomic m_bits{0}; ++ int m_index{0}; ++}; ++} // namespace mcl ++ ++#endif diff --cc debian/missing-sources/mcl-audio-buffer/audioBuffer.cpp index 0000000,0000000..1edc2ab new file mode 100644 --- /dev/null +++ b/debian/missing-sources/mcl-audio-buffer/audioBuffer.cpp @@@ -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 ++ * . ++ * ++ * -------------------------------------------------------------------------- */ ++ ++#include "audioBuffer.hpp" ++#include ++#include ++ ++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(b, framesToCopy, srcOffset, destOffset, gain, pan); ++} ++ ++void AudioBuffer::set(const AudioBuffer& b, int framesToCopy, int srcOffset, ++ int destOffset, float gain, Pan pan) ++{ ++ copyData(b, framesToCopy, srcOffset, destOffset, gain, pan); ++} ++ ++void AudioBuffer::sum(const AudioBuffer& b, float gain, Pan pan) ++{ ++ copyData(b, -1, 0, 0, gain, pan); ++} ++ ++void AudioBuffer::set(const AudioBuffer& b, float gain, Pan pan) ++{ ++ copyData(b, -1, 0, 0, gain, pan); ++} ++ ++/* -------------------------------------------------------------------------- */ ++ ++template ++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 f) ++{ ++ for (int i = 0; i < countFrames(); i++) ++ f((*this)[i], i); ++} ++ ++/* -------------------------------------------------------------------------- */ ++ ++void AudioBuffer::forEachChannel(int frame, std::function f) ++{ ++ assert(frame < m_size); ++ ++ for (int i = 0; i < countChannels(); i++) ++ f((*this)[frame][i], i); ++} ++ ++/* -------------------------------------------------------------------------- */ ++ ++void AudioBuffer::forEachSample(std::function f) ++{ ++ for (int i = 0; i < countSamples(); i++) ++ f(m_data[i], i); ++} ++ ++/* -------------------------------------------------------------------------- */ ++ ++template void AudioBuffer::copyData(const AudioBuffer&, int, int, int, float, Pan); ++template void AudioBuffer::copyData(const AudioBuffer&, int, int, int, float, Pan); ++} // namespace mcl diff --cc debian/missing-sources/mcl-audio-buffer/audioBuffer.hpp index 0000000,0000000..d77cde0 new file mode 100644 --- /dev/null +++ b/debian/missing-sources/mcl-audio-buffer/audioBuffer.hpp @@@ -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 ++ * . ++ * ++ * -------------------------------------------------------------------------- */ ++ ++#ifndef MONOCASUAL_AUDIO_BUFFER_H ++#define MONOCASUAL_AUDIO_BUFFER_H ++ ++#include ++#include ++ ++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; ++ ++ /* 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; kcountFrames(), k++) ++ for (int i=0; icountChannels(); 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); ++ ++ /* forEachChannel ++ Applies a function to each channel in the given frame. */ ++ ++ void forEachChannel(int frame, std::function); ++ ++ /* forEachSample ++ Applies a function to each sample in the audio buffer. */ ++ ++ void forEachSample(std::function); ++ ++private: ++ enum class Operation ++ { ++ SUM, ++ SET ++ }; ++ ++ template ++ 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 diff --cc debian/patches/02-geompp.patch index 0000000,0000000..4b5f32c new file mode 100644 --- /dev/null +++ b/debian/patches/02-geompp.patch @@@ -1,0 -1,0 +1,586 @@@ ++From: Debian Multimedia Maintainers ++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 +++ * . +++ * +++ * -------------------------------------------------------------------------- */ +++ +++#ifndef GEOMPP_LINE_HH +++#define GEOMPP_LINE_HH +++ +++namespace geompp +++{ +++template +++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 +++ * . +++ * +++ * -------------------------------------------------------------------------- */ +++ +++#ifndef GEOMPP_POINT_HH +++#define GEOMPP_POINT_HH +++ +++#include +++ +++namespace geompp +++{ +++template +++class Point +++{ +++public: +++ constexpr Point() +++ : Point(0, 0) +++ { +++ } +++ +++ constexpr Point(T x, T y) +++ : x(x) +++ , y(y) +++ { +++ } +++ +++ bool operator==(const Point& o) const +++ { +++ return x == o.x && y == o.y; +++ } +++ +++ bool operator!=(const Point& o) const +++ { +++ return !(*this == o); +++ } +++ +++ Point operator+(const Point& o) const +++ { +++ return {x + o.x, y + o.y}; +++ } +++ +++ Point operator-(const Point& o) const +++ { +++ return {x - o.x, y - o.y}; +++ } +++ +++ /* with[...] +++ Returns a copy of this Point with a new coordinate. */ +++ +++ Point withX(T v) const { return {v, y}; } +++ Point 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 +++ * . +++ * +++ * -------------------------------------------------------------------------- */ +++ +++#ifndef GEOMPP_RANGE_HH +++#define GEOMPP_RANGE_HH +++ +++#include +++ +++namespace geompp +++{ +++template +++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 operator*(const T m) const { return {a * m, b * m}; } +++ Range operator*=(const T m) const { return {a * m, b * m}; } +++ Range operator/(const T m) const { return {a / m, b / m}; } +++ Range operator/=(const T m) const { return {a / m, b / m}; } +++ Range operator+(const T m) const { return {a + m, b + m}; } +++ Range operator+=(const T m) const { return {a + m, b + m}; } +++ Range operator-(const T m) const { return {a - m, b - m}; } +++ Range 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 +++ * . +++ * +++ * -------------------------------------------------------------------------- */ +++ +++#ifndef GEOMPP_RECT_HH +++#define GEOMPP_RECT_HH +++ +++#include "border.hpp" +++#include "line.hpp" +++#include "point.hpp" +++#include "range.hpp" +++ +++namespace geompp +++{ +++template +++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 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 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 withX(T v) const { return {v, y, w, h}; } +++ Rect withY(T v) const { return {x, v, w, h}; } +++ Rect withW(T v) const { return {x, y, v, h}; } +++ Rect 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 withPosition(Point p) const { return {p.x, p.y, w, h}; } +++ +++ /* withShifted[...] +++ Returns a copy of this Rect shifted by a certain amount. */ +++ +++ Rect withShiftedX(T amount) const { return {x + amount, y, w, h}; } +++ Rect 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 withTrimmedLeft(T amount) const { return {x + amount, y, w - amount, h}; } +++ Rect withTrimmedRight(T amount) const { return {x, y, w - amount, h}; } +++ Rect withTrimmedTop(T amount) const { return {x, y + amount, w, h - amount}; } +++ Rect withTrimmedBottom(T amount) const { return {x, y, w, h - amount}; } +++ +++ /* get[Width|Height]AsLine +++ Returns width or height as a new Line object. */ +++ +++ Line getWidthAsLine() const { return Line(x, y, xw - 1, y); } +++ Line getHeightAsLine() const { return Line(x, y, x, yh - 1); } +++ +++ Point getPosition() const { return Point(x, y); } +++ +++ /* reduced +++ Returns a copy of this Rect with all four sides reduced by a certain Border. */ +++ +++ Rect reduced(Border b) const +++ { +++ Rect r = *this; +++ r.reduce(b); +++ return r; +++ } +++ +++ /* expanded (1), (2) +++ The opposite of reduced (1), (2). */ +++ +++ Rect expanded(T amountX, T amountY) const { return reduced(-amountX, -amountY); } +++ Rect expanded(T amount) const { return reduced(-amount); } +++ +++ /* contains (1) +++ Returns true if Point p is inside this Rect. */ +++ +++ bool contains(Point 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 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 +++ * . +++ * +++ * -------------------------------------------------------------------------- */ +++ +++#ifndef GEOMPP_BORDER_HH +++#define GEOMPP_BORDER_HH +++ +++namespace geompp +++{ +++template +++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 diff --cc debian/patches/03-system-rtaudio.patch index 0000000,0000000..4d06c21 new file mode 100644 --- /dev/null +++ b/debian/patches/03-system-rtaudio.patch @@@ -1,0 -1,0 +1,101 @@@ ++From: Debian Multimedia Maintainers ++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 ++ #include ++ #include ++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 ++ #include ++ ++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_rtAudio->HACK__getJackClient()); +++ return nullptr; ++ } ++ #endif ++ diff --cc debian/patches/04-system-json.patch index 0000000,0000000..6f94946 new file mode 100644 --- /dev/null +++ b/debian/patches/04-system-json.patch @@@ -1,0 -1,0 +1,48 @@@ ++From: Debian Multimedia Maintainers ++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 ++--- 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 ++ #include ++ ++--- 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 diff --cc debian/patches/06-system-jpg+png.patch index 0000000,0000000..0437243 new file mode 100644 --- /dev/null +++ b/debian/patches/06-system-jpg+png.patch @@@ -1,0 -1,0 +1,20 @@@ ++Description: link against system libpng/libjpeg ++Author: IOhannes m zmölnig ++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) diff --cc debian/patches/RtAudio52.patch index 0000000,0000000..b1fc3fb new file mode 100644 --- /dev/null +++ b/debian/patches/RtAudio52.patch @@@ -1,0 -1,0 +1,168 @@@ ++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= ++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(info.outputChannels), +++ static_cast(info.inputChannels), +++ static_cast(info.duplexChannels), +++ info.isDefaultOutput, +++ info.isDefaultInput, +++ u::vector::cast(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(info.outputChannels), ++- static_cast(info.inputChannels), ++- static_cast(info.duplexChannels), ++- info.isDefaultOutput, ++- info.isDefaultInput, ++- u::vector::cast(info.sampleRates)}; ++ } ++ ++ /* -------------------------------------------------------------------------- */ diff --cc debian/patches/desktop_improvements.patch index 0000000,0000000..b5c104f new file mode 100644 --- /dev/null +++ b/debian/patches/desktop_improvements.patch @@@ -1,0 -1,0 +1,29 @@@ ++Description: Add keywords and translations from old debian desktop file ++ and add german translation ++Author: Dennis Braun ++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; diff --cc debian/patches/series index 0000000,0000000..4ea11b6 new file mode 100644 --- /dev/null +++ b/debian/patches/series @@@ -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 0000000,0000000..58ad929 new file mode 100755 --- /dev/null +++ b/debian/rules @@@ -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||"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 diff --cc debian/salsa-ci.yml index 0000000,0000000..33c3a64 new file mode 100644 --- /dev/null +++ b/debian/salsa-ci.yml @@@ -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 diff --cc debian/source/format index 0000000,0000000..163aaf8 new file mode 100644 --- /dev/null +++ b/debian/source/format @@@ -1,0 -1,0 +1,1 @@@ ++3.0 (quilt) diff --cc debian/upstream/metadata index 0000000,0000000..a562349 new file mode 100644 --- /dev/null +++ b/debian/upstream/metadata @@@ -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 0000000,0000000..f0fe5af new file mode 100644 --- /dev/null +++ b/debian/watch @@@ -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