Coder Social home page Coder Social logo

jpcima / ensemble-chorus Goto Github PK

View Code? Open in Web Editor NEW
30.0 5.0 2.0 13.46 MB

Digital model of electronic string ensemble chorus

License: Boost Software License 1.0

CMake 1.73% C++ 91.33% Gnuplot 0.07% Makefile 1.26% C 0.93% Objective-C++ 0.28% R 0.03% HTML 1.58% CSS 2.79%
chorus audio-effect solina eminent bbd virtual-analog

ensemble-chorus's Introduction

JPC Ensemble Chorus

Digital model of electronic string ensemble chorus

screenshot

Experimental!

This chorus effect simulates the operation of an analog circuit based on Bucket-brigade delays (or BBD).

The BBD chorus was famously used in ARP Solina and Eminent 310 Unique analog string ensemble synthesizers, and also in guitar effect pedals and other instruments. It is the chorus which gives these electronic instruments the timbral characteristics which turn them effectively into ensembles.

Principle: the chorus consists of 3 to 6 BBD lines. It samples the signal on each delay line by applying a variation on the delay, using pairs of low-frequency oscillators which are generated using fixed phase offsets from one to another. Each LFO pair is made of one slower modulator, Chorus, and one faster modulator, Vibrato.

The BBD delay is an integrated circuit which implements an analog buffer using an array of capacitors, which maintains a memory of the signal. As the capacitors discharge between two sampling periods, the signal is degraded, and a distortion effect happens.

This chorus effect models real BBD circuits, so it recreates the distortion effect. This software package does not have the ambition to faithfully reproduce the characteristics of any existing effect; it is offers customization to allow the creation a vast set of timbres.

Sound demo

Listen to the biniou:

Development builds

Build Status

Find automatic builds of the development branch here.

Dependencies

  • git
  • build-essential
  • cmake
  • fluid
  • libfltk1.3-dev
  • libasound2-dev
  • libjack-jackd2-dev or libjack-dev (for Jack 2 or Jack 1 respectively)
  • libpulse-dev (optional)
  • libfreetype6-dev
  • libxrandr-dev
  • libxinerama-dev
  • libxcursor-dev

Build

git clone --recursive https://github.com/jpcima/ensemble-chorus.git
mkdir ensemble-chorus/build
cd ensemble-chorus/build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .

References

Raffel, C., & Smith, J. (2010, September)
Practical modeling of bucket-brigade device circuits

Jurgen Haible (2007)
JH. String Ensemble / Triple Chorus - "Solina"(TM) Emulator

ensemble-chorus's People

Contributors

jpcima avatar trebmuh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

ensemble-chorus's Issues

Safe use of buffer size setting

I must not trust the buffer size to give a maximum dimension to the internal buffers.

According to documentation of class juce::AudioProcessor

The maximumExpectedSamplesPerBlock value is a strong hint about the maximum number of samples that will be provided in each block. You may want to use this value to resize internal buffers. You should program defensively in case a buggy host exceeds this value. The actual block sizes that the host uses may be different each time the callback happens: completely variable block sizes can be expected from some hosts.

Which means, current code is going to crash the stupid hosts.
As solution, I can divide processing into smaller individual chunks equal of smaller to buffer size.

Support low delays for high number of stages

A current limitation : the frequencies of clocks which drive BBD must be under the Nyquist frequency.

Since delay is inversely proportional to clock frequency, and clock frequency is limited by sample rate, higher stage counts such as >=4096 don't have access to the low enough delays that a chorus needs.

A solution is possibly to run the BBD and its clock oversampled, but it multiplies usage of CPU.
From the minimal Nyquist (22050 Hz) to a nonimal maximum clock of 100 kHz, this would take an oversampling x5.

(need to think if more optimized solution is possible)

dependencies in readme don't match makefile

Thanks for this great effect.
I was very impressed by the demo sounds!

