sjaehn / bjumblr Goto Github PK
View Code? Open in Web Editor NEWPattern-controlled audio stream / sample re-sequencer LV2 plugin
License: GNU General Public License v3.0
Pattern-controlled audio stream / sample re-sequencer LV2 plugin
License: GNU General Public License v3.0
To accommodate other common rhythms and time signatures.
Getting this atm;
Build BJumblr.lv2 DSP...src/BJumblr.cpp: In constructor ‘BJumblr::BJumblr(double, const LV2_Feature* const*)’:
src/BJumblr.cpp:70:21: error: ‘invalid_argument’ is not a member of ‘std’
70 | if (!m) throw std::invalid_argument ("BJumblr.lv2: Host does not support urid:map.");
| ^~~~~~~~~~~~~~~~
src/BJumblr.cpp:71:34: error: ‘invalid_argument’ is not a member of ‘std’
71 | if (!workerSchedule) throw std::invalid_argument ("BJumblr.lv2: Host does not support work:schedule.");
| ^~~~~~~~~~~~~~~~
src/BJumblr.cpp: In constructor ‘BJumblr::Sample::Sample(const char*)’:
src/BJumblr.cpp:104:50: error: ‘invalid_argument’ is not a member of ‘std’
104 | if (!sndfile || !info.frames) throw std::invalid_argument("BJumblr.lv2: Can't open " + std::string(samplepath) + ".");
| ^~~~~~~~~~~~~~~~
src/BJumblr.cpp: In member function ‘LV2_State_Status BJumblr::state_restore(LV2_State_Retrieve_Function, LV2_State_Handle, uint32_t, const LV2_Feature* const*)’:
src/BJumblr.cpp:701:15: error: ‘invalid_argument’ in namespace ‘std’ does not name a type
701 | catch (std::invalid_argument &ia)
| ^~~~~~~~~~~~~~~~
src/BJumblr.cpp:703:29: error: ‘ia’ was not declared in this scope
703 | fprintf (stderr, "%s\n", ia.what());
| ^~
src/BJumblr.cpp: In member function ‘LV2_Worker_Status BJumblr::work(LV2_Worker_Respond_Function, LV2_Worker_Respond_Handle, uint32_t, const void*)’:
src/BJumblr.cpp:842:17: error: ‘invalid_argument’ in namespace ‘std’ does not name a type
842 | catch (std::invalid_argument &ia)
| ^~~~~~~~~~~~~~~~
src/BJumblr.cpp:844:31: error: ‘ia’ was not declared in this scope
844 | fprintf (stderr, "%s\n", ia.what());
| ^~
make: *** [makefile:109: BJumblr.so] Error 1
==> ERROR: A failure occurred in build().
Aborting...
Error making: bjumblr.lv2-git
Requested today by @unfa in his youtube livestream (https://www.youtube.com/watch?v=MmGLTOkNenc):
Store multiple patterns in one instance of B.Jumblr. Add a control port to select the respective pattern. This should enable automation controlled switch between the patterns.
You maintain the WWW_BROWSER_CMD
, see here: https://github.com/sjaehn/BJumblr/blob/master/src/BJumblrGUI.hpp#L75
It is much easier to just launch xdg-open https://www.site.com
in order to open it in the currently default browser.
Not sure whether this is a BJumblr bug or a Carla bug (cc @falkTX )
But when saving a session, closing and re-opening the session in NSM, the loaded sample in BJumblr isn't restored.
So that if the user finds that their loop is not in sync with the music that is being input, they can press the reset-to-first-beat button and the left-most column gets started from that point?
(A related feature suggestion with similar but different functionality that it might be worth mentioning at the same time: to have -1 or +1 buttons, so as to shift each columns samples a column left or right? That would not change the start time of the samples/loop though.)
When you've it set to 32 steps, the overview is nice and good. When the setting is 16 steps, the canvas is large, too large imho, I don't have a pleasant overview. Might be nice to be able to zoom in/out somehow.
fork in unwanted for audio applications.
related lsp-plugins/lsp-plugins#54
Carla tries to prevents plugins from calling fork
under certain conditions.
Resulting in not being able to open the links in this plugin.
Carla prevented a plugin from calling 'fork', bad plugin!
sh: 1: Cannot fork
BJumblr.lv2#GUI: Can't open https://www.youtube.com/watch?v=DFSi7TMqvMw. You can try to call it maually.
Show FileChooser I/O error message box in addition to std::cerr
Would be nice to be able to save presets, that's only possible via Carla 'save as'?
Enable user to select between:
For being able to quickly take the effect in and out of the mix.
At present, B.Jumblr is a pure live audio stream slice re-sequencer. What about a non live-mode replaying and re-sequencing "static" samples? Samples could be imported from the live audio stream or an audio file. What do you think about ?
Allowing playback to be controlled manually by having two control inputs, one that on a 1 input triggers the advance of the white line and the playback of the sample in the new column, and another that triggers repeats the playback of the same sample.
Whilst I'm mentioning a trigger mechanism, it might be worth my suggesting that the use of CV rather than control could allow for trigger, gate, and modulation of the amplitude of the signal, though that would be a whole other level!
... or alternatively rotate waveform by -90°. This makes it easier to see which part of the sample or stream is on the turn. A selected pad will directly (and also visually) represent the part of the sample/stream to be played back. Also as result the white line will go from up to down.
It looks like sometimes B.Jumblr run out of sync as seen in this youtube stream https://youtu.be/MmGLTOkNenc?t=5319 by @unfa. Confirmation and further analysis required.
When running the plugin in Carla 2.2, it gives me a cpu % of 64 in htop (reasonable modern cpu with 4 cores).
I compile bjumblr on Fedora 32 (the last release).
I met the following error message:
src/BJumblr.cpp:812:3: error: 'LV2_State_Free_Path' was not declared in this scope; did you mean 'LV2_State_Make_Path'?
812 | LV2_State_Free_Path* freePath = NULL;
| ^~~~~~~~~~~~~~~~~~~
| LV2_State_Make_Path
src/BJumblr.cpp:812:24: error: 'freePath' was not declared in this scope
812 | LV2_State_Free_Path* freePath = NULL;
| ^~~~~~~~
src/BJumblr.cpp:817:4: error: 'LV2_STATE__freePath' was not declared in this scope; did you mean 'LV2_STATE__makePath'?
817 | LV2_STATE__freePath, &freePath, false,
| ^~~~~~~~~~~~~~~~~~~
| LV2_STATE__makePath
src/BJumblr.cpp: In member function 'LV2_State_Status BJumblr::state_restore(LV2_State_Retrieve_Function, LV2_State_Handle, uint32_t, const LV2_Feature* const*)':
src/BJumblr.cpp:894:2: error: 'LV2_State_Free_Path' was not declared in this scope; did you mean 'LV2_State_Make_Path'?
894 | LV2_State_Free_Path* freePath = NULL;
| ^~~~~~~~~~~~~~~~~~~
| LV2_State_Make_Path
src/BJumblr.cpp:894:23: error: 'freePath' was not declared in this scope
894 | LV2_State_Free_Path* freePath = NULL;
| ^~~~~~~~
src/BJumblr.cpp:899:3: error: 'LV2_STATE__freePath' was not declared in this scope; did you mean 'LV2_STATE__makePath'?
899 | LV2_STATE__freePath, &freePath, false,
| ^~~~~~~~~~~~~~~~~~~
| LV2_STATE__makePath
make: *** [makefile:124: BJumblr.so] Error 1
Not sure where this is coming from, but when I start jack_link, BJumblr in Carla produces corrupted/distorted sound.
I think I'd need to restart JACK to get normal sound again.
https://github.com/rncbc/jack_link
cc @falkTX
I've noticed that sometimes I do enter new 'notes' accidentally. Like my mouse mousebutton is stuck, but it isn't. Using the latest version in Carla.
The division of the grid in fours is visible via color differences (blue vs black), but that could be a bit more clear imho.
Fun project for sure!
When working with it, you start to think about the option you'll find in non-sequencer. Most notably the phrase editor, where you can arrange and play the made patterns in a certain sequence (to make a song / beat).
But in this case you probably want just one pattern play at once.
Hm maybe a combination of the Phrase Editor and the Pattern Triggers. Some way to be able to sequence patterns. With the ability to repeat a certain pattern multiple times. 4x pattern 1, then 4x pattern 4 .... 8x pattern 2...
http://non.tuxfamily.org/sequencer/doc/MANUAL.html#n:2.2.
http://non.tuxfamily.org/sequencer/doc/non-phrase-editor.png
http://non.tuxfamily.org/sequencer/doc/non-pattern-triggers.png
libsndfile doesn't support mp3. At least not the standard version of libsndfile. TODO implement minimp3 by lieff.
This would make it easier to draw a new configuration without worrying about a) playing two slices at the same time or b) having a column without a slice (i.e. one slice, not more or less).
contains int but NOT bool.
How about being able to set the pitch of each clip? Give each pitch a colour and use some mod key + mouse scroll to shift that up and down for each sample box?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.