Merge commit release-18
This commit is contained in:
commit
53cf596b6b
31
CHANGELOG.md
31
CHANGELOG.md
|
@ -1,11 +1,39 @@
|
|||
Change Log
|
||||
==========
|
||||
|
||||
## Version 18 (2023-11-10)
|
||||
|
||||
Fixed:
|
||||
|
||||
* Compilation with Cython >= 3 has been fixed (#176).
|
||||
* Output channel name changes are properkly reflected in input channel control
|
||||
groups (#177).
|
||||
* Prefader kmeters now also fall at same rate regardless of jack buffer size.
|
||||
* The Spanish translations was updated (#168).
|
||||
|
||||
Changes:
|
||||
|
||||
* `PyDG` has been replaced with `appdirs` (#150).
|
||||
* `mesonep517` has been replaced with `meson-python` for PEP-517 compliant
|
||||
builds (for testing needs only) (#179).
|
||||
* All log messages are now prefixed with `[jack_mixer]` so they can be better
|
||||
recognized / filtered in the NSM session logs (#162).
|
||||
* The included `nsmclient` module was updated (#164).
|
||||
|
||||
Features:
|
||||
|
||||
* NSM implemntation now includes support for dirty/clean save status (#154).
|
||||
|
||||
With contributions from Christopher Arndt, Daryl Hanlon, Nils Hilbricht, Mark
|
||||
Knoop and Daniel Sheeler.
|
||||
|
||||
|
||||
## Version 17 (2021-10-15)
|
||||
|
||||
Fixed:
|
||||
|
||||
* Uniform fall rate for kmeter peak indicators across different jack
|
||||
period sizes was enforced (#133).
|
||||
buffer sizes was enforced (#133).
|
||||
|
||||
Features:
|
||||
|
||||
|
@ -26,6 +54,7 @@ Features:
|
|||
With contributions from Daniel Sheeler and Christopher Arndt and with
|
||||
Daryl Hanlon providing the Spanish translation.
|
||||
|
||||
|
||||
## Version 16 (2021-04-15)
|
||||
|
||||
Fixed:
|
||||
|
|
36
INSTALL.md
36
INSTALL.md
|
@ -1,16 +1,16 @@
|
|||
Installation
|
||||
============
|
||||
|
||||
**jack_mixer** uses [meson] and optionally a Python [PEP-517]-compliant build
|
||||
system for building, installation and packaging.
|
||||
**jack_mixer** uses the [meson] build system for building, installation and
|
||||
packaging.
|
||||
|
||||
|
||||
## Requirements
|
||||
|
||||
Build requirements:
|
||||
|
||||
* GCC (version 9.x or 10.x recommended)
|
||||
* meson >= 0.54.0[<sup>1</sup>](#1)
|
||||
* GCC (version >= 9.x recommended)
|
||||
* meson >= 0.64.0
|
||||
* [ninja]
|
||||
* Python headers
|
||||
* [JACK] headers
|
||||
|
@ -21,7 +21,7 @@ Build requirements:
|
|||
|
||||
Runtime requirements:
|
||||
|
||||
* Python >= 3.6
|
||||
* Python >= 3.8
|
||||
* [Pygobject]
|
||||
* [pycairo]
|
||||
* JACK library and server
|
||||
|
@ -35,11 +35,6 @@ The run-time Python dependencies are checked by meson when setting up the
|
|||
build directory. To disable this, use the `-Dcheck-py-modules=false` option to
|
||||
`meson setup.`
|
||||
|
||||
<a class="anchor" id="1"></a>
|
||||
|
||||
<sup>1</sup> *meson 0.53.0 also works if you use `ninja compile` and
|
||||
`ninja install` instead of `meson compile` and `meson install`.*
|
||||
|
||||
|
||||
## Building
|
||||
|
||||
|
@ -99,32 +94,39 @@ meson configure builddir -Dgui=disabled
|
|||
```
|
||||
|
||||
|
||||
## Building a Python wheel (for maintainers)
|
||||
## Building a Python wheel (only for special needs)
|
||||
|
||||
1. Make sure you have Python 3, `git` and [pip] installed and your internet
|
||||
connection is online.
|
||||
**Note:** Due to limitations of Python's build ecosystem, the wheel packages
|
||||
built with the instructions given here, will *not* contain any files used
|
||||
for system desktop integration, e.g. icons and `.desktop' files, nor man pages
|
||||
or translation files. Using this method to install jack_mixer is thus not
|
||||
recommended and mainly provided for testing prurposes.
|
||||
|
||||
1. Make sure you have Python 3, `git`, [pip] and the Python [build] package
|
||||
installed and your internet connection is online.
|
||||
2. Run the following command to build a binary wheel:
|
||||
|
||||
```console
|
||||
pip wheel .
|
||||
python -m build -w
|
||||
```
|
||||
|
||||
This will automatically download the required build tools, e.g. Cython, meson,
|
||||
ninja, the Python `wheel` package etc. (see the [pyproject.toml] file for
|
||||
details), build the software with meson and then package it into a wheel, which
|
||||
will be placed in the project's root directory.
|
||||
will be placed in the `dist` directory below the project's root directory.
|
||||
|
||||
The wheel can be installed with `pip install jack_mixer-*.whl`.
|
||||
The wheel can be installed with `python -m pip install dist/jack_mixer-*.whl`.
|
||||
|
||||
|
||||
[docutils]: https://pypi.org/project/docutils/
|
||||
[build]: https://pypi.org/project/build
|
||||
[Cython]: https://cython.org/
|
||||
[JACK]: https://jackaudio.org/
|
||||
[meson]: https://mesonbuild.com/
|
||||
[ninja]: https://ninja-build.org/
|
||||
[NSM]: https://new-session-manager.jackaudio.org/
|
||||
[options]: https://mesonbuild.com/Build-options.html
|
||||
[pip]: https://pypi.org/project/pip/
|
||||
[pip]: https://pypi.org/project/pip
|
||||
[pycairo]: https://pypi.org/project/pycairo/
|
||||
[PyGObject]: https://pypi.org/project/PyGObject/
|
||||
[appdirs]: https://pypi.org/project/appdirs/
|
||||
|
|
|
@ -17,7 +17,7 @@ information.
|
|||
To build and install jack_mixer run:
|
||||
|
||||
```console
|
||||
meson builddir --prefix=/usr --buildtype=release
|
||||
meson setup builddir --prefix=/usr --buildtype=release
|
||||
meson compile -C builddir
|
||||
[sudo] meson install -C builddir
|
||||
```
|
||||
|
|
|
@ -9,7 +9,7 @@ msgstr ""
|
|||
"Project-Id-Version: jack_mixer 16\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/jack-mixer/jack_mixer/issues\n"
|
||||
"POT-Creation-Date: 2021-10-14 12:58+0200\n"
|
||||
"PO-Revision-Date: 2021-10-14 14:08+0200\n"
|
||||
"PO-Revision-Date: 2023-01-19 11:30+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: es\n"
|
||||
|
@ -17,7 +17,7 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Poedit 2.3\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
|
||||
#: jack_mixer/app.py:48
|
||||
msgid ""
|
||||
|
@ -441,6 +441,8 @@ msgstr "Preferencias"
|
|||
msgid ""
|
||||
"Set the path where mixer project files are saved and loaded from by default"
|
||||
msgstr ""
|
||||
"Establecer la ruta donde se guardan los archivos de proyecto del mezclador y "
|
||||
"se cargan por defecto"
|
||||
|
||||
#: jack_mixer/preferences.py:59 jack_mixer/preferences.py:71
|
||||
msgid "Default Project Path"
|
||||
|
@ -448,7 +450,7 @@ msgstr "Ruta Predeterminada de Proyecto"
|
|||
|
||||
#: jack_mixer/preferences.py:76
|
||||
msgid "Set the interface language and localisation"
|
||||
msgstr ""
|
||||
msgstr "Establecer la lengua y localización de la interfaz"
|
||||
|
||||
#: jack_mixer/preferences.py:80
|
||||
msgid "Language:"
|
||||
|
@ -469,10 +471,11 @@ msgstr "Utilizar widgets personalizados"
|
|||
#: jack_mixer/preferences.py:93
|
||||
msgid "Use widgets with custom design for the channel sliders"
|
||||
msgstr ""
|
||||
"Utilizar widgets con diseño personalizado para los potenciómetros de canal"
|
||||
|
||||
#: jack_mixer/preferences.py:99
|
||||
msgid "Draw the volume meters with the selected solid color"
|
||||
msgstr ""
|
||||
msgstr "Trazar los medidores de volumen con el color sólido seleccionado"
|
||||
|
||||
#: jack_mixer/preferences.py:100
|
||||
msgid "Use custom vumeter color"
|
||||
|
@ -498,6 +501,8 @@ msgstr "Tiempo (s):"
|
|||
msgid ""
|
||||
"Update the volume level meters with the specified interval in milliseconds"
|
||||
msgstr ""
|
||||
"Actualizar los medidores de nivel de volumen con el intervalo especificado "
|
||||
"en milisegundos"
|
||||
|
||||
#: jack_mixer/preferences.py:152
|
||||
msgid "Meter Refresh Period (ms):"
|
||||
|
@ -509,7 +514,7 @@ msgstr "Interfaz"
|
|||
|
||||
#: jack_mixer/preferences.py:164
|
||||
msgid "Set the scale for all volume meters"
|
||||
msgstr ""
|
||||
msgstr "Establece la escala para todos los medidores de volumen"
|
||||
|
||||
#: jack_mixer/preferences.py:165
|
||||
msgid "Meter scale:"
|
||||
|
@ -517,7 +522,7 @@ msgstr "Escala medidor:"
|
|||
|
||||
#: jack_mixer/preferences.py:172
|
||||
msgid "Set the scale for all volume sliders"
|
||||
msgstr ""
|
||||
msgstr "Establece la escala para todos los potenciómetros de volumen"
|
||||
|
||||
#: jack_mixer/preferences.py:173
|
||||
msgid "Slider scale:"
|
||||
|
@ -536,6 +541,12 @@ msgid ""
|
|||
"- Pick Up: control changes are ignored until a controller value near the "
|
||||
"current value is received\n"
|
||||
msgstr ""
|
||||
"Establece cómo se controlan volumen y balance a través de MIDI:\n"
|
||||
"\n"
|
||||
"- Saltar al Valor: el volumen o balance del canal salta inmediatamente al "
|
||||
"valor recibido del controlador\n"
|
||||
"- Recoger: los cambios del controlador son ignorados hasta que se recibe un "
|
||||
"valor del controlador cerca del valor actual\n"
|
||||
|
||||
#: jack_mixer/preferences.py:191
|
||||
msgid "Control Behavior:"
|
||||
|
|
|
@ -1,37 +1,39 @@
|
|||
# Menu .desktop file
|
||||
desktop_file = 'jack_mixer.desktop'
|
||||
install_data(
|
||||
desktop_file,
|
||||
install_dir: desktopdir
|
||||
)
|
||||
|
||||
# RaySession template
|
||||
|
||||
raysession_template = 'client_templates.xml'
|
||||
install_data(
|
||||
raysession_template,
|
||||
install_dir: raysessiondir)
|
||||
|
||||
# Application icons
|
||||
sizes = [
|
||||
'16x16',
|
||||
'22x22',
|
||||
'24x24',
|
||||
'32x32',
|
||||
'48x48',
|
||||
]
|
||||
|
||||
foreach size : sizes
|
||||
if not get_option('wheel')
|
||||
# Menu .desktop file
|
||||
desktop_file = 'jack_mixer.desktop'
|
||||
install_data(
|
||||
join_paths('art', size, 'jack_mixer.png'),
|
||||
install_dir: join_paths(icondir, size, 'apps')
|
||||
desktop_file,
|
||||
install_dir: desktopdir
|
||||
)
|
||||
endforeach
|
||||
|
||||
install_data(
|
||||
join_paths('art', 'scalable', 'jack_mixer.svg'),
|
||||
install_dir: join_paths(icondir, 'scalable', 'apps')
|
||||
)
|
||||
# RaySession template
|
||||
|
||||
# Translations
|
||||
subdir('locale')
|
||||
raysession_template = 'client_templates.xml'
|
||||
install_data(
|
||||
raysession_template,
|
||||
install_dir: raysessiondir)
|
||||
|
||||
# Application icons
|
||||
sizes = [
|
||||
'16x16',
|
||||
'22x22',
|
||||
'24x24',
|
||||
'32x32',
|
||||
'48x48',
|
||||
]
|
||||
|
||||
foreach size : sizes
|
||||
install_data(
|
||||
join_paths('art', size, 'jack_mixer.png'),
|
||||
install_dir: join_paths(icondir, size, 'apps')
|
||||
)
|
||||
endforeach
|
||||
|
||||
install_data(
|
||||
join_paths('art', 'scalable', 'jack_mixer.svg'),
|
||||
install_dir: join_paths(icondir, 'scalable', 'apps')
|
||||
)
|
||||
|
||||
# Translations
|
||||
subdir('locale')
|
||||
endif
|
||||
|
|
|
@ -1,37 +1,11 @@
|
|||
if get_option('gui').enabled()
|
||||
if not get_option('wheel')
|
||||
fs = import('fs')
|
||||
|
||||
jack_mixer_man = 'jack_mixer.1'
|
||||
jack_mix_box_man = 'jack_mix_box.1'
|
||||
jack_mixer_man = 'jack_mixer.1'
|
||||
|
||||
rst2man = find_program('rst2man', 'rst2man.py', required: false)
|
||||
|
||||
if fs.exists(jack_mixer_man)
|
||||
install_man(jack_mixer_man)
|
||||
elif rst2man.found()
|
||||
jack_mixer_man_rst_in = 'jack_mixer.1.rst.in'
|
||||
|
||||
jack_mixer_man_rst = configure_file(
|
||||
input: jack_mixer_man_rst_in,
|
||||
output: 'jack_mixer.1.rst',
|
||||
configuration: {
|
||||
'VERSION': meson.project_version()
|
||||
}
|
||||
)
|
||||
|
||||
jack_mixer_troff = custom_target(
|
||||
'jack_mixer_rst2man',
|
||||
output: jack_mixer_man,
|
||||
input: jack_mixer_man_rst,
|
||||
command: [rst2man, '@INPUT@', '@OUTPUT@'],
|
||||
install: true,
|
||||
install_dir: join_paths(get_option('mandir'), 'man1')
|
||||
)
|
||||
else
|
||||
error('Pre-generated file \'@0@\' and \'rst2man\' not found.\n'.format(jack_mixer_man) +
|
||||
'Please install \'docutils\' from https://pypi.org/project/docutils.')
|
||||
endif
|
||||
|
||||
if fs.exists(jack_mix_box_man)
|
||||
install_man(jack_mix_box_man)
|
||||
elif rst2man.found()
|
||||
|
@ -53,6 +27,37 @@ if get_option('gui').enabled()
|
|||
install: true,
|
||||
install_dir: join_paths(get_option('mandir'), 'man1')
|
||||
)
|
||||
else
|
||||
error('Pre-generated file \'@0@\' and \'rst2man\' not found.\n'.format(jack_mix_box_man) +
|
||||
'Please install \'docutils\' from https://pypi.org/project/docutils.')
|
||||
endif
|
||||
|
||||
if get_option('gui').enabled()
|
||||
if fs.exists(jack_mixer_man)
|
||||
install_man(jack_mixer_man)
|
||||
elif rst2man.found()
|
||||
jack_mixer_man_rst_in = 'jack_mixer.1.rst.in'
|
||||
|
||||
jack_mixer_man_rst = configure_file(
|
||||
input: jack_mixer_man_rst_in,
|
||||
output: 'jack_mixer.1.rst',
|
||||
configuration: {
|
||||
'VERSION': meson.project_version()
|
||||
}
|
||||
)
|
||||
|
||||
jack_mixer_troff = custom_target(
|
||||
'jack_mixer_rst2man',
|
||||
output: jack_mixer_man,
|
||||
input: jack_mixer_man_rst,
|
||||
command: [rst2man, '@INPUT@', '@OUTPUT@'],
|
||||
install: true,
|
||||
install_dir: join_paths(get_option('mandir'), 'man1')
|
||||
)
|
||||
else
|
||||
error('Pre-generated file \'@0@\' and \'rst2man\' not found.\n'.format(jack_mix_box_man) +
|
||||
'Please install \'docutils\' from https://pypi.org/project/docutils.')
|
||||
endif
|
||||
endif
|
||||
|
||||
meson.add_dist_script('meson_dist_rst2man.py', jack_mixer_man, jack_mix_box_man)
|
||||
|
|
|
@ -1318,10 +1318,14 @@ class OutputChannelPropertiesDialog(ChannelPropertiesDialog):
|
|||
if response_id == Gtk.ResponseType.APPLY:
|
||||
self.channel.display_solo_buttons = self.display_solo_buttons.get_active()
|
||||
self.channel.set_color(self.color_chooser_button.get_rgba())
|
||||
|
||||
super().on_response_cb(dlg, response_id, *args)
|
||||
|
||||
if response_id == Gtk.ResponseType.APPLY:
|
||||
for inputchannel in self.app.channels:
|
||||
inputchannel.update_control_group(self.channel)
|
||||
|
||||
return super().on_response_cb(dlg, response_id, *args)
|
||||
return True
|
||||
|
||||
|
||||
class NewOutputChannelDialog(NewChannelDialog, OutputChannelPropertiesDialog):
|
||||
|
|
|
@ -60,7 +60,6 @@ python_sources = files([
|
|||
python.install_sources(
|
||||
python_sources,
|
||||
version_py,
|
||||
pure: true,
|
||||
subdir: 'jack_mixer',
|
||||
)
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
project(
|
||||
'jack_mixer',
|
||||
'c',
|
||||
version: '17',
|
||||
version: '18',
|
||||
license: 'GPL2+',
|
||||
default_options: [
|
||||
'warning_level=2'
|
||||
],
|
||||
meson_version: '>=0.53.0'
|
||||
meson_version: '>=0.64.0'
|
||||
)
|
||||
|
||||
# Dependencies
|
||||
|
@ -33,6 +33,7 @@ if get_option('gui').enabled()
|
|||
python = pymod.find_installation(
|
||||
'python3',
|
||||
required: true,
|
||||
pure: false,
|
||||
modules: get_option('check-py-modules') ? ['gi', 'cairo', 'appdirs'] : []
|
||||
)
|
||||
endif
|
||||
|
|
|
@ -16,4 +16,4 @@ if 'DESTDIR' not in environ:
|
|||
|
||||
print('Compiling Python module to bytecode...')
|
||||
moduledir = sysconfig.get_path('purelib', vars={'base': destdir})
|
||||
compile_dir(path.join(moduledir, 'jack_mixer'), optimize=1)
|
||||
compile_dir(path.join(moduledir, 'jack_mixer'), optimize=1, stripdir=destdir)
|
||||
|
|
|
@ -1,41 +1,25 @@
|
|||
[build-system]
|
||||
# https://thiblahute.gitlab.io/mesonpep517/
|
||||
build-backend = "mesonpep517.buildapi"
|
||||
build-backend = "mesonpy"
|
||||
requires = [
|
||||
"cython",
|
||||
"docutils",
|
||||
"wheel",
|
||||
"mesonpep517>=0.2",
|
||||
"ninja"
|
||||
"meson-python",
|
||||
"ninja",
|
||||
"docutils",
|
||||
]
|
||||
|
||||
|
||||
[tool.mesonpep517.entry-points]
|
||||
console_scripts = [
|
||||
"jack_mixer = jack_mixer.app:main"
|
||||
[project]
|
||||
name = "jack_mixer"
|
||||
dynamic = ['version']
|
||||
description = "A GTK+ JACK audio mixer application"
|
||||
readme = "README.md"
|
||||
authors = [
|
||||
{ name="Nedko Arnaudov", email="nedko (a.t) arnaudov (dot) name" },
|
||||
]
|
||||
|
||||
|
||||
[tool.mesonpep517.metadata]
|
||||
summary = "A GTK+ JACK audio mixer application"
|
||||
description-file = "README.md"
|
||||
# 'keywords' metadata field not supported by mesonpep517 (yet)
|
||||
#keywords = "mixer,audio,music,jack,gtk"
|
||||
license = "GPL2+"
|
||||
author = "Nedko Arnaudov"
|
||||
author-email = "nedko (a.t) arnaudov (dot) name"
|
||||
maintainer = "Christopher Arndt"
|
||||
maintainer-email = "info (a.t.) chrisarndt.de"
|
||||
home-page = "https://rdio.space/jackmixer/"
|
||||
project-urls = [
|
||||
"Source, https://github.com/jack-mixer/jack-mixer",
|
||||
maintainers = [
|
||||
{ name="Christopher Arndt", email="info (a.t.) chrisarndt.de" },
|
||||
]
|
||||
requires= [
|
||||
"PyGObject",
|
||||
"pycairo",
|
||||
"appdirs",
|
||||
]
|
||||
requires-python = ">=3.6"
|
||||
classifiers = [
|
||||
"Development Status :: 5 - Production/Stable",
|
||||
"Environment :: Console",
|
||||
|
@ -47,29 +31,66 @@ classifiers = [
|
|||
"Operating System :: MacOS :: MacOS X",
|
||||
"Programming Language :: Python",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.6",
|
||||
"Programming Language :: Python :: 3.7",
|
||||
"Programming Language :: Python :: 3.8",
|
||||
"Programming Language :: Python :: 3.9",
|
||||
"Programming Language :: Python :: 3.10",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Topic :: Multimedia :: Sound/Audio :: Mixers",
|
||||
]
|
||||
meson-python-option-name = "python3"
|
||||
meson-options = [
|
||||
keywords = [
|
||||
"mixer",
|
||||
"audio",
|
||||
"music",
|
||||
"jack",
|
||||
"gtk",
|
||||
]
|
||||
requires-python = ">=3.8"
|
||||
dependencies = [
|
||||
"PyGObject",
|
||||
"pycairo",
|
||||
"appdirs",
|
||||
]
|
||||
|
||||
[project.license]
|
||||
file = "COPYING"
|
||||
|
||||
|
||||
[project.urls]
|
||||
"Homepage" = "https://rdio.space/jackmixer/"
|
||||
"Source" = "https://github.com/jack-mixer/jack-mixer"
|
||||
"Bug Tracker" = "https://github.com/jack-mixer/jack-mixer/issues"
|
||||
|
||||
|
||||
[project.scripts]
|
||||
"jack_mixer" = "jack_mixer.app:main"
|
||||
|
||||
|
||||
[tool.meson-python.args]
|
||||
setup = [
|
||||
"-Dwheel=true",
|
||||
"--buildtype=release"
|
||||
"-Dbuildtype=release",
|
||||
"-Dcheck-py-modules=false",
|
||||
]
|
||||
|
||||
|
||||
[tool.isort]
|
||||
line_length = 99
|
||||
profile = "black"
|
||||
ensure_newline_before_comments = true
|
||||
force_grid_wrap = 0
|
||||
include_trailing_comma = true
|
||||
line_length = 99
|
||||
multi_line_output = 3
|
||||
use_parentheses = true
|
||||
|
||||
|
||||
[tool.black]
|
||||
line-length = 99
|
||||
target-version = ['py36', 'py37', 'py38']
|
||||
target-version = [
|
||||
"py38",
|
||||
"py39",
|
||||
"py310",
|
||||
"py311",
|
||||
"py312",
|
||||
]
|
||||
force-exclude = 'jack_mixer/nsmclient\.py'
|
||||
|
|
|
@ -25,7 +25,7 @@ cdef extern from "jack_mixer.h":
|
|||
ctypedef void * jack_mixer_output_channel_t
|
||||
ctypedef void * jack_mixer_threshold_t
|
||||
|
||||
ctypedef void (*midi_change_callback)(void *)
|
||||
ctypedef void (*midi_change_callback)(void *) noexcept with gil
|
||||
|
||||
cdef enum midi_behavior_mode:
|
||||
pass
|
||||
|
|
|
@ -10,7 +10,7 @@ import enum
|
|||
from _jack_mixer cimport *
|
||||
|
||||
|
||||
cdef void midi_change_callback_func(void *userdata) with gil:
|
||||
cdef void midi_change_callback_func(void *userdata) noexcept with gil:
|
||||
"""Wrapper for a Python callback function for MIDI input."""
|
||||
channel = <object> userdata
|
||||
channel._midi_change_callback()
|
||||
|
|
|
@ -35,7 +35,7 @@ if get_option('gui').enabled()
|
|||
jack_mixer_mod_pyx = '_jack_mixer.pyx'
|
||||
jack_mixer_mod_c = '_jack_mixer.c'
|
||||
|
||||
cython = find_program('cython3', 'cython', required: false)
|
||||
cython = find_program('cython3', 'cython', 'cython0', required: false)
|
||||
|
||||
if fs.exists(jack_mixer_mod_c)
|
||||
jack_mixer_cython = files(jack_mixer_mod_c)
|
||||
|
|
Loading…
Reference in New Issue