While compiling, it looked for expat, which is not in the readme.
Otoh, I didn't find any packages or libraries matching the string "fluid", except fluidsynth.
I couldn't imagine that's what it needed, so I tried compiling without.
I didn't see any errors or warnings about that, and at least the lv2 seems to work.

error: cast from 'const void*' to 'juce::pointer_sized_uint' {aka 'unsigned int'} loses precision

Both clang-9 and gcc-9 fail with a similar message:

static int juce::DefaultHashFunctions::generateHash(const void*, int)':
work/ensemble-chorus-59baeb86b8851f521bc8162e22e3f15061662cc3/thirdparty/JUCE/modules/juce_core/containers/juce_HashMap.h|49 col 130| error: cast from 'const void*' to 'juce::pointer_sized_uint' {aka 'unsigned int'} loses precision [-fpermissive]                                                                                                                                      
||    49 |     static int generateHash (const void* key, int upperLimit) noexcept      { return generateHash ((uint64) (pointer_sized_uint) key, upperLimit); }
||       |                                                                                                                                  ^~~

Add control for the regen parameter

It's some kind of feedback parameter from the BBD line.
From experience, this one can create some high signal levels, so it's to handle with care.

Plugin for VST and LV2

The core of the effect was engineered as library, so it can be reused for a plugin version.

What is to do:

  • the entire GUI (but use existing Fltk GUI as the model)
  • the messaging around the realtime core (take also from Fltk)

Since this plugin is simple enough, it's decent opportunity to try DPF as framework.

Compilation error: "cannot bind packed field" (juce::PixelARGB)

I get the error below when trying to compile on Manjaro Linux (gcc 9.1.0). I remember seeing similar errors, when trying to compile other software using JUCE, that hasn't been updated in a while. The only reference I found for the error message is this old post from the JUCE forums, which mentions a fix but doesn't say what it is and might be only related to OS X PPC:

https://forum.juce.com/t/cannot-bind-packed-field-errors-in-xcode-3/9004

Here is the PKGBUILD script I'm using for compilation: https://gist.github.com/SpotlightKid/201bfa419faa2cb8a80195a8c55b0cbf

[ 44%] Building CXX object CMakeFiles/ensemble_chorus_fl.dir/sources/fl/main.cc.o
In file included from /home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/juce_graphics.h:121,
                 from /home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/juce_graphics.cpp:42,
                 from /home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/sources/plugin/JuceLibraryCode/include_juce_graphics.cpp:9:
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h: In member function 'juce::uint8& juce::PixelARGB::getAlpha()':
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h:116:77: error: cannot bind packed field '((juce::PixelARGB*)this)->juce::PixelARGB::<anonymous>.juce::PixelARGB::<unnamed union>::comps[3]' to 'juce::uint8&' {aka 'unsigned char&'}
  116 |     forcedinline uint8& getAlpha() noexcept           { return comps [indexA]; }
      |                                                                ~~~~~~~~~~~~~^
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h: In member function 'juce::uint8& juce::PixelARGB::getRed()':
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h:117:77: error: cannot bind packed field '((juce::PixelARGB*)this)->juce::PixelARGB::<anonymous>.juce::PixelARGB::<unnamed union>::comps[2]' to 'juce::uint8&' {aka 'unsigned char&'}
  117 |     forcedinline uint8& getRed() noexcept             { return comps [indexR]; }
      |                                                                ~~~~~~~~~~~~~^
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h: In member function 'juce::uint8& juce::PixelARGB::getGreen()':
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h:118:77: error: cannot bind packed field '((juce::PixelARGB*)this)->juce::PixelARGB::<anonymous>.juce::PixelARGB::<unnamed union>::comps[1]' to 'juce::uint8&' {aka 'unsigned char&'}
  118 |     forcedinline uint8& getGreen() noexcept           { return comps [indexG]; }
      |                                                                ~~~~~~~~~~~~~^
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h: In member function 'juce::uint8& juce::PixelARGB::getBlue()':
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h:119:77: error: cannot bind packed field '((juce::PixelARGB*)this)->juce::PixelARGB::<anonymous>.juce::PixelARGB::<unnamed union>::comps[0]' to 'juce::uint8&' {aka 'unsigned char&'}
  119 |     forcedinline uint8& getBlue() noexcept            { return comps [indexB]; }
      |                                                                ~~~~~~~~~~~~~^
