Ok, let me just briefly my thoughts here, without providing any implementation.
> on mac and windows
In the very long run yes. At the moment I think its ok to concentrate on making
the linux version better first. We need not support the Gtk UI under
Windows/Mac (see below).
> vst 1 2 and 3
The green led that indicates that the project is active/playing no longer does
this. It is always dark now. This is especially annoying for projects that
don't output any audio right away ("Stereo Through"), as you don't get any
indication that the project is running.
It used to work in
An updated pull request is available: https://github.com/tim-janik/beast/pull/30
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
2 more properties ported to C++
You can view, comment on, or merge this pull request online at:
https://github.com/tim-janik/beast/pull/68
-- Commit Summary --
* BSE: Song::loop_right: port property to C++
* BEAST-GTK: use C++ property Song::loop_right
* BSE: Song::tick_pointer: port
>From our last BseSong merge:
> There's one other thing I noticed during review. With the old GParamSpec +
> GObject based property API, the GObject machinery ensures that the GValue
> passed in to property setters complies with the GParamSpec value range. With
> our IDL API, nothing like that
Right. If I understand this correctly, then you want this mainly for drum
patterns. Currently we allow using the piano roll to sequence a drum patteren,
for instance consisting of BD, SD and HH hits. What we currently do is downmix
everything before the mixer, so the mixer only sees the mixed
Ok, I rebased the branch (more like: manually fixed/recommitted what we need).
As you say, it is possible to trigger an undo problem like this:
> With your PR applied, the following sequence of actions triggers a warning
> for me:
> start beast -> Project/New-Song -> Add-Track ->
Ok, the error message doesn't help much here, because it is about midi not
audio. If you'r running kxstudio (I do that too), are you also using
- jack
- pulseaudio
- pulseaudio bridged to jack (for instance using cadence)
On my system, I use
```
beast -p alsa=pulse
```
to force beast output to
@swesterfeld pushed 1 commit.
4084bb6 BSE: fix C++ property loading (float64)
--
You are receiving this because you are subscribed to this thread.
View it on GitHub:
We discussed that beast should be able to download pre-converted drumkits at
some point. Here is an example tarball, containing two drumkits (the ones that
ship with hydrogen itself).
The download URL is:
http://space.twc.de/~stefan/download/beast-drumkits-pack.tar.xz
The tarball contains:
-
I rebased this branch, you should be able to merge this now without problems.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
I rebased this branch, you should be able to merge this now without problems.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
@swesterfeld pushed 1 commit.
36e9df0 BSE: bsebus: avoid chained assignment
--
You are receiving this because you are subscribed to this thread.
View it on GitHub:
Here is my proposal for fixing this: https://github.com/tim-janik/beast/pull/85
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
Ok, I'll try to give a more detailed account of the events that lead to the
bug. For the sake of this discussion, we only need to do three things:
* create song
* create bus - this will be called **Bus-1**
* delete this bus - no undo step will be recorded (which causes problems later)
Why?
1.
Since you made this a new branch, I'll just add information here instead of
committing to my branch.
> The howto should mention that users also need to install pavucontrol, jackd2
> and for building libjack-jackd2-dev.
Yes. Either this or the corresponding jack1 packages: jackd1 libjack-dev
Fix undo for Song::numerator (and others), which causes a crash (fatal error)
after clang related updates.
You can view, comment on, or merge this pull request online at:
https://github.com/tim-janik/beast/pull/77
-- Commit Summary --
* BSE: bseitem: fix undo resolve crash
-- File Changes
I managed to port all Bus properties that have a simple type (non-object,
non-sequence) to C++. There are two things worth mentioning here.
(1) in bseapi.idl, we have to use non-computed constants, so there is no
elegant way of expressing that the maximum is +24dB - however I think we can
live
To fix the problem, ensure that an appropriate undo step is always recorded.
This is a fix for issue https://github.com/tim-janik/beast/issues/79
You can view, comment on, or merge this pull request online at:
https://github.com/tim-janik/beast/pull/82
-- Commit Summary --
* BSE: fix undo
Ok, so let me comment on anything that doesn't have to do with the new
volume_db/pan properties first.
> Thanks Stefan, great to see steady progress here.
>
> But note that travis-ci shows, that your changes broke the syndrum audio test
> in all build variants, please take a look at that.
Signed-off-by: Stefan Westerfeld
You can view, comment on, or merge this pull request online at:
https://github.com/tim-janik/beast/pull/81
-- Commit Summary --
* BSE: adapt midi import code to use the new Song C++ properties
-- File Changes --
M bse/bsemidifile.cc (8)
-- Patch
One thing you can try is starting
```
beast --bse-driver-list
```
if I remember correctly, beast will by default use the first alsa duplex device
on the list.
Another thing that could give you more information is starting BEAST like this:
```
BSE_DEBUG=pcm-alsa beast
```
which will show error
@swesterfeld pushed 1 commit.
5f86778 BSE: bsebus: add a few extra checks to volume/pan conversions
--
You are receiving this because you are subscribed to this thread.
View it on GitHub:
@swesterfeld pushed 1 commit.
1fab351 BSE: Song: port remaining Bus::master-output set calls
--
You are receiving this because you are subscribed to this thread.
View it on GitHub:
@swesterfeld pushed 4 commits.
752ee2a BSE: implement Bus::volume_db and Bus::pan properties
ea333df BSE: remove Bus::sync property, no longer required due to panning
support
39a9064 BEAST-GTK: bstbuseditor: edit volume_db/pan instead of left/right
volume
94028c4 RES: add space for editing
Btw, one observation from my system: the second device in his log was "pulse",
and failed to open in duplex mode. This I can reproduce here with beast -p
alsa=pulse. I was curious and added a few printf statements to the driver, and
it seems that input/output cannot be linked, and snd_pcm_link
If you are using PulseAudio, everything should work if you start BEAST with
`beast -p alsa=pulse`
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
This updates the fluidsynth code to fluidsynth >= 2.0.0. This is not backward
compatible, BEAST will not build against fluidsynth 1 any longer. The soundfont
audio test reference file had to be updated due to a bugfix in fluidsynth 1
related to voice panning.
You can view, comment on, or merge
Building against fluidsynth 2 is fixed now
https://github.com/tim-janik/beast/commit/4c65148cf152572cd0e7a8e012cd71f4216cda6b
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
I've ported the code to fluidsynth >= 2.0.0 and submitted the required changes
here: https://github.com/tim-janik/beast/pull/101
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
swesterfeld commented on this pull request.
> @@ -89,8 +89,24 @@ bus_build_param (BstBusEditor *self,
const gchar *editor,
const gchar *label)
{
- GParamSpec *pspec = bse_proxy_get_pspec (self->item, property);
- self->params = sfi_ring_prepend
swesterfeld commented on this pull request.
> + if (BSE_IS_SONG (parent))
+{
+ BseSong *song = BSE_SONG (parent);
+ return song->solo_bus == self;
+}
+ return false;
+}
+
+void
+BusImpl::solo (bool is_solo)
+{
+ BseBus *self = as();
+
+ if (solo() != is_solo)
+{
+
swesterfeld commented on this pull request.
>if (BSE_IS_SONG (parent))
{
BseSong *song = BSE_SONG (parent);
BseBus *master = bse_song_find_master (song);
- return (self == master);
+ return self == master;
Thanks for the hint, I normally don't need this while
swesterfeld commented on this pull request.
> @@ -681,7 +683,7 @@ SongImpl::remove_bus (BusIface _iface)
BseItem *child = bus.as();
BseUndoStack *ustack = bse_item_undo_open (self, __func__);
// reset ::master-output property undoable
Fixed.
--
You are receiving this because you are
swesterfeld commented on this pull request.
>Bse::BusImpl *bus = child->as();
+ bus->block_property_undo();
Ok, I removed the block/unblock stuff now.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
> Please fix review comments I left for you and remove:
> a) the commit introducing the block/unblock API,
Done with all code that depends on it.
> b) the float64 workaround.
Done.
> If that means you updated PR is broken, point out the bugs you're runing into
> and I'll give you a hand with
swesterfeld commented on this pull request.
> @@ -1335,4 +1337,16 @@ ItemImpl::apply_idl_property_need_undo (const
> StringVector )
return !Aida::aux_vector_check_options (kvlist, "", "hints", "skip-undo");
}
+void
+ItemImpl::block_property_undo()
+{
Ok, I just tried to do a 1:1 port so
swesterfeld commented on this pull request.
> @@ -89,8 +89,24 @@ bus_build_param (BstBusEditor *self,
const gchar *editor,
const gchar *label)
{
- GParamSpec *pspec = bse_proxy_get_pspec (self->item, property);
- self->params = sfi_ring_prepend
swesterfeld commented on this pull request.
> @@ -1003,6 +993,25 @@ BusImpl::BusImpl (BseObject *bobj) :
BusImpl::~BusImpl ()
{}
+bool
+BusImpl::mute() const
+{
+ BseBus *self = const_cast (this)->as();
+
+ return self->muted;
+}
+
+void
+BusImpl::mute (bool val)
+{
+ BseBus *self =
swesterfeld commented on this pull request.
> @@ -89,8 +89,24 @@ bus_build_param (BstBusEditor *self,
const gchar *editor,
const gchar *label)
{
- GParamSpec *pspec = bse_proxy_get_pspec (self->item, property);
- self->params = sfi_ring_prepend
Right. I won't reopen the issue though, as this is a feature request. If you
want to file feature requests, use my issue tracker. Use this tracker for bugs
only.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
swesterfeld commented on this pull request.
> @@ -387,10 +277,6 @@ SoundFontRepoImpl::~SoundFontRepoImpl ()
delete_fluid_settings (fluid_settings);
fluid_settings = NULL;
`delete_fluid_settings` is part of the fluid synth api, so I cannot change what
it does
--
You are
@swesterfeld pushed 1 commit.
9a557418278511ffb21898f1c67fce33b274e0e2 BSE: SF2: avoid global using
std::string
--
You are receiving this because you are subscribed to this thread.
View it on GitHub:
swesterfeld commented on this pull request.
> @@ -12,6 +12,8 @@
#define parse_or_return bse_storage_scanner_parse_or_return
+using std::string;
Right, I've fixed this now by using std::string - I also tried using
Bse::String - this doesn't have any advantage here, as all code is
> The reason the GUI blocks instrument changes is that the BSE core hasn't had
> support for this yet. If soundfonts can implement changes during runtime, the
> associated, we'll of course release that restriction and make it user
> accessible. I guess that's better left for another PR, right?
Closed #85.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/tim-janik/beast/pull/85#event-2308859385___
beast mailing list
beast@gnome.org
As requested, I've updated this branch so that it doesn't require fluidsynth >=
2.0.5.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
Hi!
On Sun, Apr 07, 2019 at 02:45:23AM +0200, Tim Janik wrote:
> as requested, I've prototyped a basic macro that helps with property setting
> by:
>
> * constraining the property value (for int, float, enum)
> * testing for value changes
> * pushes undo (untested)
> * emitting notification
> So, to summarize our last meeting:
>
> * The bus properties should be ported as straight forward as possible,
> without adding new functionality / UI.
> * The APPLY_IDL_PROPERTY() macro should be used.
>
> Once you've done this, please re-assign the new code to me.
I'm doing this in an new
This plugin uses parts of the SpectMorph API that are no longer supported in
the upcoming SpectMorph 0.5.0 and above.
In 0.4.x, the host can
- manage polyphonic instantiation itself, which this BEAST plugin does, i.e.
for a track with 16 voices, there are 16 `MorphPlanVoice` instances, each
Closed #84.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/tim-janik/beast/issues/84#event-2475700146___
beast mailing list
beast@gnome.org
The global soundfont lock has been eliminated with merging
https://github.com/tim-janik/beast/pull/102 so I close this issue.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
@swesterfeld pushed 1 commit.
a2451c669e32aae1e4ba91c9b6a7fc3496259a4e BSE: SF2: cleanup sound sont repo code
--
You are receiving this because you are subscribed to this thread.
View it on GitHub:
This gets rid of all bse module locks in the fluid synth code, by using one
fluid synth instance per track.
I observed that if we load the soundfont every time the user presses play, this
can be slow (50ms to load fluid r2 * number of soundfont tracks), so this keeps
the fluid synth instances
> In that case, there should be _one_ engine module around the fluid_synth_t
> instance, and the other modules should connect to this one module as input.
Yes, this PR does about half of what you ask; it uses one shared engine module
around the fluid_synth_t instance (good), but on the other
Recently, we discussed this merge request, and you (Tim) said you do not want
to merge code that locks a mutex during audio processing due to **priority
inversion**.
So, what does the lock protect here? There is one global fluid_synth instance
that is used by both, the soundfont repo and the
> Why exactly is a mutex needed in the first place, let alone in an engine
> module?
Because multiple engine modules share state, especially because multiple engine
module access the same fluid_synth_t instance, and could (possibly) call API
functions on the same fluid synth instance at the
1. open menu item "Demo" -> "Midi Test".
2. play
3. hit a few notes on external midi keyboard (produces some sound output)
4. stop
5. change "Midi Test" midi channel to 2
6. play
7. hit a few notes on external midi keyboard -> crash
```
stefan@quadcorn:~/src/beast (master % u=)$ gdb --args
This ports all properties of the MidiSynth to C++ (except for object properties
SNet/PNet).
I had to fix a bug in BsePcmOutput (first commit), because setting the volume
on the output object had no effect, but I wanted to test my code.
To have 1:1 the same ranges, I introduced constants for
As discussed previously, I created one example what happens if I try to port a
property that contains an Object to C++. I choose Song postprocessing network
as example.
```
stefan@quadcorn:~/src/ghbeast (object-pport-error % u=)$ make -j1
MODE debug
CHECKConfiguration
This is the implementation of a Moog-style lowpass ladderfilter with saturation
and 2x oversampling. The number of poles is configurable . Filter modes are
available for 6db/octave, 12db/octave, 18db/octave and 24db/octave.
I dont have any TODOs left right now, so this could either be the final
std::string in C++17 cannot be used at compile time, so constexpr is not
possible
You can view, comment on, or merge this pull request online at:
https://github.com/tim-janik/beast/pull/120
-- Commit Summary --
* BSE: randomhash.hh: fix compilation on g++ 7.4.0
-- File Changes --
M
Currently, if you want to return a Resampler2 object to its initial state (all
history values zero), you need to delete the instance and create a new one.
This adds a reset() function to the API which has the same effect. Im
using this new API in the Ladder filter implementation.
You can view,
This is a fix for #119 - and finally should make beast work out of the box for
users which have pulseaudio as default device (for instance together with
jack/bridging). For me at least this fixes make run.
In order to force using the default device if available, pcm drivers can return
a string
I cleaned up the resampling code:
* the C API was removed
* the implementation no longer relies on blockutils, but does its own SSE/FPU
handling
* Resampler2::create() got an additional argument: true means SSE should be
used if available; false means the FPU version should always be used
*
Ok, first of all, I no longer think that changing the auto-detect order for
devices can solve our problem. As I understand it for, you
- have a duplex (non-default) device you want beast to use
- have a alsa non-duplex default device that you don't want beast to use
On the other hand, I
- have a
@swesterfeld pushed 1 commit.
bee9d0ccd3e6047231d6076c306007d2f44c136d TOOLS: bsewavetool: remove unused
resampler include
--
You are receiving this because you are subscribed to this thread.
View it on GitHub:
First of all, this adds a function that was missing in bsemathsignal: a
`fast_log2` implementation. It works by using the float exponent and
approximating the rest of the value using a polynomial. I found a tool that
gives optimal polynomial coefficients for a given order:
Inserting T=float casts makes the function perform better (at least here). It
avoids conversions between single precision and double precision values (i.e.
cvtsd2ss) which would otherwise be used. So this version
```
static inline float G_GNUC_CONST
fast_log2ff (float value)
{
union {
@swesterfeld pushed 23 commits.
1c10aadd20aadf8412cdcc78d3af3bda304f6e00 BSE: Resampler: remove C API
8980aaafd5755f1413f5d9d0f48845de85111a4b TESTS: resamplehandle: remove
Resampler C API test
a9962f8acd512896d02cf1908c7e101102a9343c BSE: no longer rely on block utils to
create Resampler2
Since this PR wasn't merged yet, I simply force pushed an updated version.
Since we have no more C API, I could modernize the C++ API. It should be used
like this:
```
float input[128];
float output[256];
Resampler2 resampler (Resampler2::UP, Resampler2::PREC_96DB);
@swesterfeld pushed 1 commit.
0e14df11e638c164177b98d00ef34a7d1a08f02f BSE: Resampler2: fix compilation with
clang
--
You are receiving this because you are subscribed to this thread.
View it on GitHub:
As requested in PR https://github.com/tim-janik/beast/pull/125.
You can view, comment on, or merge this pull request online at:
https://github.com/tim-janik/beast/pull/126
-- Commit Summary --
* TESTS: testresampler: add header file for test_resampler prototype
-- File Changes --
M
swesterfeld commented on this pull request.
> @@ -188,6 +188,12 @@ main (int argc, char *argv[])
bench_aida();
return 0;
}
+ if (argc >= 2 && argv[1] && std::string ("--resampler") == argv[1])
+{
+ Bse::init_async (, argv, argv[0], args);
+ extern int
@swesterfeld pushed 1 commit.
14ffd216b25d36e31a1597a05dd297b66f89baba PLUGINS: LadderFilter: port code to
new Resampler2 API
--
You are receiving this because you are subscribed to this thread.
View it on GitHub:
I was playing a bit with the new alsa driver, and I found that for my first hw
device, it crashed like this:
```
stefan@quadcorn:~/src/3rd-tree/ghbeast (master *% u=)$ LANG=C beast
beast: unable to acquire soft realtime priority: Permission denied
beast-0.15.0: bse/bseengineutils.cc:632:
This is a C++ port of the two Part properties - last_tick and n_channels. I saw
there is some signal reemission code in bsetrack.cc, seemingly related to
last_tick updates, which looks like this:
```
bse_object_reemit_signal (part, "notify::last-tick", self, "changed");
...
This is the first string property port that uses the `APPLY_IDL_PROPERTY`
macro. Since there is no version of `constrain_idl_property` for strings, your
code didn't compile when instantiated with strings. So I used C++17 `if
constexpr` for checking for the type which compiles now. This means
I also don't know how to port sfi_pspec_time typed properties. And copyright
looks like it can be removed (?), has a `// COMPAT-FIXME: remove around 0.7.0`
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
I've ported all Track properties to C++ that do not contain object references.
Two things are worth mentioning.
1. `Const MIDI_MAX_CHANNEL` - I declared this as constant, but maybe the
definition must be moved elsewhere. It seems to be required in bsebasics.idl,
too (there is a `// FIXME:
BEAST for a very long time now refused to produce audio out of the box without
the command line args `-p alsa=pulse` - I am using (setup by Cadence)
- JACK as primary sound server
- PulseAudio bridged to JACK
Problems have been reported by other users
This ports all Server properties.
You can view, comment on, or merge this pull request online at:
https://github.com/tim-janik/beast/pull/117
-- Commit Summary --
* BSE: Server::log_messages: port property to C++
* BEAST-GTK: bstusermessage: use Server::log_messages C++ property
* BSE:
Here are the two commits (cherry-picked) which update our code to fluidsynth
2.0.5. This finally uses the new - non deprecated - `fluid_synth_process()`.
You can view, comment on, or merge this pull request online at:
https://github.com/tim-janik/beast/pull/108
-- Commit Summary --
*
spectmorph-0.5.0 has been released.
Overview of Changes in spectmorph-0.5.0:
* Support user defined instruments
- graphical instrument editor
- new WavSource operator
* Make standard instrument set smaller (less download/disk usage)
* Graphical ADSR
swesterfeld commented on this pull request.
> + void
+ shutdown_callback()
+ {
+is_down_ = true;
+ }
+public:
+ explicit JackPcmDriver (const String ) : PcmDriver (devid) {}
+ static PcmDriverP
+ create (const String )
+ {
+auto pdriverp = std::make_shared (devid);
+
swesterfeld commented on this pull request.
> + /* the default device is usually the hardware device, so things should
> work as expected
+ * we could show try to show non-default devices as well, but this could
be confusing
+ */
+ if (details.default_device)
+{
Ok, last commit should have all the fixes you requested.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/tim-janik/beast/pull/128#issuecomment-533811472___
beast
swesterfeld commented on this pull request.
> + }
+
+/* setup PCM handle or shutdown */
+if (error == 0)
+ {
+flags_ |= Flags::OPENED;
+
+uint dummy;
+pcm_latency (, ); // debugging only: print latency values
+ }
+else
+ {
+
swesterfeld commented on this pull request.
> +
+/* enable processing in callback (if not already active) */
+atomic_active_ = 1;
+
+/* report jack driver xruns */
+if (atomic_xruns_ != printed_xruns_)
+ {
+printed_xruns_ = atomic_xruns_;
+Bse::printerr
swesterfeld commented on this pull request.
> +vector silence_buffers
> (output_ringbuffer_.get_n_channels());
+
+fill (silence_buffers.begin(), silence_buffers.end(), [0]);
+
+uint frames_written = output_ringbuffer_.write (buffer_frames,
_buffers[0]);
+if
@swesterfeld pushed 1 commit.
f0c4879177cd50959242cfacc4fd8e5b3288ce14 BSE: Jack: some minor fixes as
requested in review
--
You are receiving this because you are subscribed to this thread.
View it on GitHub:
swesterfeld commented on this pull request.
> + std::atomic atomic_active_ {0};
+ std::atomic atomic_xruns_ {0};
+ int printed_xruns_ = 0;
+
+ bool is_down_ = false;
+ bool
swesterfeld commented on this pull request.
> + jack_port_set_latency_range (port, mode, );
+ }
+else
+ {
+jack_latency_range_t range = get_latency_for_ports (output_ports_,
mode);
+range.min += buffer_frames_;
+range.max += buffer_frames_;
+
+
swesterfeld commented on this pull request.
> +fast_copy (uintn_values,
+ Data *ovalues,
+ const Data *ivalues)
+{
+ copy (ivalues, ivalues + n_values, ovalues);
+}
+
+template<> void
+fast_copy (uint n_values,
+ float *ovalues,
+
swesterfeld commented on this pull request.
> +}
+
+static void
+list_jack_drivers (Driver::EntryVec )
+{
+ map devices;
+ jack_client_t *jack_client = connect_jack();
+ if (jack_client)
+{
+ devices = query_jack_devices (jack_client);
+ disconnect_jack (jack_client);
+}
+
swesterfeld commented on this pull request.
> +
+if (!p) // first port
+ range = port_range;
+else
+ {
+range.min = std::min (range.min, port_range.min);
+range.max = std::max (range.max, port_range.max);
+ }
+ }
+
swesterfeld commented on this pull request.
> + * implemented by two index variables (read_frame_pos and write_frame_pos)
+ * for which atomic integer reads and writes are required. Since the
+ * producer thread only modifies the write_frame_pos and the consumer thread
+ * only modifies the
@swesterfeld pushed 1 commit.
a96049760b7b37bc643b6063782203911a2d4b87 BSE: Jack: some minor fixes as
requested in review
--
You are receiving this because you are subscribed to this thread.
View it on GitHub:
@swesterfeld pushed 1 commit.
5cb66071c26fc8afe77894f540ca10132a2fbd9c DOCS: add a brief description of how
to use our jack midi driver
--
You are receiving this because you are subscribed to this thread.
View it on GitHub:
@swesterfeld pushed 1 commit.
4d72388a85a96d4d4818c05ccaf1056b8bc49fb4 BSE: Jack: allow to disable midi
driver auto connect
--
You are receiving this because you are subscribed to this thread.
View it on GitHub:
1 - 100 of 143 matches
Mail list logo