Anklang 0.2.0.nightly2405211359
Pre-release
Pre-release
tim-janik
released this
21 May 14:12
·
239 commits
to trunk
since this release
Anklang 0.2.0.nightly2405211359
Development version - may contain bugs or compatibility issues.
Merge branch 'build-fixes' # 2024-05-21 Tim Janik 998d0890
* Branch commit log:
ase/logging.cc: add missing unistd.h include
package.json: add missing "globals" package (for eslint)
ase/*.cc: fix missing <algorithm> include
ase/*.hh: fix missing <algorithm> include
misc/cirun: use $CITAG, instead of hard coding dist
Merge branch 'log2file' # 2024-05-20 Tim Janik f4a6e2d7
* Branch commit log:
package.json: add --log2file to synth engine
electron/main.js: add --log2file to synth engine
ase/utils.hh: include ase/logging.hh
ase/main: add --log2file and log info of interest
ase/engine.cc: log missing PCM driver as error
ase/driver.cc: log driver opening as info
ase/logging: add log_setup(), loginf() and logerr()
ase/logging: add source files for logging
Merge branch 'override-drivers' # 2024-05-20 Tim Janik 80ed0d56
* Branch commit log:
ui/Makefile.mk: add --norc when running --js-api
doc/Makefile.mk: add --norc when running --class-tree
ase/server.cc: ase_{error_blurb|error_from_errno}: always map errno to strerror
ase/driver-alsa.cc: always pass ALSA errno back to the caller
ase/cxxaux.cc: ignore ptrace_scope when constructing debugger cmd
misc/GNUmakefile: allow subdir builds
ase/Makefile.mk: utilize GNU Parallel for test execution
Use GNU Parallel if available, otherwise xargs.
Avoid parallel.moreutils which is incompatible and tends to drop jobs.
ase/engine.cc: let main_config.pcm_override, .midi_override override drivers
ase/main.cc: add -P and -M
ase/main.hh: add pcm_override, midi_override to MainConfig
ase/main.cc: implement --list-tests
Merge branch 'uselocale' # 2024-05-20 Tim Janik 72514ffd
* Branch commit log:
ase/strings: provide POSIX-locale strerror()
ase/main.cc: apply user locale
Merge branch 'npm-updates' # 2024-05-20 Tim Janik 0a4b1af8
* Branch commit log:
ui/b/tracklist.js: work around postcss-advanced-variables bugs
ui/startup.js: minor
package.json, ui/postcss.config.mjs: remove unused postcss-normalize-charset
With postcss-import, we stopped adding charset to generated imports.
ase/main.cc: document --norc
ui/Makefile.mk: fix missing dep on ui/postcss.config.mjs
ui/Makefile.mk: make .js files an index.html dependency
ui/jsextract.js: leave @charset "UTF-8" to the postcss build step
ui/postcss.config.mjs: add postcss, tailwind and css-function configs
ui/postcss.js: remove unused in-browser impl of postcss
ui/Makefile.mk: properly extract css`` into build files, adjust linting
Keep *.js files with extracted css`` snippets around for parallel linintg.
package.json: shorten rebuild times
ui/Makefile.mk: generate import for dark.scss
ui/global.scss: import theme.scss here
ui/mixins.scss: remove all color definitions
ui/theme.scss: remove all color definitions
ui/dark.scss: include theme color definitions
ui/theme.scss: move scss variable
ui/b/noteboard.vue: use Dom.markdown_to_html()
ui/b/databubble.js: use Dom.markdown_to_html() and move scss var
ui/jsextract.js: keep the same file extension for extracted files
ui/Makefile.mk: merge vue styles, lit styles, stylelint and postcss processing
ui/Makefile.mk: use ui/eslintrc.js for linting
ui/b/statusbar.js: use Dom.markdown_to_html()
ui/stylelintrc.cjs: remove unused setting
ui/b/clipview.js: avoid nested scss variable definitions
ui/sfc-compile.js: avoid useless dep on sass
ui/startup.js: remove browserified.js helper
ui/util.js: fix color parsing
ui/util.js: remove markdown_to_html()
ui/dom.js: add Dom.markdown_to_html()
package.json: add @rollup/plugin-terser, remove browserify
ui/Makefile.mk: build markdown-it for the web via rollup
Get rid of building with browserify which results in a
much larger artifact.
package.json: add eslint helpers
ui/index.html: remove vue-styles.css
ui/postcss.js: add tailwind @apply test
Makefile.mk: properly clean compile_commands.json
.gitignore: ignore /.dir-locals.el
package.json: upgrade allmost all packages
ui/util.js: remove unused compat code for FF-68
ui/util.js: use LSP friendly comments
Merge branch 'sfz-filedialog' # 2024-05-07 Tim Janik 1ca390ce
* Branch commit log:
ui/b/textinput.js: support file picking for props with extensions
ase/api.hh: Property: add name, value, metadata members
* Rename Property.get_metadata(), adjust uses
* Adjust metadata uses and value notifications
ui/b/crawlerdialog.js: minor fixups
ui/util.js: extend_property(): prefetch prop.{name|value|metadata}
devices/liquidsfz/liquidsfz.cc: add sfz as file extension to .instrument
Merge branch 'crawlerdialog' # 2024-05-06 Tim Janik 859b88ed
* Branch commit log:
ui/b/menubar.js: pass `existing=false` on save-as, default to ~MUSIC
ui/b/shell.vue: pass `existing` to b-crawlerdialog, default to ~MUSIC
ui/b/crawlerdialog.js: add docs to BCrawlerDialog class
ui/b/crawlerdialog.js: add dialog to pick files via resource crawler
* Rewrite and merge folderview and filedialog
* Fix grid and entry alignment
* Split direntry and pathentry
* Handle selection of new files, `existing=false`
ase/strings: add string_islower(), string_isupper()
ui/b/filedialog.vue: remove obsolete file
ui/b/folderview.vue: remove obsolete file
ui/b/menubar.js: fix load/save dialog titles
ui/b/preferencesdialog.vue: show all preference settings
ui/little.js: add LitComponent.mkstate() helper for Signal.State
ui/tailwind.scss: add spacing to dialog buttons
ui/types.d.ts: supress TS warnings about missing _()
ui/util.js: inside_display_none(): avoid expensive getComputedStyle
ui/kbd.js: support left<->right for data-subfocus="*"
ui/kbd.js: add keydown_move_focus_{up|down}
ui/kbd.js: add flag to make debugging easier
ui/kbd.js: support up/down/left/right focus with data-subfocus="+"
ase/api.hh, ase/crawler: in ResourceCrawler.assign() split dirname and basename
ase/crawler.hh: fix args
ase/crawler.cc: remove debugging printerr
ase/crawler.cc: ensure dir URLs end in /
ase/api.hh, ase/crawler: rename ResourceCrawler.entries
ase/api.hh: ResourceCrawler: add .folder, .files member properties
ase/gadget.cc: fix emplace() post condition
Merge branch 'member-template' # 2024-04-27 Tim Janik ef130823
* Branch commit log:
ui/b/textinput.js: adjust to this.request_update() rename
ui/b/propinput.js: adjust to this.request_update() rename
ui/b/pianoroll.js: simplify to just use this.clip.all_notes
ui/b/piano-ctrl.js: simplify to just use piano_roll.clip.all_notes
ui/b/pianoroll.js: listen to wheel events with passive:false
ui/b/knob.js: listen to wheel events with passive:false
ui/b/clipview.js: simplify to just use this.clip properties
ui/b/trackview.js: simplify to just use this.track properties
ui/b/app.js: provide App.project and auto update App.project.name
ui/b/positionview.js: use App.project with .bpm, .numerator, .denominator
ase/api.hh: Project: add bpm, numerator, denominator properties
ui/Makefile.mk: alter stamp to rebuild ui/index.html after errors
ui/Makefile.mk: include jsonipc/jsonipc.js in linting
ui/b/contextmenu.js: force integrate_children() within render_contextmenu()
ui/b/trackview.js: fix early this.mcc() invocation
ui/wrapper.js: avoid arbitrarily calling freeze_deep() on unknown objects
ui/little.js: use tracking_wrappe() for .render() and .updated()
ui/index.html: provide module map for ./signal.js and auto-load it
ui/signal.js: export Signal, State, Computed, Watcher, tracking_wrapper
Introduce JavaScript Signal and provide tracking_wrapper() to utilize
dependency tracking for synchronous functions.
ui/Makefile.mk: add signal-polyfill.js module to site build files
ase/properties.hh: include api.hh
ase/api.hh: add include for Member<>
package.json: add signal-polyfill
ase/clip: add all_notes, end_tick member properties
ase/main.cc: let --fatal-warnings set assertion_failed_fatal=true
ase/api.hh: expose Emittable.emit_notify()
.gitignore: ignore package-lock.json
jsonipc/jsonipc.js: maintain $props.promise and allow GC of objects with props
jsonipc/jsonipc.hh: generate C++ properties as reactive JS properties
This gets rid of getter() and setter() on the JavaScript side and instead
provides an object property that supports assignment and readout.
jsonipc/jsonipc.hh: determine JavaScript initializer from C++ property type
jsonipc/jsonipc.js: add reactive property fetching, support finalizer cleanup callbacks
jsonipc/jsonipc.hh: use C++17 to check for Has_setget<>
jsonipc/jsonipc.hh: support Member<> fields with set() + get() accessors
This uses C++20 concepts to detect the Member<> field.
jsonipc/jsonipc.hh: avoid implicit `await` that delays setters, pass all args
jsonipc/jsonipc.hh: fix missing `const`
ase/project: create Member bpm, numerator, denominator, skip musical_tuning
Leave (re-)implementation of musical_tuning (with its enum list) for later
when we actually use it.
ase/properties.hh: remove unused struct Prop
ase/properties, ase/gadget: remove unused PropertyBag
ase/{parameter.hh,properties.hh}: move ParameterProperty into properties.hh
ase/properties: inline PropertyBag::operator+=
ase/parameter.hh: move ParamExtraVals out of Param
ase/parameter.cc: maintain "ident=..." in metadata_ alongside cident
ase/gadget: add name member property
ase/gadget: implement registry to access Member<>s ad parameters
* Implement _register_parameter()
* Implement requires_accessor(), register_accessor()
* Add ExtraVals to _register_parameter()
* Implement GadgetImpl::create_properties() from Member
* In create_properties(): use dynamic_cast to identify class member list
When creating the properties for an instance, walk through the known
GadgetClassMemberList entries, test each via dynamic_cast and thus
identify all class member lists that match the instance.
ase/member: add Member<> to implement member field APIs via simple accessors
* FunctionTraits<>: provide ClassType, ReturnType, Arguments
* Add Member<> template
* Add MemberDetails to capture meta data
* Add and test _register_parameter()
* Add and test ExtraVals
* Pass ExtraVals as _register_parameter(ExtraVals)
* In tests, return bool from set()
* Add support for Member<accessor> without data field
Note, Member<> do not support initialization from the ctor.
In practice, we cannot call a Member<> setter for intiialization,
as it may be pointing to an abstract method, implemented by a
yet to be initialized derived class.
Related:
"C++ Properties - a Library Solution", by Lois Goldthwaite
https://accu.org/journals/overload/13/65/goldthwaite_255/#d0e143
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1615.pdf
ase/crawler: add documentation to methods
ase/driver.cc: docs
ase/driver.hh: docs
ase/strings.cc: fix typeid_name() tests
ase/main.cc: support --test[=testname]
ase/cxxaux: return const char* from typeid_name() and string_demangle_cxx()
Merge branch 'fix-lint' # 2024-04-27 Tim Janik ad00599f
* Branch commit log:
ase/combo.cc: fix includes
ase/clapdevice.cc: fix includes
ase/device.cc: fix includes
ui/b/clipview.js: write proper todo comment
ase/inifile.cc: write proper todo comment
ase/gtk2wrap.cc: write proper todo comment
ase/engine.cc: write proper todo comment
ase/driver.cc: fix comment
ase/driver-alsa.cc: fix cpp cond
ase/device.cc: write proper todo comment
ase/combo.cc: write proper todo comments
ase/clapplugin.cc: fix includes
ui/b/positionview.js: write proper todo comments
ui/b/propgroup.js: write proper todo comment
ase/clapdevice.cc: write proper todo comments
Merge branch 'highlight-friendly-css' # 2024-04-27 Tim Janik 60f501a0
* Branch commit log:
ui/b/*.js: use css`` method of JsExtract
ui/little.js: allow css`` constructs
.gitignore: add ignores
ui/postcss.js, ui/tailwind.config.mjs: move tailwind config
Merge branch 'js-fixes' # 2024-03-27 Tim Janik b13f8b94
* Branch commit log:
ui/kbd.js: when changing focus, scrollIntoView()
ui/wrapper.js: fix formatting of missing property error
ui/b/cliplist.js: use LitElement.weak_this
ui/little.js: provide lazily initialized LitElement.weak_this
ui/Makefile.mk: first check syntax via eslint, then types
package.json: add printf-ts for printf-style formatting in JS
Merge branch 'disabled-button-menu-items' # 2024-03-06 Tim Janik db5b11af
* Branch commit log:
ui/b/menurow.js: update menu item description
ui/b/menuitem.js: remove, use <button/> instead now
This addresses #55 by now keeping a button inside a shadowRoot.
ui/b/contextmenu.js: handle .isactive, disabled state, focus assignment
ui/b/aboutdialog.js: use startViewTransition() to show dialog with async values
ui/eslintrc.cjs: allow & in class attributes of lit elements
ui/b/dialog.vue: add floating-dialog styling
ui/theme.scss: fix CSS
ui/mixins.scss: fix CSS
ui/global.scss: fix CSS
ui/b/filedialog.vue: fix CSS
ui/Makefile.mk: fix dir dependency
ase/memory.cc: change TODO comment
ase/clapplugin.cc: change TODO comment
ui/b/trackview.js: use render_contextmenu() and fix menu flicker
ui/b/treeselector-item.vue: fix CSS
ui/b/statusbar.js: use tailwind, fix height
ui/b/menurow.js: use tailwind
ui/b/propgroup.js: fix CSS
ui/b/menubar.js: fix CSS
ui/b/knob.js: fix CSS
ui/b/icon.js: fix CSS
ui/b/dialog.vue: fix CSS
ui/b/devicepanel.vue: fix CSS
ui/b/contextmenu.js: add render_contextmenu()
ui/b/clipview.js: fix CSS
ui/b/choiceinput.js: fix CSS
ui/b/contextmenu.js: properly update buttons on attribute changes
ui/b/contextmenu.js: fix CSS
ui/dom.js: fix comment
misc/version.sh: truncate extra long commit hash characters
Merge branch 'menu-item-button' # 2024-03-04 Tim Janik 64cc42bb
* Branch commit log:
x11test/play-notes.json: fixup icon reference
ui/theme.scss: fix duplicate CSS
ui/postcss.js: minor fix
ui/dom.js: add text_content()
ui/b/treeselector.vue: allow get_uri() in <template/>
ui/b/treeselector-item.vue: allow get_uri() in <template/>
ui/b/textinput.js: fix missing prop init
ui/b/contextmenu.js, menurow.js: fix padding
ui/types.d.ts: add document.startViewTransition
package.json: update all packages (Electron-29)
This updates to Vue-3.4, Electron-29 with Chrome-122,
Node-20 and V8-12.
ui/Makefile.mk: run stylelint when processing CSS files
ui/stylelintrc.cjs: add postcss-scss to stylelint, ignore whitespace diags
package.json: add stylelint-config-standard-scss
package.json: fix dependency order
ui/b/contextmenu.js: treat normal <button/> elements like menu items
ui/b/trackview.js: use button as menu item
ui/b/menurow.js: add some horizontal spacing around rows
ui/b/pianoroll.js: use button as menu item
ui/b/menubar.js: use button as menu item
ui/b/deviceeditor.js: use button as menu item
ui/b/choiceinput.js: use button as menu item
ui/util.js: remove uinused handler
ui/kbd.js: remvoe useless prefix
ui/kbd.js: leave focus activation via Enter to the browser
ui/kbd.js: allow cycling when arrow keys change focus
ui/dom.js: add get_uri, valid_uri, has_uri
ui/b/treeselector.vue: use get_uri()
ui/b/treeselector-item.vue: use get_uri()
ui/b/trackview.js: use get_uri()
ui/b/pianoroll.js: use get_uri()
ui/b/filedialog.vue: use get_uri()
ui/b/choiceinput.js: use get_uri()
ui/eslintrc.cjs: permit custom class names next to tailwind
ui/b/aboutdialog.js: fix class comment to apply to class
ui/b/folderview.vue: remove useless flexbox packing around each file entry
Significant CR speed up, flexbox seems slow in Chrome.
ui/b/editable.js: fix background color
ui/Makefile.mk: remove stale build file $>/ui/global.scss
ui/tailwind.scss: split off button-down-within and button-active
ui/b/menubar.js: adjust icon layout
ui/b/folderview.vue: adjust icon layout
ui/b/icon.js: simplify and remove intermediate HTMLElement
ui/b/menubar.js: apply button-dim
ui/b/playcontrols.js: apply button-down
ui/tailwind.scss: split .button-dim .button-down
ui/b/playcontrols.js: add .button-dim to push-buttons
ui/b/filedialog.vue, ui/b/preferencesdialog.vue: use .button-xl
ui/b/editable.js: only cancel valid edits on Escape
ui/Makefile.mk: invoke ui/postcss.js directly
ui/colors.js: import zcam-js as module
ui/Makefile.mk: allow recovery from build errors during live updates
ui/Makefile.mk: reassign ui-build and ui-reload rules
ui/b/trackview.js: use tailwind for b-editable
ui/b/positionview.js: use tailwind for b-editable
ui/b/editable.js: simplify, remove shadowRoot, use tailwind
ui/tailwind.scss: add text-inherit and :focus-visible styling
ui/eslintrc.cjs: remove unsupported start_view_transition global
ui/b/aboutdialog.js: use startViewTransition() around closing
ui/global.scss: get rid of (now) unused grid helpers
ui/b/filedialog.vue: use col-start-* row-start-*
ui/b/pianoroll.js: use col-start-* row-start-*
ui/b/shell.vue: properly use document.startViewTransition()
ui/index.html: sync document.startViewTransition() with Vue for CR and FF
Always sync document.startViewTransition() with pending Vue updates, and install
a simple handler caller if the browser does not support document.startViewTransition()
(like FireFox-123).
ui/b/aboutdialog.js: use tailwind styling
ui/tailwind.scss: add dialog-header, dialog-footer
ui/tailwind.scss: add button-dim, button-xl
ui/global.scss: leave buttons to tailwind
ui/tailwind.scss: add border-1
ui/tailwind.scss: add hflex, vflex and dialog helpers
ui/tailwind.scss: add dflt border color, disable text selection in base layer
ui/postcss.js: add "dim" color scheme, a smoothed zinc like color
ui/postcss.js: add --tw-border-default-color
ui/ch-component.md: add section on "Guidelines for Web Components"
ui/util.js: remove unneeded visibility:hidden toggeling
This solves the menu-button-stuck-on-outside-click issue
described in #55.
Merge branch 'tailwindcss' # 2024-03-03 Tim Janik 74673c38
* tailwindcss:
ui/global.scss: remove ui/normalize.scss, tailwind does normalization now
ui/global.scss: import tailwind.scss
ui/tailwind.scss: render tailwind base, component, utility styles
ui/eslintrc.js: add tailwindcss recommended warnings
ui/Makefile.mk: add tailwind inputs as global.css dependency
ui/postcss.js: add tailwindcss, tailwindcss/nesting to processing
misc/package.json.in: add prettier, prettier-plugin-tailwindcss for devel
misc/package.json.in: add eslint-plugin-tailwindcss
misc/package.json.in: install tailwindcss components
Merge branch 'pr51/swesterfeld-piano-roll-fixes', closes #51 # 2024-03-03 Tim Janik c5ea11f2
* pr51/swesterfeld-piano-roll-fixes:
ui/b/piano-ctrl.js: use higher tool priority for selected notes
ui/b/pianoroll.js: draw selected notes over unselected notes
ui/b/piano-ctrl.js: support shift cursor up/down (move 1 octave up/down)
Merge branch 'pr50/swesterfeld-default-tempo-120-bpm' # 2024-03-03 Tim Janik aac575d4
* pr50/swesterfeld-default-tempo-120-bpm:
ase/project.cc: set transport tempo when starting playback
ase/project.cc: set default tempo to 120 bpm
Merge branch 'color-js' # 2024-03-03 Tim Janik 8e9eb35e
* Branch commit log:
misc/package.json.in: add colorjs.io
ui/colors.js: export hex_from_zcam() and add zcam4()
misc/package.json.in: remove unused postcss-color-mod-function
ui/postcss.js: remove unused color-mod
Merge branch 'proper-package.json' # 2024-03-01 Tim Janik 19e59488
* Branch commit log:
doc/copyright.ini: fix package.json path
ui/Makefile.mk: adjust paths for the typescript compiler invocation
ui/Makefile.mk: adjust paths for the eslint invocation
ui/Makefile.mk: adjust paths for the stylelint invocation
ui/Makefile.mk: adjust build stamp paths
ui/tsconfig.json: use full path to source files
Makefile.mk: fix missing CLEANFILES
ui/xbcomments.js: use ES6 imports
ui/jsextract.js: use ES6 imports
ui/Makefile.mk: adjust eslint to run in project root
ui/sfc-compile.js: use ES6 imports
ui/eslintrc.cjs: add comment about why this is CJS
ui/eslintrc.cjs: convert to CJS to be loadable from eslint
package.json: use paths relative to project root
doc/jsdoc-slashes.cjs: add comment about why this is CJS
doc/jsdoc-slashes.cjs: convert to CJS to be loadable from jsdoc
doc/jsdoc2md.js: convert to ES6 module
ui/Makefile.mk: use node_modules/ in project root
x11test/replay.sh: use node_modules/ in project root
doc/*: use node_modules/ in project root
electron/Makefile.mk: use node_modules/ in project root
Makefile.mk: install node_modules/ in project root
package.json: move NPM package configuration here
misc/package.json.in: use exec in scripts to spare shell wrappers
Merge branch 'utf8-for-legacy-filenames' - support legacy filenames via UTF-8 private use area mapping # 2024-02-21 Tim Janik f6ea63f3
* utf8-for-legacy-filenames, closes #49:
ui/b/app.js: use displayfs(), displaybasename()
ui/b/folderview.vue: import basename, dirname, displayfs, etc
ui/b/menubar.js: use displayfs(), dirname()
ui/b/filedialog.vue: use displayfs(), displaybasename(), displaydirname()
ui/strings.js: add hex basename dirname displayfs isplaybasename displaydirname
ui/index.html, ui/eslintrc.js, ui/types.d.ts: add assert() globally
ase/project: use encodefs/decodefs for all filenames in the API
ase/crawler: use encodefs/decodefs for all filenames in the API
ase/websocket: add WebSocketServer::utf8_validate()
This exports the websocketpp UTF-8 validation logic.
ase/unicode.cc: test encodefs(), decodefs(), displayfs()
ase/unicode: add encodefs(), decodefs(), displayfs()
ase/tests/benchmarks.cc: use Ase::utf8encode()
ase/unicode: rename utf8encode()
Change string_from_unicode to utf8encode() to be more consistent.
ase/unicode: add utf8decode()
ase/unicode.cc: utf8character<>(): support mapping high bytes to 0xEF80..0xEFFF
ase/cxxaux: export backtrace_command() with lldb and gdb support
Merge branch 'bug-fixes' # 2024-02-21 Tim Janik 7ebcb3eb
* bug-fixes:
ui/b/trackview.js: fix scale rounding that caused extra UI flicker
README.md: link to Roadmap Discussions Feedback & Ideas: #52
ase/combo.cc: fix combo insertion order for devices inserted at end
Fixes #24.
Merge branch 'pr45/swesterfeld-freeverb-mix' - closes #23 # 2024-02-14 Tim Janik 82fad166
* pr45/swesterfeld-freeverb-mix:
devices/freeverb/freeverb.cc: support sample-accurate parameter changes
devices/freeverb/freeverb.cc: optimize processing for constant mix case
devices/freeverb/freeverb.cc: merge dry/wet parameters into mix parameter
See #23. Also add parameter smoothing for mix to avoid clicks when
changing/automating the parameter.
Merge branch 'pr43/swesterfeld-midi-events-uint-offset' - closes #26 # 2024-02-14 Tim Janik 714ea0c0
* pr43/swesterfeld-midi-events-uint-offset:
devices/liquidsfz/liquidsfz.cc: avoid using printf (use printerr instead)
ASE: midievent.hh: fix clang tidy problem (add typename)
devices/saturation/saturation.cc: midi event frame offsets are now unsigned
devices/liquidsfz/liquidsfz.cc: midi event frame offsets are now unsigned
devices/blepsynth/blepsynth.cc: midi event frame offsets are now unsigned
ASE: midilib.cc: midi event frame offsets are now always positive (#26)
ASE: clapplugin.cc: midi event frame offsets are now always positive (#26)
ASE: midievent: avoid negative frame offsets in midi events
Use unsigned data type for midi event offset, see issue #26.
ase/memory.cc: avoid constexpr std::string use that needs clang++-17
Merge branch 'SPEEDUP-UTILS' - extend and speed up internal utils # 2024-02-14 Tim Janik 02e6083c
* SPEEDUP-UTILS:
ase/memory.cc: use array + string ptr unordered_map for quarks
This fixes slowdowns where heavy use of CString lookups turns into a bottleneck.
ase/platform.hh: add extern const char *const ase_sharedir;
ase/Makefile.mk: add extern char*ase_sharedir; to ase/buildversion*.cc
ase/strings.cc: support arrays for string_startswith() and string_endswith()
ase/path: add glob() variant that separates dirs and files
ase/path.cc: increase file_memread() buffer size to up to 1MB
Merge branch 'b-textinput-prop' - add .prop to <b-textinput/> # 2024-02-12 Tim Janik af7da4af
* b-textinput-prop:
ui/b/propinput.js: use <b-textinput .prop=${prop} />
ui/b/objecteditor.js: use <b-textinput .prop=${prop} />
ui/b/textinput.js: move to directly operating on .prop
ase/project.cc: add project.default_license preference
Merge branch 'fix-non-anklang-dir' - fix loading from non-anklang-dir # 2024-02-11 Tim Janik ab3b8da2
* fix-non-anklang-dir:
ase/project.cc: properly halt at root when searching parent dirs
ase/path: add and test Path::isroot()
.gitignore: remove unused backslash that confuses jj
Merge branch 'properties-metadata' - support generic metadata on properties # 2024-02-08 Tim Janik 5f06a6d4
* properties-metadata:
devices/saturation/saturation.cc: add "blurb=" prefix and mark translations
devices/liquidsfz/liquidsfz.cc: add "blurb=" prefix and mark translations
devices/freeverb/freeverb.cc: add "blurb=" prefix and mark translations
devices/blepsynth/blepsynth.cc: add "blurb=" prefix and mark translations
ase/api.hh: introduce metadata() for properties
* Add const this qualifier to parameter APIs.
* engine.cc: add "descr=" prefix to property metadata
* project.cc: add "descr=" prefix to property metadata
ase/strings: add kvpairs_fetch() and kvpairs_assign()
Merge branch 'MOUSE-WHEEL' - fix mouse wheel handling in modern Chrome and Firefox # 2024-02-08 Tim Janik 070d91a9
* MOUSE-WHEEL:
ui/util.js: remove unused wheel2scrollbars
ui/b/pianoroll.js: reinstante hzoom and vzoom adjustments via Ctrl
ui/util.js: use Mouse.wheel_delta()
ui/b/knob.js: use Mouse.wheel_delta()
ui/b/pianoroll.js: properly scroll via deltaY from Mouse.wheel_delta()
ui/mouse.js: wheel_delta(): provide .x, .y, .z in pixels
ui/b/app.js: defer ZMove handling to mouse.js
ui/mouse.js: include ZMove notification handling
ui/index.html: start mouse.js early on
ui/mouse.js: add event_movement() and wheel_delta() to fix event coords
Cross browser normalization of movementX,movementY and deltaX,deltaY is a hot mess, see:
https://bugs.chromium.org/p/chromium/issues/detail?id=1092358
https://bugzilla.mozilla.org/show_bug.cgi?id=1392460
https://github.com/w3c/uievents/issues/181
https://github.com/w3c/pointerlock/issues/42
https://github.com/mdn/content/issues/11811
ui/index.html: disable modulepreload, it causes module errors in Firefox-122
Merge branch 'GRID-FILE-BROWSER' - use <grid/> for file browser # 2024-02-08 Tim Janik 8cfd3299
* GRID-FILE-BROWSER:
misc/package.json.in: fix path of rebuild command
ui/kbd.js: fix coord check during horizontal focus movement
ui/b/folderview.vue: use grid with column flow to fix slow flexbox wrapping
ase/websocket.cc: use "CR" as Chrome abbreviation
ase/strings.hh: fix spacing
ase/clapplugin.cc: fix newline
Merge branch 'ATOMIC-STACK' - simple atomic stack based on Loft # 2024-02-08 Tim Janik 765600ad
* ATOMIC-STACK:
ase/atomics.cc: add atomic_valuestack_test()
ase/atomics.hh: add a simple AtomicStack<> with just push, pop, empty
ase/loft.hh: reduce includes
ase/loft.hh: allow constexpr Loft::Allocator and export allows_read_after_free
misc/synsmell.py: escape FI[X]ME
misc/synsmell.py: reduce false positives for the separate-body check
Merge branch 'SFZ-STRING-PARAM' - pass SFZ instrument as string # 2024-02-08 Tim Janik 789a493e
* SFZ-STRING-PARAM:
devices/liquidsfz/liquidsfz.cc: pass instrument name as string param via Quark
ase/memory.hh: fix missing constexpr for CString::qset()
Merge branch 'pr7/swesterfeld-liquidsfz' # 2024-02-08 Tim Janik 55480ad2
* pr7/swesterfeld-liquidsfz:
devices/liquidsfz/Makefile.mk: remove -Iexternal/liquidsfz/lib
Includes need to be added to ase/Makefile.mk for all tools to pick them up.
ase/Makefile.mk: add -Iexternal/liquidsfz/lib
ASE: add copyright information to liquidsfz meta includers
ASE: compile liquidsfz library code into ase library
DEVICES: liquidsfz: prepare code for .sfz file specific parameter handling
DEVICES: liquidsfz: add include path to external submodule
EXTERNAL: liquidsfz: add swesterfeld/liquidsfz commit from 2023-11-18 15:15:57
git submodule add --name liquidsfz https://github.com/swesterfeld/liquidsfz.git external/liquidsfz
git -C external/liquidsfz checkout 590149ea8c83588c17833d7b9b6653f0f6aab6fb
DEVICES liquidsfz: port to new parameter API
DEVICES: liquidsfz: move SFZ loading to its own thread
DEVICES: liquidsfz: add LiquidSFZ device for SFZ support
Merge branch 'LIT-DEVICEEDITOR' - port b-deviceeditor to Lit # 2024-02-08 Tim Janik 760b00be
* LIT-DEVICEEDITOR:
ui/b/deviceeditor.js: point out layout todo
ui/b/deviceeditor.js: port logic to lit
ui/b/contextmenu.js: support popup with null origin
ui/b/deviceeditor.js: convert syntax to valid javascript
ui/b/deviceeditor.js: replace deviceeditor.vue
Merge branch 'STRING-PROPS' - support String as AudioProcessor property # 2024-02-08 Tim Janik 2aef82b3
* STRING-PROPS:
STRING-PROPS: ase/processor: allow temporary String mappings for text parameters
ase/memory: add CString::temp_quark_impl() to expose quarks in some cases
ase/memory: introduce CString::qset() which can count quark references
ase/processor: AudioProcessor: unify IBus+OBus into IOBus
Allow non-trivial ~IOBus() execution.
ase/sndfile.cc: add libmp3lame to assertion about missing MP3 support
ui/b/propinput.js: start text field support
ase/parameter.cc: treat is_text() as non-numeric and allow Quark values
Merge branch 'branch-check' # 2024-01-26 Tim Janik 9d38b0f8
* branch-check:
GITHUB: workflows/testing.yml: update to actions/upload-artifact@v4
GITHUB: workflows/testing.yml: only build & upload docs from tim-janik/anklang
GITHUB: workflows/testing.yml: update to actions/cache@v4
GITHUB: workflows/testing.yml: use actions/[email protected], fix annotated tag
Upgrade to actions/[email protected] and Fix actions/checkout messing up
checkouts of annotated tags; actions/checkout#290
Also fetch submodule upfront.
GITHUB: workflows/testing.yml: remove Release-Upload run
MISC: Makefile.mk: fix script v2.34 invocation
The util script from util-linux 2.34 (focal) has no `-O` option.
GITHUB: workflows/testing.yml: add `make branch-check` and check errors in PRs
MISC: Makefile.mk: add branch-check rule, $BRANCH_CHECK_EXIT holds error status
GITHUB: workflows/testing.yml: disable CI on tag pushes
MISC: mknews.sh: show git command line
MISC: Makefile.mk: fix missing CLEANDIRS
Merge branch 'clang-tidy+synsmell' # 2024-01-25 Tim Janik ceaf5265
* clang-tidy+synsmell:
UI: Makefile.mk: ui/lint: add checks with misc/synsmell.py
DEVICES: Makefile.mk: devices/lint: add checks with misc/synsmell.py
ASE: Makefile.mk: ase/lint: add checks with misc/synsmell.py
MISC: synsmell.py: check syntax for code smells, based on regular expressions
ASE: Makefile.mk: allow double loop variable tests in mathutils.cc
ASE: *.cc: fix clang-tidy warnings
DEVICES: saturation/Makefile.mk: remove -Iexternal/pandaresampler/lib
DEVICES: blepsynth/Makefile.mk: remove -Iexternal/pandaresampler/lib
ASE: Makefile.mk: move -Iexternal/pandaresampler/lib here
MISC: Makefile.mk: clang-tidy: strip $PWD
MISC: colorize.sh: fix black-on-black coloring
MISC: Makefile.mk: fix lint-unused rule
MISC: Makefile.mk: fix lint-cppcheck rule
MISC: Makefile.mk: clang-tidy: support target specific .CTIDY_FLAGS
MISC: Makefile.mk: add clang-tidy-check: false exit status on errors/warnings
MISC: Makefile.mk: clang-tidy: skip empty reports during printout
MISC: Makefile.mk: clang-tidy: add -march=x86-64-v2 so atomics checks pass
Merge branch 'docker-apt-cache' # 2024-01-25 Tim Janik 4dcc915d
* docker-apt-cache:
MISC: version.sh: shorten the logic
GITHUB: workflows/testing.yml: compress lines
MISC: cirun: simplify, add -B to trigger build, compress cache
MISC: Dockerfile.focal: add /var/cache/apt caching
MISC: mkassets.sh: build release assets with clang
Merge branch 'reduce-make-deps' # 2024-01-22 Tim Janik 8b6e4a71
* reduce-make-deps:
ASE: atomics.cc: add simple AtomicIntrusiveStack test
MISC: publish.sh: fix git command quoting
MISC: mknews.sh: fix extraneous commit hash output
ASE: cxxaux.cc: fix missing unistd.h include for read()
MISC: Makefile.mk: add appimagetools/ to CLEANDIRS
MISC: mkAppImage.sh, mkdeb.sh: fetch $pkgdir from out/config.sh
Makefile.mk: generate config.sh to export pkgdir, etc
UI: Makefile.mk: add tscheck/ to CLEANDIRS
IMAGES: knobs/Makefile.mk: add images/ to CLEANDIRS
MISC: package.json.in: minor fix
ASE: Makefile.mk: avoid useless rebuilds
Makefile.mk: TAGS: use sed to compress flood of "Warning: ignoring null tag"
Makefile.mk: regen TAGS after git changed
Makefile.mk: avoid touching ls-tree.lst needlessly
Makefile.mk: avoid npm rebuilds on git changes
Makefile.mk: avoid needlessly touching package.json
Merge branch 'simpler-assert' # 2024-01-22 Tim Janik 25b6611f
* simpler-assert:
ASE: utils: use diag_prefix() for printouts
ASE: backtrace.*: remove old code
ASE: cxxaux.hh: add ASE_ASSERT_UNREACHED() and ASE_ASSERT()
ASE: cxxaux.hh: add assertion_fatal() and bool assertion_failed_fatal
ASE: cxxaux.cc: add assertion_fatal(), handle $ASE_DEBUG assertion debug keys
Check and implement "breakpoint", "backtrace" and "fatal-warnings" in $ASE_DEBUG
Merge branch 'swesterfeld-move-bleptools-to-dspresearch' # 2024-01-22 Tim Janik a26757d3
* swesterfeld-move-bleptools-to-dspresearch:
DEVICES: blepsynth: remove design/test tools (moved to dsp-research repo)
Merge branch 'build-fixes' # 2023-12-05 Tim Janik fce55a41
* build-fixes:
DOC: Makefile.mk: work around broken heading anchors in pandoc-1.3.9
ASE: Makefile.mk: ase/sndfile.cc requires fully built $>/lib/libsndfile.so
Merge branch 'sndfile-1.2.2' - build custom libsndfile # 2023-11-22 Tim Janik 1ca7ebc6
* sndfile-1.2.2:
MISC: mkdeb.sh: require libmpg123-0 for installations
ASE: Makefile.mk: build and link against our own libsndfile.so
ASE: sndfile.cc: check libsndfile header and build config
.gitmodules: sort modules
EXTERNAL: libsndfile: add libsndfile/libsndfile commit from 2023-10-24 09:47:22
git submodule add --name libsndfile https://github.com/libsndfile/libsndfile.git external/libsndfile
git -C external/libsndfile checkout e486f20fd4b1c7490cde84f22635e1c267ae882b
MISC: Dockerfile.arch: install mpg123, lame for libsndlfile
MISC: Dockerfile.focal: install Vorbis, libmpg123, libmp3lame, update Pandoc
Merge branch 'git-shallow' # 2023-11-22 Tim Janik bdb82734
* git-shallow:
MISC: mknews.sh: create NEWS in forward order
MISC: mknews.sh: handle repos without tags
MISC: mkassets.sh: fallback to building in /tmp/anklang.tmp/
MISC: version.sh: support git repos without tags
Merge branch 'swesterfeld-blepsynth-sample-accurate', closes #27 # 2023-11-18 Tim Janik 80927e07
* swesterfeld-blepsynth-sample-accurate:
DEVICES: blepsynth: treat negative time offsets as time offset 0 events
DEVICES: blepsynth: remove debugging code
DEVICES: blepsynth: change defaults for 2nd oscillator / mix
DEVICES: blepsynth: remove event offset debug checks
DEVICES: blepsynth/blepsynth.cc: improve updates for some parameters
DEVICES: blepsynth/blepsynth.cc: use new filter version from dsp-research
- use better tanh() approximation in filter saturation function
DEVICES: blepsynth/blepsynth.cc: set more parameter used flags
DEVICES: blepsynth/blepsynth.cc: use switch for parameter updates
DEVICES: blepsynth/blepsynth.cc: implement sample accurate event processing
Merge branch 'swesterfeld-saturation', closes #28 # 2023-11-18 Tim Janik be928207
* swesterfeld-saturation:
DEVICES: saturation: treat negative time offsets as time offset 0 events
DEVICES: saturation: remove debugging code
DEVICES: saturation: port to new parameter API, support in-block events
DEVICES: saturation: update DSP code
- process left/right in single SaturationDSP object
- parameter smoothing
- performance optimizations
DEVICES: saturation: add Saturation device
Merge branch 'separate-ci-checks' # 2023-11-18 Tim Janik afb2db07
* separate-ci-checks:
GITHUB: workflows/testing.yml: avoid make all vs make check races
Makefile.mk: ensure all checks are added $(CHECK_TARGETS)
Merge branch 'simplify-assertions' # 2023-11-17 Tim Janik b9dcc9b8
* simplify-assertions:
ASE: queuemux.hh: avoid inlining fallback method `empty()`
ASE: cxxaux: assertion_failed: simplify many call sites by adding noexcept
ASE: queuemux.hh: simplify impls by adding noexcept
ASE: platform.cc: fix up assertion_failed() call
ASE: engine.cc: use ASE_ASSERT_WARN() instead of one-off special macro
ASE: cxxaux: assertion_failed: simplify many call sites by using char*
ASE: cxxaux.hh: simplify compiler errors by avoiding macro indirections
ASE: internal.hh: simplify compiler errors by avoiding macro indirections
Merge branch 'fix-multiplexer-iterator' # 2023-11-17 Tim Janik 47565461
* fix-multiplexer-iterator:
ASE: queuemux.hh: properly check for more() in iterator equality operator
ASE: midievent.cc: show hex dump for unknown events
Merge branch 'param-events' # 2023-11-16 Tim Janik 8f23a2df
* param-events:
DEVICES: blepsynth/blepsynth.cc: port to new Parameter API
* Start using install_params()
* Rename pid_key_[abcdefg]_, add key prefix
* Declare all parameter IDs in an enum
* Use ase_gettext() multi arg formatting
* Construct AudioProcessor with ProcessorSetup&
* Add "toggle" hint for piano key properties
* Handle PARAM_VALUE events via apply_event()
* Start using midi_event_input()
* Port remaining OSC1 and OSC2 parameter references
* Adjust and check parameter state *after* processing MIDI events
* Adjust parameter ID types
DEVICES: freeverb/freeverb.cc: support new param events
* Use install_params(ParameterMap)
* Construct AudioProcessor with ProcessorSetup&
* Use adjust_all_params() and apply_input_events()
* Fix MODE hints and param position
DEVICES: colorednoise.cc: use adjust_all_params() and apply_input_events()
* Port to install_params(ParameterMap)
* Construct AudioProcessor with ProcessorSetup&
DEVICES: Makefile.mk: include colorednoise.cc in the build
ASE: midilib.cc: use midi_event_input() and midi_event_output()
ASE: clapplugin.cc: use midi_event_input()
ASE: engine: allow atomic frame_counter and block_size access
ASE: engine.cc: use midi_event_output()
ASE: midievent: rename + rewrite MidiEventReader to read many queues
* Base MidiEventReader on QueueMultiplexer<> to turn
it into a multiplexing event queue reader
* Rename MidiEventReader (former MidiEventRange)
ASE: clapplugin.cc: use call_delete<>()
ASE: cxxaux.hh: add call_delete<> to quickly create delete callbacks
ASE: rename MidiEventOutput (former MidiEventStream)
ASE: nativedevice.cc: use AudioProcessor.access_properties()
ASE: midilib: construct AudioProcessor with ProcessorSetup&
ASE: api.hh, server.cc: add Server.engine_stats()
ASE: engine: add AudioEngine.engine_stats()
ASE: clapplugin.cc: construct AudioProcessor with ProcessorSetup&
ASE: clapplugin: remove unused flags fiels from params
ASE: combo: construct AudioProcessor with ProcessorSetup&
ASE: processor: implement parameter change events
* Introduce AudioParams, t0events, install_params(), apply_event()
* Implement AudioParams::dirty()
* Implement AudioProcessor.access_properties()
* Store aseid_ in each AudioProcessor
* Add property weak pointers to AudioParams
* Support install_params() with an ordinary map<>
* Initialize parameter cache with intial value
* Disable Property inflight handling code
* Rename MidiEventOutput (former MidiEventStream)
* Implement multiplexing MIDI event handling
* Atomically modify and swap t0events to pass between threads
* Leave new/delete of t0events to the main-thread
* Add modify_t0events<>() helper to care about atomic swapping
* Rename and rewrite get_event_input() and get_event_output()
* Introduce RenderContext for rendering specific variables
* midi_event_input(): setup multiplexing event queue reader
* midi_event_output(): provide writable MIDI event vector
* Implement send_param()
* Only set dirty and changed for params with property object
* Enqueue PARAMCHANGE notification if params changed
* Simplify event processing
* Provide apply_input_events() to assign PARAM_CHANGE events
* Use uint32_t as parameter id type for processors
* Provide adjust_all_params() to call adjust_param() for all params
ASE: midievent: support MidiMessage::PARAM_VALUE
ASE: midievent: add PARAM_VALUE and make_param_value()
ASE: parameter: add ParameterMap and support groups
* Make `ident` the first Param() field, adjust callers
* Add ParameterMap helper type
* Support Param.MinMaxStep as double min,max pair
* Catch simple cases of duplicate IDs, ident, label
* Assign group to new ParameterMap Params
ASE: queuemux: support iterators and assign via std::array<const Queue*>
ASE: queuemux: add QueueMultiplexer.assign() and support iterator template arg
Merge branch 'loft-stl-allocator' # 2023-11-13 Tim Janik 89cc7d6c
* loft-stl-allocator:
ASE: loft: provide STL allocator adapter Loft::Allocator
ASE: utils.cc: allow 3 character "unicode" icons
ASE: cxxaux.cc, utils.cc: for --fatal-warnings, call breakpoint()
This allows continuations in gdb sessions.
ASE: utils.hh: require multiple arguments to ase_gettext() for string_format()
Merge branch 'queuemux' # 2023-11-13 Tim Janik e1031e5f
* queuemux:
ASE: queuemux: integrate QueueMultiplexer
ASE: queuemux.cc: start QueueMultiplexer implementation
Merge branch 'swesterfeld-flexible-adsr', closes #6 # 2023-11-11 Tim Janik 409e87d3
* swesterfeld-flexible-adsr:
DEVICES: blepsynth/blepsynth.cc: cleanup unneccessary initialization
DEVICES: blepsynth/blepsynth.cc: introduce flexible ADSR model
- volume envelope can now be analog (exponential) or flexible
- flexible envelope has adjustable attack/decay/release slope
- support changing volume/filter envelope params while note is playing
Merge branch 'swesterfeld-blepsynth-sallen-key-filter', closes #10 # 2023-11-01 Tim Janik 441cbca2
* swesterfeld-blepsynth-sallen-key-filter:
ASE: resampler2: remove, superseded by pandaresampler
DEVICES: blepsynth/blepsynth.cc: reorder parameter groups
DEVICES: blepsynth/Makefile.mk: include external/pandaresampler/lib
EXTERNAL: pandaresampler: add swesterfeld/pandaresampler commit from 2023-02-14 10:18:45
git submodule add --name pandaresampler https://github.com/swesterfeld/pandaresampler.git external/pandaresampler
git -C external/pandaresampler checkout 29097dc786b6d75a9deb12e70ec8960a78f7f8f5
DEVICES: blepsynth: update LadderVCF with drive/reso boost
DEVICES: blepsynth: optimize filter code if freq/reso/drive are constant
DEVICES: blepsynth: update LadderVCF, setup cutoff frequency range
DEVICES: blepsynth: add latency compensation for LadderVCF
DEVICES: blepsynth: update LadderVCF to version from dsp-research
- oversample LadderVCF with factor 4, too
DEVICES: blepsynth: compensate for SKFilter FIR oversampling delay
DEVICES: blepsynth: reset filter state on filter type change
DEVICES: blepsynth: reset SKFilter state if filter mode changes
DEVICES: blepsynth: make cutoff parameter log-scaled
DEVICES: blepsynth: rename vcf_ to ladder_filter_; minor cleanups
DEVICES: blepsynth: implement midi velocity handling and add master gain
DEVICES: blepsynth: smooth drive / reso input for Sallen-Key Filter
DEVICES: blepsynth: add Sallen-Key Filter
Merge branch 'constrain-parameters' # 2023-11-01 Tim Janik fff51b9e
* constrain-parameters:
UI: b/databubble.js: fix assertion
ASE: processor.cc: use parameter->dconstrain()
ASE: parameter: add dconstrain() to convert to double and constrain
ASE: processor.cc: use Parameter::construct_hints()
ASE: parameter: export construct_hints(), always use "stepped" hint for bools
UI: b/propinput.js: give toggles preference over choices
ASE: processor.cc: remove unused choices from boolean param
ASE: serialize.cc: call jsonvalue_to_string() directly
ASE: jsonapi.cc: call jsonobject_to_string() directly
JSONIPC: jsonipc.hh: always write null instead of NAN, ±Inf
Remove JsonWriteFlags from the (template) API.
JSONIPC: Makefile: fix include path to external/rapidjson/
EXTERNAL: rapidjson: update Tencent/rapidjson to 2023-09-28 11:36:59 +0200
git -C external/rapidjson checkout f9d53419e912910fd8fa57d5705fa41425428c35
Among other changes, this provides kWriteNanAndInfNullFlag.
ASE: parameter: value_from_text(): yield integers for text inputs of choices
Merge branch 'npm-updates' # 2023-11-01 Tim Janik 8d568227
* npm-updates:
MISC: package.json.in: update various minor versions
Makefile.mk: allow $NPM_INSTALL overrides via config-defaults.mk
This allowes e.g.:
NPM_INSTALL = pnpm install --prefer-offline
Merge branch 'g++-bun-pnpm-ci' # 2023-10-27 Tim Janik 042fd7ab
* g++-bun-pnpm-ci:
GITHUB: workflows/testing.yml: test Arch builds with g++
MISC: Dockerfile.arch: provide pnpm as JS package manager
MISC: Dockerfile.arch: update build comments
MISC: Dockerfile.focal: provide bun as JS package manager
MISC: cirun: defer check for docker-buildx-plugin until we actually need it
Makefile.mk: guard against `prefix := / / ` etc which will confuse `rm -rf`
EXTERNAL: websocketpp: update zaphoyd/websocketpp to 2022-05-24 18:42:50 2022 -0500
git -C external/websocketpp/ checkout b9aeec6eaf3d5610503439b4fae3581d9aff08e8
This includes fixes applied after version 0.8.2, in particular it allows g++ to build
the sources with C++20 enabled. See:
https://github.com/zaphoyd/websocketpp/issues/991
Merge branch 'bun' # 2023-10-24 Tim Janik 63e4292b
* bun:
Makefile.mk: fix up sharp and electron installations with bun
At the moment, we need to call the postinstall scripts manually, see:
https://github.com/oven-sh/bun/pull/5077
MISC: config-checks.mk: support bun 1.0.0 as package manager
Merge branch 'pnpm' # 2023-10-24 Tim Janik f1b37e40
* pnpm:
MISC: config-checks.mk: remove unused NPM_INSTALL
Makefile.mk: save XNPM to defaults and use it to install node_modules/
MISC: config-checks.mk: check for pnpn, provide as $(XNPM)
UI: Makefile.mk: fetch Lit version directly from node_modules/lit/package.json
X11TEST: ereplay.cjs: set timeout to 2500 to allow click durations of 2200ms
Merge branch 'package-updates' # 2023-10-24 Tim Janik 1c7da515
* package-updates:
MISC: package.json.in: update babel, eslint, rollup, electron, postcss, lit
Major version updates:
- electron-27.0.2
- icon-gen-4.0.0
- lit-3.0.0
- rollup-4.1.4
- postcss-lab-function-6.0.7
- puppeteer-core-21.4.0
MISC: package.json.in: update to vue-3.3.6
Merge branch 'preferences' and live PCM driver updates # 2023-10-16 Tim Janik c7ece44a
* preferences:
UI: util.js: call prop->ident()
ASE: shorten Parameter method ident()
ASE: strings: add fallback to string_option_find(), remove string_option_get()
ASE: testing.cc: use string_option_find_value()
ASE: processor.cc: use string_option_find()
ASE: cxxaux.cc: use ase_fatal_warnings
ASE: main: remove feature toggles, use ase_fatal_warnings
ASE: utils: export ase_fatal_warnings
ASE: utils.cc: base debug key checks on string_option_find_value()
ASE: strings: base option search on string_option_find_value() (without malloc)
ASE: project: create_properties: use property_bag() and Prop
ASE: clapdevice.cc: use parameter_guess_nick()
ASE: gadget: add property_bag() and create_properties()
UI: b/preferencesdialog.vue: edit everything with Shift+Ctrl+Alt+Click [Close]
UI: b/preferencesdialog.vue: fetch + edit only selected PCM + MIDI preferences
UI: b/objecteditor.js: fix blurb and descr bubbles
UI: index.html, eslintrc.js: allow _("for translation") markup
UI: util.js: rename extended Property descr() (abbreviate)
UI: b/choiceinput.js: treat choice property as string
UI: b/preferencesdialog.vue: special case driver.pcm.devid
UI: b/objecteditor.js: rename internal function on xprop
UI: b/contextmenu.js: support focus_uri
ASE: engine.cc: add preferences for up to 4 MIDI controllers
ASE: engine.cc: cache PCM driver live listing for ca half a second
ASE: engine: change PCM driver when preferences change
ASE: engine.cc: add audio.synth_latency Preference
ASE: driver*: allow to query all PcmConfig values from drivers
ASE: api.hh, server: remove all old preference handling
ASE: api.hh, server: add Server.list_preferences()
ASE: properties: add Preference classes and majorly simplify Property impls
* Remove obsolete structures and aux constructors
* Add getter/setter lister for enumeration types
* Add PropertyBag - a helper to simplify property registrations
* Add small PropertyImpl based on ParameterProperty
* Add generic Preference class, useful for static initialization
* Remove property nick guessing
* Add global Preference setting list based on Parameter
* Implement saving/loading preferences from anklangrc
* Auto save preference changes after maybe half a second
* Ensure that Preference names follow NCName syntax
ASE: defs.hh: add PropertyImpl
ASE: api.hh: rename Property.descr() (abbreviate)
ASE: api.hh, server: provide access_preference() instead of access_prefs()
ASE: api.hh: add constexpr GUIONLY, STORAGE, STANDARD to avoid C++ SIOF
ASE: main.cc: save/load preferences unless --norc is given
ASE: processor: use Parameter instead of the old ParamInfo
ASE: parameter: add Parameter, ParameterProperty and parameter_guess_nick()
* Implement Parameter{} with Param{} as initializer
* Add constrain, normalize and text conversions
* Implement simple ParameterProperty abstract base class
* Support callback function to query parameter choices
* In set_value: constrain Value according to parameter range
* Use variants for flexible initilizers
* Treat choice parameters as text
* Match choices via normalized Damerau-Levenshtein distance
* Add parameter_guess_nick() (former on property_guess_nick).
ASE: value.hh: add Value::is_string()
ASE: object.cc: allow NCName as event detail, to support preference identifiers
ASE: defs.hh: declare Preference
ASE: strings: add kvpairs_search()
ASE: strings: define and use ASE_STRING_SET_ASCII_ALNUM and _LOWER_ALNUM
ASE: unicode.cc: add missing docs
ASE: unicode: add string_to_ncname() and string_is_ncname()
ASE: levenshtein: compute (un)restricted Damerau-Levenshtein string distances
ASE: defs.hh: add F32EPS and F32MAX
ASE: memory.hh: declare CStringS
ASE: loop: add exec_once()
ASE: cxxaux.hh: add ASE_ASSERT_ALWAYS()
MISC: package.json.in: reduce wait delay for rebuilds
Merge branch 'c++20' # 2023-10-10 Tim Janik 3a7c2d39
* c++20:
MISC: mkAppImage.sh: fix $ORIGIN in AnklangSynthEngine-fma, add jackdriver.so
MISC: Dockerfile.focal: install latest poxy (again)
MISC: Dockerfile.focal: provide libstdc++-10-dev and a recent castxml
MISC: config-uname.mk: optimize with clang -march=x86-64-v3 on modern platforms
Clang chokes on '-march=haswell -mno-hle', so we use '-march=x86-64-v3' which
is close to Haswell, the clang docs say:
-march=x86-64: CMOV, CMPXCHG8B, FPU, FXSR, MMX, FXSR, SCE, SSE, SSE2
-march=x86-64-v2: (close to Nehalem) CMPXCHG16B, LAHF-SAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3
-march=x86-64-v3: (close to Haswell) AVX, AVX2, BMI1, BMI2, F16C, FMA, LZCNT, MOVBE, XSAVE
-march=x86-64-v4: AVX512F, AVX512BW, AVX512CD, AVX512DQ, AVX512VL
MISC: mkassets.sh: adopt compiler config and fix make V=1
* Support make with V=1 during asset builds
* Copy compiler config from config-defaults.mk for mkassets
Makefile.mk: ignore leading spaces in config-defaults.mk
ASE: properties.hh, processor.hh: remove unused (and conflicting) GroupId
ASE: memory.cc: test CString operators
ASE: memory.hh: CString: provide operator== and operator<=> to disambiguate
JSONIPC: cxxjip.py: switch from C++17 to C++20
README.md, *.mk: switch from C++17 to C++20
ASE: memory.hh: always provide ctor for Block initialization
Merge branch 'audio-engine-job-cleanups' # 2023-10-01 Tim Janik 8067acc1
* audio-engine-job-cleanups:
ASE: engine.hh: document engine lifetime
ASE: engine: remove BorrowedPtr, simplify EngineJobImpl
ASE: clapplugin.cc: use main_rt_jobs queue to delete events from audio_thread
ASE: clapplugin.cc: rename ClapAudioProcessor
ASE: project.cc: do not (auto) destroy all projects during atexit
ASE: main.cc: shutdown: unset engine project and handle main loop callbacks
ASE: engine: make transport a reference, move job queues into AudioEngine
ASE: engine: rename AudioEngineThread
Merge branch 'websocket-fix' # 2023-10-01 Tim Janik a5f9ca97
* websocket-fix:
ASE: jsonapi.cc: cache socket nickname for use during errors
ASE: websocket.cc: avoid exceptions in boost::asio socket.remote_endpoint()
ASE: callback.hh: remove (sync) return value handling in JobQueue
ASE: jsonapi.cc: wait for main loop callback completion via semaphore
Merge branch 'main-rt-jobs' # 2023-09-30 Tim Janik a3f8f290
* main-rt-jobs:
ASE: main.cc: fit one RtCallJob into a cache line
This becomes possible with RtCall allocating just 4 pointer sizes.
Since Loft allocates at cache line boundaries only, this essentially
halves the size of an RtCallJob allocation.
ASE: callback: shrink struct RtCall by a pointer
ASE: loft: fix and test LoftPtr<T> actually running ~T
ASE: engine.hh: add comment about main_rt_jobs
ASE: main.cc: turn debugging code into real job_queue_tests
ASE: main: main_rt_jobs: add main_loop callback queue without invoking malloc()
ASE: callback: RtCall: wrap simple callback pointers, without using malloc
ASE: cxxaux.hh: add unalias_ptr<> helper
ASE: callback.cc: add a small callback list test
ASE: callback: add CallbackList - reentrant cb list with configurable arguments
ASE: callback: move JobQueue implementation here
Merge branch 'fix-warnings' # 2023-09-29 Tim Janik 9c1a0624
* fix-warnings:
ASE: track.cc: fix signedness
ASE: utils.cc: cosmetic change
ASE: project.cc: cosmetic change
ASE: nativedevice.cc: fix signedness
ASE: midilib.cc: fix signedness
ASE: midievent.cc: cosmetic change
ASE: internal.hh: cosmetic change
ASE: inifile.cc: fix signedness
ASE: engine.cc: cosmetic change
ASE: compress.cc: fix write check signedness
ASE: combo: fix insert position signedness
ASE: clapplugin.cc: cosmetic change
ASE: device.cc: remove unused code
ASE: blob.cc: cosmetic fix
MISC: Makefile.mk: clang-tidy: fix missing includes
ASE: clapplugin.cc: cosmetic fix
ASE: loop.cc: fix typo
Merge branch 'bug-fixes' # 2023-09-23 Tim Janik e9015b99
* bug-fixes:
GITHUB: workflows/testing.yml: upload dist tarball as isolated smaller artefact
GITHUB: workflows/testing.yml: upgrade to actions/[email protected]
MISC: *.sh: use '#!/usr/bin/env bash' for bash scripts, fixes #17
Merge branch 'use-git-submodule' # 2023-09-21 Tim Janik 22cf3470
* use-git-submodule:
DOC: copyright.ini: apply MPL-2.0 to .gitmodules
MISC: Makefile.mk: directly create and reference .dlcache/ for mkassets.sh
MISC: Makefile.mk: mkassets: download builds tools before misc/mkassets.sh
GITHUB: workflows/testing.yml: use `make mkassets` for release builds
.gitignore: ignore .submodule-stamp
UI: global.scss, index.html: move AnklangIcons to assets/
UI: Makefile.mk: copy anklangicons-*.tgz files to assets, remove download
EXTERNAL: blobs4anklang: add tim-janik/blobs4anklang commit from 2023-09-21 21:04:16
git -C external/blobs4anklang/ checkout 7b0a4a68a1e9efbe68fc9761bef080995f4b4d6b
UI: global.scss, index.html: move fork-awesome to assets/
UI: Makefile.mk: copy node_modules/fork-awesome to assets, remove download
MISC: package.json.in: install [email protected]
UI: Makefile.mk: use blobs4anklang/fonts/InterVariable.woff2, remove download
EXTERNAL: blobs4anklang: add tim-janik/blobs4anklang commit from 2023-09-21 18:23:36
git submodule add --name blobs4anklang https://github.com/tim-janik/blobs4anklang.git external/blobs4anklang
git -C external/blobs4anklang/ checkout 8da35f3914b9668bacc6755a8051a17051b07c3a
Makefile.mk: skip `git submodule` in tarball builds
Makefile.mk: dist: exclude unused external subdirs from tarball
Makefile.mk: include submodule archives in dist tarball
ASE: Makefile.mk: use blake3 submodule, remove download rule
ASE: compress.cc: use external/blake3/c/blake3.h
EXTERNAL: blake3: add BLAKE3-team/BLAKE3 version 1.3.1
git submodule add --name blake3 https://github.com/BLAKE3-team/BLAKE3.git external/blake3
git -C external/blake3/ checkout 1.3.1
ASE: Makefile.mk: use websocketpp submodule, remove download rule
EXTERNAL: websocketpp: add zaphoyd/websocketpp version 0.8.2
git submodule add --name websocketpp https://github.com/zaphoyd/websocketpp.git external/websocketpp
git -C external/websocketpp/ checkout 0.8.2
ASE: Makefile.mk: use clap submodule, remove download rule
EXTERNAL: clap: add free-audio/clap version 1.1.1
git submodule add --name clap https://github.com/free-audio/clap.git external/clap
git -C external/clap/ checkout 1.1.1
ASE: Makefile.mk: use rapidjson submodule, remove download rule
EXTERNAL: rapidjson: add Tencent/rapidjson commit from 2022-05-24 10:03:13
git submodule add --name rapidjson https://github.com/Tencent/rapidjson.git external/rapidjson
git checkout 232389d4f1012dddec4ef84861face2d2ba85709
Makefile.mk: update all submodules before building sources
Makefile.mk: remove external/ subdir from ls-tree.lst
MISC: mkcopyright.py: ignore dirs passed from `git ls-tree` on the CLI
ASE: storage.cc: adjust old link to zlib-ng/minizip-ng/issues/433
ASE: minizip: build against external/minizip-ng/
ASE: Makefile.mk: use minizip-ng submodule, remove download rule
EXTERNAL: minizip-ng: add zlib-ng/minizip-ng version 2.9.0
git submodule add --name minizip-ng https://github.com/zlib-ng/minizip-ng.git external/minizip-ng
.gitignore: remove entries of files the build is not generating
Merge branch 'thin-lto' - improve LTO builds # 2023-09-17 Tim Janik 0e21fc8e
* thin-lto:
ASE: main.cc: add missing formats to WAV output help
MISC: config-uname.mk: when using LTO, enable Thin LTO with clang
Thin LTO can result in smaller binaries and better performance.
Merge branch 'cirun-docker-caching' - let cirun handle image build and caching # 2023-09-17 Tim Janik 00c05372
* cirun-docker-caching:
GITHUB: workflows/testing.yml: use separate steps for docker image builds
GITHUB: workflows/testing.yml: make use of cirun which handles docker builds
* workflows/testing.yml: use misc/cirun -u 1000 to fix ownership
* workflows/testing.yml: fix CIMAKE for Focal-Clang-Tidy
* workflows/testing.yml: move nproc out of env variables
MISC: cirun.sh: remove, use simpler cirun
MISC: gh_delete_assets.sh: remove old helper
MISC: Dockerfile.lunar: remove old file
MISC: docker_*: remove old helpers
MISC: cirun: add docker build, run, chown and caching
MISC: cirun: add script to run commands in dockerized environments
GITHUB: workflows/testing.yml: use buildx with selective caching
GITHUB: workflows/testing.yml: configure and use buildx with selective caching
GITHUB: workflows/testing.yml: remove unused actions/upload-artifact
GITHUB: workflows/testing.yml: split asset builds into separate job
MISC: cirun.sh: add --build, note that --check includes --build
MISC: mkassets.sh: fix outdated globs
Merge branch 'ci-fixes' # 2023-09-10 Tim Janik 9a7e6280
* ci-fixes:
MISC: mkassets.sh: remove unused file generations
MISC: dbuild.sh: delete, now unused
MISC: cirun.sh: add missing arg to help
MISC: publish.sh: remove --draft
MISC: publish.sh: determine version from tarball, show progress
MISC: publish.sh: use assets/ directory contents if present
GITHUB: workflows/testing.yml: use download-artifact@v3 to fetch release assets
GITHUB: workflows/testing.yml: make sure to generate PDF docs early on
GITHUB: workflows/testing.yml: provide GH_TOKEN for gh in publish.sh
GITHUB: workflows/testing.yml: first build docs, then upload docs/ artifact
GITHUB: workflows/testing.yml: fix Release-Upload deps, avoid skipped jobs
GITHUB: workflows/testing.yml: allow skipped jobs in Ping-IRC
GITHUB: workflows/testing.yml: use github expression for negating if
GITHUB: workflows/testing.yml: escape exclamation mark for yaml
GITHUB: workflows/testing.yml: skip Focal-Clang-Tidy for release tags
GITHUB: workflows/testing.yml: uplaod releases via misc/publish.sh
GITHUB: workflows/release.yml: remove, releases moved into testing.yml
MISC: publish.sh: download artifacts and create a release
MISC: cirun.sh: properly dockerize clang-tidy
MISC: cirun.sh: support V=1
GITHUB: workflows/testing.yml: run clang-tidy on focal
MISC: cirun.sh: use 1000:1000 to chown files for docker containers
MISC: mkassets.sh: add missing auto to cp --reflink=auto
GITHUB: workflows/testing.yml: fix env syntax for gha
GITHUB: workflows/testing.yml: use cirun.sh for all CI jobs
GITHUB: workflows/testing.yml: use cirun.sh on Focal for docs
MISC: cirun.sh: support $CITAG to determine docker run image
MISC: Dockerfile.lunar: install missing clang aliases
MISC: cirun.sh: add script that runs all CI stages via docker
MISC: Dockerfile.focal: install poxy==0.13.0
Versions poxy>=0.13.1 have problems with python-3.8 on focal.
MISC: Dockerfile.focal: install pandoc-3.1.6.2
Using pandoc-3.1.7 seems to have issues with PDF generation, anchors
in section titles cause an error and SVG images are not found.
.gitignore: minor addition
MISC: Dockerfile.focal: add clang-17 aliases
MISC: Dockerfile.focal: provide xetex, poxy and clang++-17
GITHUB: workflows/release.yml: upload draft releases for CI tests
GITHUB: workflows/release.yml: cache focal docker builds with buildx
GITHUB: workflows/testing.yml: fix comment
GITHUB: workflows/testing.yml: cache arch docker builds with buildx
GITHUB: workflows/testing.yml: cache lunar and jammy docker builds with buildx
Merge branch 'release-fixes' # 2023-09-08 Tim Janik d8465fd8
* release-fixes:
MISC: mknews.sh: print latest NEWS.md version with `misc/mknews.sh --version`
GITHUB: workflows/release.yml: set prerelease:false for annotated tags
Fix actions/checkout@v3 and actions/checkout@v4 messing up the annotation of
the currently fetched tag, even with fetch-depth:0, see: actions/checkout#290
MISC: mknews.sh: for release tags, copy news section from NEWS.md