In file included from /home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/juce_graphics.h:143,
                 from /home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/juce_graphics.cpp:42,
                 from /home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/sources/plugin/JuceLibraryCode/include_juce_graphics.cpp:9:
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h: In instantiation of 'void juce::RenderingHelpers::EdgeTableFillers::SolidColour<PixelType, replaceExisting>::replaceLine(juce::PixelRGB*, juce::PixelARGB, int) const [with PixelType = juce::PixelRGB; bool replaceExisting = true]':
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h:627:17:   required from 'void juce::RenderingHelpers::EdgeTableFillers::SolidColour<PixelType, replaceExisting>::handleEdgeTableLine(int, int, int) const [with PixelType = juce::PixelRGB; bool replaceExisting = true]'
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h:2025:57:   required from 'void juce::RenderingHelpers::ClipRegions<SavedStateType>::RectangleListRegion::SubRectangleIteratorFloat::iterate(Renderer&) const [with Renderer = juce::RenderingHelpers::EdgeTableFillers::SolidColour<juce::PixelRGB, true>; SavedStateType = juce::RenderingHelpers::SoftwareRendererSavedState]'
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h:1591:13:   required from 'void juce::RenderingHelpers::EdgeTableFillers::renderSolidFill(Iterator&, const juce::Image::BitmapData&, juce::PixelARGB, bool, DestPixelType*) [with Iterator = juce::RenderingHelpers::ClipRegions<juce::RenderingHelpers::SoftwareRendererSavedState>::RectangleListRegion::SubRectangleIteratorFloat; DestPixelType = juce::PixelRGB]'
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h:2644:67:   required from 'void juce::RenderingHelpers::SoftwareRendererSavedState::fillWithSolidColour(IteratorType&, juce::PixelARGB, bool) const [with IteratorType = juce::RenderingHelpers::ClipRegions<juce::RenderingHelpers::SoftwareRendererSavedState>::RectangleListRegion::SubRectangleIteratorFloat]'
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h:1896:13:   required from 'void juce::RenderingHelpers::ClipRegions<SavedStateType>::RectangleListRegion::fillRectWithColour(SavedStateType&, juce::Rectangle<float>, juce::PixelARGB) const [with SavedStateType = juce::RenderingHelpers::SoftwareRendererSavedState]'
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h:1893:14:   required from here
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h:713:34: warning: converting a packed 'juce::PixelRGB' pointer (alignment 1) to a 'int' pointer (alignment 4) may result in an unaligned pointer value [-Waddress-of-packed-member]
  713 |                             auto d = reinterpret_cast<int*> (dest);
      |                                  ^
In file included from /home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/juce_graphics.h:121,
                 from /home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/juce_graphics.cpp:42,
                 from /home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/sources/plugin/JuceLibraryCode/include_juce_graphics.cpp:9:
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h:366:17: note: defined here
  366 | class JUCE_API  PixelRGB
      |                 ^~~~~~~~
