Anyone else having problems pushing commits there? It was fine yesterday, but
today I get an instant refusal.
No problems with github.
--
Will J Godfrey
http://www.musically.me.uk
Say you have a poem and I have a tune.
Exchange them and we can both have a poem, a tune, and a song.
> Mario Lang:
>
> #include <jack.hpp>
>
> #include <boost/accumulators/accumulators.hpp>
> #include <boost/accumulators/statistics.hpp>
>
> template<typename... Features>
> using AudioAccumulatorSet = boost::accumulators::accumulator_set<
> float, boost::accumulators::features<Features...>
> >;
>
> using Count = boost::accumulators::tag::count;
> using Max = boost::accumulators::tag::max;
> using Min = boost::accumulators::tag::min;
> using Mean = boost::accumulators::tag::mean;
> using Variance = boost::accumulators::tag::variance;
>
> class Statistics final : public JACK::Client {
> JACK::AudioIn In;
> AudioAccumulatorSet<Count, Max, Mean, Min, Variance> Accumulator;
>
> public:
> Statistics() : JACK::Client("Statistics"), In(createAudioIn("In")) {}
> int process(std::uint32_t FrameCount) override {
> for (auto &Value: In.buffer(FrameCount)) Accumulator(Value);
> return 0;
> }
> auto max() const { return boost::accumulators::max(Accumulator); }
> auto mean() const { return boost::accumulators::mean(Accumulator); }
> auto min() const { return boost::accumulators::min(Accumulator); }
> auto sampleCount() const { return boost::accumulators::count(Accumulator);
> }
> auto variance() const { return boost::accumulators::variance(Accumulator);
> }
> };
>
>
Nice code. But I wonder about one small thing related to C++.
Couldn't these max/mean/etc. methods in the Statististics class
be written shorter like this?:
auto max() const { return Max(Accumulator); }
auto mean() const { return Mean(Accumulator); }
auto min() const { return Min(Accumulator); }
auto sampleCount() const { return Count(Accumulator); }
auto variance() const { return Variance(Accumulator); }
Sorry if it's a stupid question, but I haven't used "using" in C++ yet. :-)
Also thanks for demonstrating these things from boost.
Hi.
As I was recently sucked into the Eurorack world,
I have begun to work on a small C++ project to create tools
for working with control voltages. My ultimate plan
is to write a small software CV sequencer.
But until then, I am going for low hanging fruits, esp. so that I can
warm up to writing JACK code. One of these is cv2midiclock.
It takes a CV signal (actually works with Line-In as well, but
my ultimate plan is to use an Expert Sleepers ES-8 to get
DC-coupled AD/DAC) from an audio port and outputs a synced
MIDI Clock on a MIDI port. Very simple, very basic, but might
be useful, actually.
https://github.com/mlang/brlcv
Disclaimer: This repository will never implement any sort of GUI.
In fact, it is likely that the only user interface the control
voltage sequencer will ever have is going to be based on a Braille display.
You are welcome to fork the code to port it (once it works) to other
user interfaces. Patches to implement visual UIs will be rejected, as
was the case with my patches to improve GTK Accessibility.
However, if you are fine with CLIs or OSC and have an interest
in CV tools on Linux, you are very welcome to join forces.
P.S.: This repo contains my version of a C++ wrapper for JACK clients.
While it is definitely not complete, it can be used to
implement simple JACK clients in very few lines of code.
If you are into modern C++ (C++14 and beyond), take a look.
If you like/dislike it, send feedback please.
Below is (totally useless) example client:
#include <jack.hpp>
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics.hpp>
template<typename... Features>
using AudioAccumulatorSet = boost::accumulators::accumulator_set<
float, boost::accumulators::features<Features...>
>;
using Count = boost::accumulators::tag::count;
using Max = boost::accumulators::tag::max;
using Min = boost::accumulators::tag::min;
using Mean = boost::accumulators::tag::mean;
using Variance = boost::accumulators::tag::variance;
class Statistics final : public JACK::Client {
JACK::AudioIn In;
AudioAccumulatorSet<Count, Max, Mean, Min, Variance> Accumulator;
public:
Statistics() : JACK::Client("Statistics"), In(createAudioIn("In")) {}
int process(std::uint32_t FrameCount) override {
for (auto &Value: In.buffer(FrameCount)) Accumulator(Value);
return 0;
}
auto max() const { return boost::accumulators::max(Accumulator); }
auto mean() const { return boost::accumulators::mean(Accumulator); }
auto min() const { return boost::accumulators::min(Accumulator); }
auto sampleCount() const { return boost::accumulators::count(Accumulator); }
auto variance() const { return boost::accumulators::variance(Accumulator); }
};
#include <chrono>
#include <iostream>
#include <thread>
using namespace std::literals::chrono_literals;
int main() {
Statistics Client;
std::cout << "Rate: " << Client.sampleRate() << std::endl;
Client.activate();
std::this_thread::sleep_for(5s);
Client.deactivate();
std::cout << Client.sampleCount() << ": "
<< "mean=" << Client.mean()
<< ", variance=" << Client.variance()
<< ", min=" << Client.min()
<< ", max=" << Client.max()
<< std::endl;
}
--
Happy patching (pun intended),
⡍⠁⠗⠊⠕ | Blog: <https://blind.guru/> GitHub: <https://github.com/mlang/>
.''`. | Twitter: @blindbird23 FaceBook: disyled
: :' : | SoundCloud: <soundcloud.com/mario-lang>
`. `' | YouTube: <youtube.com/user/mlang23>
`-
Has anyone encountered any work on this?
How powerful of a computer would be required for a software based
solution to be able to keep up with a (expensive for now) ravenna
card, if one wanted full channel count at full data rate?
I understand that it travels over an RJ45 port with standard wiring
(cat 6). I assume one would want an additional dedicated ethernet port
for this.
I'm considering learning C just to take this on.
Thanks
Hi!
I followed up along the "Plugin Programming with Faust" minilac16
conference/workshop <https://youtu.be/T_1Cobmpc5o> by Albert Gräf, and
now my dream percussive "kik" plugin is nearing completion :)
I'm now wondering how to make a nice custom GUI, something sobre and
classy with maybe a logo ; I'm using QT5 for the generic GUI as this is
what Albert used in his (quite wonderful I must add) workshop, but I'm
not set on it.
At the end of the workshop, Albert shows off the "exercise06" plugin
(exactly here <https://youtu.be/T_1Cobmpc5o?t=1h18m2s>) and for the
first time the UI is not generic but custom, but I can't find the
corresponding code anywhere, and believe me I searched :(
Can somebody point me in the right direction?
yPhil
PS - I had to make some adjustments to follow the workshop : 1-the
faust-lv2 repo is now at bitbucket
<https://bitbucket.org/agraef/faust-lv2> and no longer at github like
Albert says in the video (this one was easy) and 2-the included *.cpp
files errored, so I had to use the ones from the main faust repo
<https://github.com/grame-cncm/faust>.
--
Yassin Philip New album NOW
http://yassinphilip.bitbucket.io
Hello everyone
The idea is to rapidly rise, and (a bit slower) fall, the pitch of a
percussive sound
<https://modeaudio.com/magazine/drum-synth-sound-design-kick-snare>, so
this pitch has to evolve over time..? Googling for it is a bit tricky,
and I can't find any recipe anywhere
Also, is is possible to assign the parameter value of a Faust function's
to the output of another? To, for instance, lower or rise an eQ band
frequency with the output of a compressor?
If it is, I'd really like to learn how for now, I only know how to set
parameters to static and/or user-defined values.
yPhil
--
Yassin Philip New album NOW
http://yassinphilip.bitbucket.io
Guitarix release 0.35.5
Guitarix is a tube amplifier simulation for
jack (Linux), with an additional mono and a stereo effect rack.
Guitarix includes a large list of LV2 and LADSPA plugins, and support
LADSPA / LV2 plugs as well in it's racks.
The guitarix engine is designed for LIVE usage, and feature ultra fast,
glitch and click free preset switching and is full Midi and remote
controllable (the Web UI is not included in the distributed tar ball).
This release fix a issue within the new online preset downloader.
If you already use V0.35.4, a upgrade is strongly recommended.
Refer to our project page for more information:
http://guitarix.org
Download Site:
http://sourceforge.net/projects/guitarix/
Forum:
http://guitarix.sourceforge.net/forum/
Consider visiting our forum or leaving a message on
guitarix-developer(a)lists.sourceforge.net
regards
hermann
Hi everybody!
I'm trying to mix two sources : A noise, and the output of a FAUST
instrument ; I have been following the "One voice mixer" tutorial
<https://www.youtube.com/watch?v=kTN-ZAEdYD4> :
gate = button("gate"); // 0/1
env = gate : hgroup("Noise Env", adsr(a, d, s, r));
noize = env * noise;
kick = additiveDrum(freq,ratio,gain,5,attack,release,gate);
mute1 = *(1-checkbox("Mute1"));
mute2 = *(1-checkbox("Mute2"));
amplify1 = *(hslider("Gain1", 0.5,0,1,0.01));
amplify2 = *(hslider("Gain2", 0.5,0,1,0.01));
pano1 = _ <: *(p1),*(1-p1)
with {
p1 = nentry("[1]Pano1[style:knob]",0.5,0,1,0.1);
};
pano2 = _ <: *(p2),*(1-p2)
with {
p2 = nentry("[2]Pano2[style:knob]",0.5,0,1,0.1);
};
process = hgroup("Noize", noize : mute1 : amplify1 ),hgroup("Kick", kick
: mute2 : amplify2);
The above code is "Faust code OK" in FaustWorks ; This is really
prototype code, I purposely duplicated stuff to be dead sure that I'm
using separate objects, please forget its crudeness anyway, here is the
diagram <https://framapic.org/TVHGMH480G53/3M7B4nBn3Dxf.png> :
It really looks like we should hear both sources together, right? Wrong
:( See if I leave only one of them two, say "hgroup("Noize", noize :
mute1 : amplify1)" alone, /then/ I can hear it, same for "hgroup("Kick",
kick : mute2 : amplify2)" :(
I tried everything, like mixing them down to simple stereo (:>_,_) or
using various blocks and combinations, no-way, I'm really missing
something... What?
Thank you for your patience, Faust is fantastic BTW
yPhil
--
Yassin Philip New album NOW
http://yassinphilip.bitbucket.io
On 14.07.2017 03:47, Yassin Philip wrote:
> Hi!
>
> I followed up along the "Plugin Programming with Faust" minilac16
> conference/workshop <https://youtu.be/T_1Cobmpc5o> by Albert Gräf, and
> now my dream percussive "kik" plugin is nearing completion :)
>
> I'm now wondering how to make a nice custom GUI, something sobre and
> classy with maybe a logo ; I'm using QT5 for the generic GUI as this is
> what Albert used in his (quite wonderful I must add) workshop, but I'm
> not set on it.
>
> At the end of the workshop, Albert shows off the "exercise06" plugin
> (exactly here <https://youtu.be/T_1Cobmpc5o?t=1h18m2s>) and for the
> first time the UI is not generic but custom, but I can't find the
> corresponding code anywhere, and believe me I searched :(
>
> Can somebody point me in the right direction?
Hi
I don't know any FAUST, but I gladly share some links to threads on the
LV2 mailing list reminding developers why they *should not* use any of
the big toolkits (e.g. Qt, Gtk) to author plugin GUIs [1][2]. Should
save you a lot of pain in the long run...
[1]
http://lists.lv2plug.in/htdig.cgi/devel-lv2plug.in/2016-March/001593.html
[2]
http://lists.lv2plug.in/htdig.cgi/devel-lv2plug.in/2017-March/001755.html
> yPhil
>
> PS - I had to make some adjustments to follow the workshop : 1-the
> faust-lv2 repo is now at bitbucket
> <https://bitbucket.org/agraef/faust-lv2> and no longer at github like
> Albert says in the video (this one was easy) and 2-the included *.cpp
> files errored, so I had to use the ones from the main faust repo
> <https://github.com/grame-cncm/faust>.
>
> --
> Yassin Philip New album NOW
> http://yassinphilip.bitbucket.io
>
>
>
> _______________________________________________
> Linux-audio-dev mailing list
> Linux-audio-dev(a)lists.linuxaudio.org
> http://lists.linuxaudio.org/listinfo/linux-audio-dev
>