In file included from /home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/juce_graphics.h:143,
                 from /home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/juce_graphics.cpp:42,
                 from /home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/sources/plugin/JuceLibraryCode/include_juce_graphics.cpp:9:
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h: In instantiation of 'void juce::RenderingHelpers::EdgeTableFillers::SolidColour<PixelType, replaceExisting>::replaceLine(juce::PixelRGB*, juce::PixelARGB, int) const [with PixelType = juce::PixelRGB; bool replaceExisting = false]':
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h:627:17:   required from 'void juce::RenderingHelpers::EdgeTableFillers::SolidColour<PixelType, replaceExisting>::handleEdgeTableLine(int, int, int) const [with PixelType = juce::PixelRGB; bool replaceExisting = false]'
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h:2025:57:   required from 'void juce::RenderingHelpers::ClipRegions<SavedStateType>::RectangleListRegion::SubRectangleIteratorFloat::iterate(Renderer&) const [with Renderer = juce::RenderingHelpers::EdgeTableFillers::SolidColour<juce::PixelRGB, false>; SavedStateType = juce::RenderingHelpers::SoftwareRendererSavedState]'
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h:1596:13:   required from 'void juce::RenderingHelpers::EdgeTableFillers::renderSolidFill(Iterator&, const juce::Image::BitmapData&, juce::PixelARGB, bool, DestPixelType*) [with Iterator = juce::RenderingHelpers::ClipRegions<juce::RenderingHelpers::SoftwareRendererSavedState>::RectangleListRegion::SubRectangleIteratorFloat; DestPixelType = juce::PixelRGB]'
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h:2644:67:   required from 'void juce::RenderingHelpers::SoftwareRendererSavedState::fillWithSolidColour(IteratorType&, juce::PixelARGB, bool) const [with IteratorType = juce::RenderingHelpers::ClipRegions<juce::RenderingHelpers::SoftwareRendererSavedState>::RectangleListRegion::SubRectangleIteratorFloat]'
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h:1896:13:   required from 'void juce::RenderingHelpers::ClipRegions<SavedStateType>::RectangleListRegion::fillRectWithColour(SavedStateType&, juce::Rectangle<float>, juce::PixelARGB) const [with SavedStateType = juce::RenderingHelpers::SoftwareRendererSavedState]'
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h:1893:14:   required from here
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h:713:34: warning: converting a packed 'juce::PixelRGB' pointer (alignment 1) to a 'int' pointer (alignment 4) may result in an unaligned pointer value [-Waddress-of-packed-member]
  713 |                             auto d = reinterpret_cast<int*> (dest);
      |                                  ^
In file included from /home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/juce_graphics.h:121,
                 from /home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/juce_graphics.cpp:42,
                 from /home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/sources/plugin/JuceLibraryCode/include_juce_graphics.cpp:9:
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/thirdparty/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h:366:17: note: defined here
  366 | class JUCE_API  PixelRGB
      |                 ^~~~~~~~
make[2]: *** [CMakeFiles/juce_graphics.dir/build.make:63: CMakeFiles/juce_graphics.dir/sources/plugin/JuceLibraryCode/include_juce_graphics.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:820: CMakeFiles/juce_graphics.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/sources/fl/main.cc: In function 'void handle_signals()':
/home/chris/work/arch/aur/ensemble-chorus-git/src/ensemble-chorus/sources/fl/main.cc:240:10: warning: variable 'success' set but not used [-Wunused-but-set-variable]
  240 |     bool success = false;
      |          ^~~~~~~
[ 46%] Linking CXX executable ensemble_chorus_fl
[ 46%] Built target ensemble_chorus_fl
[ 47%] Linking CXX static library libjuce_core.a
[ 47%] Built target juce_core
make: *** [Makefile:130: all] Error 2

Make the anti-aliasing filter controllable

Allow the user to control the cutoff for the AA filter which precedes the sampling process by BBD.
The filter requirement is depending on number of stages and frequency range, but I've read about typical 15kHz filter use.

In many configurations the AA filter is useless currently but I can allow it to be user controllable.
When I implemented BBD for variable sample rates, I've picked the Butterworth filter as approximation (now Legendre) of the original filter used.

I could allow the filter to be dynamically designed for the wanted cutoff. Then, Butterworth will be a finer choice for simplicity; or I may switch to another kind of simple filter. (it needs to look back into the filter design and reevaluate)

Can we borrow/repurpose you’d BBD line and so forth Surge?

Hi @jpcima

Hope all is well

One of our users suggested that we add an emsemble chorus to Surge and another pointed at this code. Would you be OK if we used some of this code directly and indirectly to add a modified ensemble chorus to Surge, crediting you in the changelog and everything of course.

Boost license would let us do it without asking, I guess, but thought asking would be polite!

Let me know if that’s OK and we may add it to our book of work!

Standalone segfaults

When I run ensemble_chorus_fl, I get the following output:

Jack: JackClient::SetupDriverSync driver sem in flush mode
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_RtApiJackCount
Jack: Clock source : system clock via clock_gettime
Jack: JackLibClient::Open name = RtApiJackCount refnum = 5
Jack: jack_client_close
Jack: JackClient::Close ref = 5
Jack: JackClient::Deactivate
Jack: JackSocketClientChannel::Stop
Jack: JackPosixThread::Kill
Jack: JackClientSocket::Close
Jack: JackClientSocket::Close
Jack: JackLibClient::~JackLibClient
Jack: JackShmReadWritePtr1::~JackShmReadWritePtr1 5
Jack: Succeeded in unlocking 422 byte memory area
Jack: JackLibGlobals Destroy 615320
Jack: ~JackLibGlobals
Jack: no message buffer overruns
Jack: JackPosixThread::Stop
Jack: JackPosixThread::ThreadHandler : exit
Jack: JackShmReadWritePtr::~JackShmReadWritePtr 1
Jack: Succeeded in unlocking 1187 byte memory area
Jack: JackShmReadWritePtr::~JackShmReadWritePtr 0
Jack: Succeeded in unlocking 47664026 byte memory area
Jack: jack_client_close res = 0
Jack: jack_client_open RtApiJackInfo
Jack: JackLibGlobals Init 0
Jack: JackLibGlobals
Jack: JackPosixThread::StartImp : create non RT thread
Jack: JackPosixThread::ThreadHandler : start
Jack: JackGenericClientChannel::ServerCheck = default
Jack: JackClientSocket::Connect : addr.sun_path /dev/shm/jack_default_1000_0
Jack: JackClientSocket::Close
Jack: JackLibClient::JackLibClient table = 6290f0
Jack: JackLibClient::Open name = RtApiJackInfo
Jack: JackSocketClientChannel::Open name = RtApiJackInfo
Jack: JackClientSocket::Connect : addr.sun_path /dev/shm/jack_default_1000_0
Jack: JackServerSocket::Bind : addr.sun_path /dev/shm/jack_RtApiJackInfo_1000_0
Jack: JackSocketClientChannel::Start
Jack: JackPosixThread::StartImp : create non RT thread
Jack: JackPosixThread::ThreadHandler : start
Jack: JackSocketClientChannel::Init
Jack: JackServerSocket::Close /dev/shm/jack_RtApiJackInfo_1000_0
Jack: JackClient::ClientNotify ref = 0 name = system notify = 0
Jack: JackClient::AddClient name = system, ref = 0
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_system
Jack: JackClient::ClientNotify ref = 1 name = freewheel notify = 0
Jack: JackClient::AddClient name = freewheel, ref = 1
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_freewheel
Jack: JackClient::ClientNotify ref = 2 name = qjackctl notify = 0
Jack: JackClient::AddClient name = qjackctl, ref = 2
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_qjackctl
Jack: JackClient::ClientNotify ref = 3 name = Simple Scope (4 channel) notify = 0
Jack: JackClient::AddClient name = Simple Scope (4 channel), ref = 3
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_Simple Scope (4 channel)
Jack: JackClient::ClientNotify ref = 4 name = LLng notify = 0
Jack: JackClient::AddClient name = LLng, ref = 4
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_LLng
Jack: JackShmReadWritePtr::Init 1 -1
Jack: Succeeded in locking 1187 byte memory area
Jack: JackShmReadWritePtr::Init 0 -1
Jack: Succeeded in locking 47664026 byte memory area
Jack: JackShmReadWritePtr1::Init 5 -1
Jack: Succeeded in locking 422 byte memory area
Jack: JackClient::SetupDriverSync driver sem in flush mode
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_RtApiJackInfo
Jack: Clock source : system clock via clock_gettime
Jack: JackLibClient::Open name = RtApiJackInfo refnum = 5
Jack: jack_client_close
Jack: JackClient::Close ref = 5
Jack: JackClient::Deactivate
Jack: JackSocketClientChannel::Stop
Jack: JackPosixThread::Kill
Jack: JackClientSocket::Close
Jack: JackClientSocket::Close
Jack: JackLibClient::~JackLibClient
Jack: JackShmReadWritePtr1::~JackShmReadWritePtr1 5
Jack: Succeeded in unlocking 422 byte memory area
Jack: JackLibGlobals Destroy 6290d0
Jack: ~JackLibGlobals
Jack: no message buffer overruns
Jack: JackPosixThread::Stop
Jack: JackPosixThread::ThreadHandler : exit
Jack: JackShmReadWritePtr::~JackShmReadWritePtr 1
Jack: Succeeded in unlocking 1187 byte memory area
Jack: JackShmReadWritePtr::~JackShmReadWritePtr 0
Jack: Succeeded in unlocking 47664026 byte memory area
Jack: jack_client_close res = 0
Jack: jack_client_open RtApiJackCount
Jack: JackLibGlobals Init 0
Jack: JackLibGlobals
Jack: JackPosixThread::StartImp : create non RT thread
Jack: JackPosixThread::ThreadHandler : start
Jack: JackGenericClientChannel::ServerCheck = default
Jack: JackClientSocket::Connect : addr.sun_path /dev/shm/jack_default_1000_0
Jack: JackClientSocket::Close
Jack: JackLibClient::JackLibClient table = 6290f0
Jack: JackLibClient::Open name = RtApiJackCount
Jack: JackSocketClientChannel::Open name = RtApiJackCount
Jack: JackClientSocket::Connect : addr.sun_path /dev/shm/jack_default_1000_0
Jack: JackServerSocket::Bind : addr.sun_path /dev/shm/jack_RtApiJackCount_1000_0
Jack: JackSocketClientChannel::Start
Jack: JackPosixThread::StartImp : create non RT thread
Jack: JackPosixThread::ThreadHandler : start
Jack: JackSocketClientChannel::Init
Jack: JackServerSocket::Close /dev/shm/jack_RtApiJackCount_1000_0
Jack: JackClient::ClientNotify ref = 0 name = system notify = 0
Jack: JackClient::AddClient name = system, ref = 0
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_system
Jack: JackClient::ClientNotify ref = 1 name = freewheel notify = 0
Jack: JackClient::AddClient name = freewheel, ref = 1
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_freewheel
Jack: JackClient::ClientNotify ref = 2 name = qjackctl notify = 0
Jack: JackClient::AddClient name = qjackctl, ref = 2
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_qjackctl
Jack: JackClient::ClientNotify ref = 3 name = Simple Scope (4 channel) notify = 0
Jack: JackClient::AddClient name = Simple Scope (4 channel), ref = 3
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_Simple Scope (4 channel)
Jack: JackClient::ClientNotify ref = 4 name = LLng notify = 0
Jack: JackClient::AddClient name = LLng, ref = 4
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_LLng
Jack: JackShmReadWritePtr::Init 1 -1
Jack: Succeeded in locking 1187 byte memory area
Jack: JackShmReadWritePtr::Init 0 -1
Jack: Succeeded in locking 47664026 byte memory area
Jack: JackShmReadWritePtr1::Init 5 -1
Jack: Succeeded in locking 422 byte memory area
Jack: JackClient::SetupDriverSync driver sem in flush mode
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_RtApiJackCount
Jack: Clock source : system clock via clock_gettime
Jack: JackLibClient::Open name = RtApiJackCount refnum = 5
Jack: jack_client_close
Jack: JackClient::Close ref = 5
Jack: JackClient::Deactivate
Jack: JackSocketClientChannel::Stop
Jack: JackPosixThread::Kill
Jack: JackClientSocket::Close
Jack: JackClientSocket::Close
Jack: JackLibClient::~JackLibClient
Jack: JackShmReadWritePtr1::~JackShmReadWritePtr1 5
Jack: Succeeded in unlocking 422 byte memory area
Jack: JackLibGlobals Destroy 6290d0
Jack: ~JackLibGlobals
Jack: no message buffer overruns
Jack: JackPosixThread::ThreadHandler : exit
Jack: JackPosixThread::Stop
Jack: JackShmReadWritePtr::~JackShmReadWritePtr 1
Jack: Succeeded in unlocking 1187 byte memory area
Jack: JackShmReadWritePtr::~JackShmReadWritePtr 0
Jack: Succeeded in unlocking 47664026 byte memory area
Jack: jack_client_close res = 0
Jack: jack_client_open JPC Ensemble Chorus
Jack: JackLibGlobals Init 0
Jack: JackLibGlobals
Jack: JackPosixThread::StartImp : create non RT thread
Jack: JackPosixThread::ThreadHandler : start
Jack: JackGenericClientChannel::ServerCheck = default
Jack: JackClientSocket::Connect : addr.sun_path /dev/shm/jack_default_1000_0
Jack: JackClientSocket::Close
Jack: JackLibClient::JackLibClient table = 6290f0
Jack: JackLibClient::Open name = JPC Ensemble Chorus
Jack: JackSocketClientChannel::Open name = JPC Ensemble Chorus
Jack: JackClientSocket::Connect : addr.sun_path /dev/shm/jack_default_1000_0
Jack: JackServerSocket::Bind : addr.sun_path /dev/shm/jack_JPC Ensemble Chorus_1000_0
Jack: JackSocketClientChannel::Start
Jack: JackPosixThread::StartImp : create non RT thread
Jack: JackPosixThread::ThreadHandler : start
Jack: JackSocketClientChannel::Init
Jack: JackServerSocket::Close /dev/shm/jack_JPC Ensemble Chorus_1000_0
Jack: JackClient::ClientNotify ref = 0 name = system notify = 0
Jack: JackClient::AddClient name = system, ref = 0
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_system
Jack: JackClient::ClientNotify ref = 1 name = freewheel notify = 0
Jack: JackClient::AddClient name = freewheel, ref = 1
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_freewheel
Jack: JackClient::ClientNotify ref = 2 name = qjackctl notify = 0
Jack: JackClient::AddClient name = qjackctl, ref = 2
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_qjackctl
Jack: JackClient::ClientNotify ref = 3 name = Simple Scope (4 channel) notify = 0
Jack: JackClient::AddClient name = Simple Scope (4 channel), ref = 3
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_Simple Scope (4 channel)
Jack: JackClient::ClientNotify ref = 4 name = LLng notify = 0
Jack: JackClient::AddClient name = LLng, ref = 4
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_LLng
Jack: JackShmReadWritePtr::Init 1 -1
Jack: Succeeded in locking 1187 byte memory area
Jack: JackShmReadWritePtr::Init 0 -1
Jack: Succeeded in locking 47664026 byte memory area
Jack: JackShmReadWritePtr1::Init 5 -1
Jack: Succeeded in locking 422 byte memory area
Jack: JackClient::SetupDriverSync driver sem in flush mode
Jack: JackLinuxFutex::Connect name = jack_sem.1000_default_JPC Ensemble Chorus
Jack: Clock source : system clock via clock_gettime
Jack: JackLibClient::Open name = JPC Ensemble Chorus refnum = 5
Jack: JackClient::PortRegister ref = 5 name = JPC Ensemble Chorus:outport 0 type = 32 bit float mono audio port_index = 15
Jack: JackClient::PortRegister ref = 5 name = JPC Ensemble Chorus:outport 1 type = 32 bit float mono audio port_index = 16
[2]    3630 segmentation fault (core dumped)  ensemble_chorus_fl

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.