Git Product home page Git Product logo

ariamodules's Introduction

Aria Salvatrice Signature Series Synthesizer Modules

Hiya hello hey hi what’s hip love, I’m Aria Salvatrice. I’m a French expat living on the Worldwide Web with my dog.

I make Gay Baroque Technopop and Pastoral Industrial music happen, and made a buncha virtual synth modules for my own use.
They are the Aria Salvatrice Signature Series. They’re growing into an integrated system for performing aleatoric techno. Lotsa artists found them inspiring for many genres of music. You can grab them for free!

They are part of Cardinal, which is currently the only supportedh ost.

They are not supported in VCV Rack 2, due to their behavior towards third-party contributors, and inclusion of women. Bug reports you cannot reproduce in a supported host will not be accepted.

Modules

Documentation

The documentation of the modules is only available from my website. It's beginner-friendly and detailed - please check it out.

Compatibility, Download & Installation

Those modules currently work with any 1.x version of VCV Rack, on Linux, Windows, and OS X. Please contact VCV to obtain them via their library. However, older versions are no longer supported.

If you build my plugin manually, you have to make dep before you make dist.

The Sonaremin project for Raspberry Pi bundles my modules in its distribution.

Other thingies

Acknowledgements & Namedrops

Thanks to everyone who created open-source modules I could learn from and make songs with.

Thanks to Jerry Sievert and cschol for their help with QuickJS integration.

Thanks to Silvio Kunaschk for their help with continuous integration.

Thanks to Squinky Labs, Stoermelder, David O'Rourke, and Anthony Lexander Matos for technical advice.

Thanks to Omri Cohen for featuring my modules in livestreams.

Thanks to Ken McAloon for Latin language translations.

Thanks to Sophie for music theory advice.

Thanks to Heavy Viper for years of inspiring conversation about synths and music.

Thanks to Mog for Mog.

Thanks to my dog Ornstein for being a good dog.

Thanks to my music-making LGBBQT internet shitposting gang for introducing me to virtual modular synthesis as something that's not just for old guys with more disposable income than impetus to write fresh songs.

But most of all, thanks to YOU for using my art.

Lawyer's corner

Yeah, the licensing rules are a bit complicated. But the big idea is pretty simple: my modules are GPL3-or-later, my logo is copyrighted, the rest is less restrictive. If there's licensing incompatibilities (besides the intended virality of the GPL) lemme know and we'll figure out something.

Here goes the detailed breakdown:

The output of my modules belongs to you

It should go without saying that no sane courtroom would ever humor the idea the output of my modules is original enough to be my copyright, even that of Arcane, which directly outputs random data obtained from a server under my control.

Since courtooms are rarely sane, I explicitly relinquish any claim of intellectual property over the output you obtain by operating my modules, not that I believe I ever had any. Any song you make with them is yours alone.

Source code of individual modules

The code of the Aria Salvatrice Signature Series Synthesizer Modules is distributed under the GNU General Public License v3.0 or later. The modules come without any warranty and might recklessly endanger life and limb, the usual.

Re-usable libraries

Not that the code is very good, but some libraries I created for my own use are available under the less restrictive terms of the Do What The Fuck You Want To Public License, to allow every creator to do what the fuck they want. The files in question are src/javascript.hpp, src/lcd.hpp, src/polyexternalscale.hpp, src/portablesequence.hpp, src/prng.hpp, src/quantizer.hpp, and src/widgets.hpp.

Faceplates

CC-BY-SA-4.0, with the exception of my signature logo, which is copyrighted, and generally not directly baked into my faceplate SVG files. You may freely distribute your faceplate edits. If you enjoy making custom skins, bear in mind that some of the colors used in my modules are defined in the code, not the SVG files.

Components (knobs, jacks, etc)

WTFPL graphics and code (in src/widgets.hpp). But if you re-use them, I request you do not entirely re-use my signature color scheme in your own modules. This request is not legally binding, as it'd make licensing complicated. Because I use a limited palette, it's easy to replace most colors in my SVG files using search and replace in a text editor.

My collection of modules and widgets does not use VCV's component library at all, and is thus unencumbered by its licensing restrictions.

Signature / Logo

Copyrighted. It's mine.

If you edit my code to use my modules as a base for your own altered modules, remove my signature from your faceplates, even if you think your changes are trivial: I don't want to endorse and take credit for something I didn't vet or personally participate in.

If you are faithfully porting my code to a new environment, are compiling binaries for another platform, or are otherwise distributing my modules as I designed them, keep the signature. If unsure, just ask.

The easiest way to remove my signature from every module is by blanking or replacing the graphic in the res/components/signature.svg file, and removing it from the blank plate: res/faceplates/Blank.svg.

Project name

Aria Salvatrice is the name I go by as a person. Distributed forks of my code should not make my name part of their title. The VCV project, and software libraries that distribute my code, should not distribute a fork maintained by a different person under my name without my explicit permission. To do so would impersonate me.
Distributed forks of my code should mention I'm the original author, but shouldn't use my name in a way that can be construed as implying my authorship of their fork, or my endorsement of their fork.

While the VCV project's policy allows taking over inactive plugins in its library, including those that are named after their author, I am requesting for its ethics guidelines protecting the brand names of companies to be extended to my own name as a human. I am also requesting the same out of any other project distributing my software: it is a long-standing tradition of free open-source software that forks should go by a different name, if only to avoid user confusion.

If you are faithfully porting my code to a fork of VCV Rack, are compiling binaries for another platform, or are otherwise distributing my modules as I designed them, but need to apply trivial compatibility patches to make my software work on your platform, you should keep the name, and the signature. The deciding factor is whether you are distributing my software as I designed it. If you alter it, you should rebrand it.

The name of the individual modules in my collection does not have to be changed. Whether to keep the name of the modules the same, change them, or name them a variation of the original name, is left to the forker's discrection.

Git forks of my code on sites such as github, created for example to experiment with my code, forks that are not directly distributed to end users but only seen by an audience of developers, are obviously not considered distributed forks, and are thus exempt from this request, as it is obvious to the intended audience that this is a fork, and no impersonation is intended.

Graphics for the Arcane module

The Arcane module uses Tarot cards altered from Yoav Ben-Dov's CBD Tarot. Its graphics are distributed under the CC-BY-NC-SA, to comply with the license of the graphics used. That includes the faceplate, as it uses a pattern taken from that tarot deck.

Fonts used

Libraries used

Copyright assignment

By sending me pull requests, you assign their copyright to me, allowing me, in perpetuity, to license your contributions however I see fit.
Right now, that means a mix of GPL-3.0-or-later and WTFPL, but I reserve the right to relicense it or re-use code in proprietary projects in the future.
This is a personal project where I don't expect external contributions to be any more complex than small-scale bugfixes and feature additions, so I think that's reasonable. If you think that's unreasonable, don't contribute. You will be asked to acknowledge this policy the first time you send me a non-trivial pull request. See CONTRIBUTING.md for more information.

Contact

You can send me bug reports on my GitHub project page.

You can send me dog gifs to [email protected].

ttyl,

Aria Salvatrice

ariamodules's People

Contributors

ariasalvatrice avatar cschol avatar kant avatar qno 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  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  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ariamodules's Issues

Handle the root note better in QQQQ

It should probably be an additional button on the piano display.

  • Only an active note can be the root
  • Only a single note can be the root
  • It should be lit automatically when the info provided by the source (expander, poly external scale, scene), or when the knobs are used to pick a scale.

Pipelines deprecating macOS-10.13 in March

Because OS X 10.13 is a whole TWO YEARS OLD, and Microsoft is a small startup lacking the resources to support legacy products, they are removing support for OS X 10.13 a whole three damn days after I rigged up Pipelines.

After the next release, try replacing the "13" with a "14" and see what happens.

Make a successor to Darius: how should it work and what should it do?

Here's a place to dump idle thoughts about how to evolve the Darius sequencer. No promises I'll ever do it.

My thoughts:

  • Darius was made on a whim and should remain exactly as-is, save for voltage range selection. It's meant to inspire and challenge you to work within its limited but easily understood framework.
  • None of the requested features are impossible to achieve right now. It takes a bit of patching, and adds negligible sample latency, but it's rather straightforward. My C++ skills are still limited, so no rushing to get it done ASAP.
  • Note selection via knob and tooltip is a huge pain, so let's not add note selection to the original Darius - people know how to use quantizers.
  • Just adding every single feature as requested to a new module would mean a super large faceplate and difficult workflow. I want no menu diving.
  • Adding more I/O to the existing 32hp faceplate is impossible, it’d be a separate module no matter what.
  • Going past 8 steps means too big a possibility space to program manually (8 steps = 36 nodes, 16 steps = 136 nodes, 16 steps = 528 nodes). If you randomized a pattern this big it’d sound no different from pure randomness, without any discernible repeating pattern.
  • The network is currently 1 > 2. 1> 3 would also be possible, but much less intuitive to program. It would also call for separate devices.
  • Things people might want to program:
    • Pitches, quantized or not
    • Chords
    • Note selection from a chord
    • Modulation / general CV
    • Envelopes
    • Gates
  • Types of possible motion - adding them all would be silly, which should make the cut?
    • Random, 1 node forward
    • Random, n nodes forward
    • Force a step up or down, 1 node forward
    • Force a step up or down, n nodes forward
    • Same as above but backwards
    • Reset to step 1
    • Jump to node n
  • Could link multiple instances, similar to Splort and Smerge
  • Multiple banks would be good but there's no reason to have a ton of them, since it's all about slowly evolving patterns
  • Some features have overlap with other modules I have planned and can share code
  • The module should not be named in a way that implies it's superior to the original, nor should it set out to make the original obsolete

Excerpts from the VCV forums:

CV controls for the route knobs would allow for some compositional subtlety. I’m using a shift register and a comparator so that a note is only played when consecutive notes are different. If I have the top row set mostly the same and the bottom row set all different it would be great to gradually shift the positions of the direction knobs. Thanks. (dag2099)

Positive/negative voltages (as an add’l option - maybe a few +/- voltage modes in the menu) would be nice. On/off for each step with a probability knob would be cool for a kind of built-in Bernouli gate thing. That, along with a global gate output for triggering envelopes. A built in quantizer with some scales would be neat but not entirely necessary. A global transpose with a CV input (if there were a quantizer built-in with scales, this could transpose the root note). (funkybot)

Darius an other knob for step but cutting steps from the left

Hello,
I really like darius module and this morning I was thinking it would be nice to have the possibility to begin the sequence not in the first row but in the second or third or fourth... and like this to have already probability at the beginning of the sequence. So maybe a new knob to cut steps from the beginning of the sequence?
Have a nice day and thanks a lot for your great work.
Matthieu

Compile failure on Mac platform

Compile failure on Mac platform:

src/Splirge.cpp:47:24: error: implicit instantiation of undefined template 'std::__1::array<float, 4>'
                std::array<float, 4> splitVoltages;
                                     ^
/home/cschol/src/osxcross/target/bin/../SDK/MacOSX10.13.sdk/usr/include/c++/v1/__tuple:223:64: note: template is declared here
template <class _Tp, size_t _Size> struct _LIBCPP_TEMPLATE_VIS array;
                                                               ^
src/Splirge.cpp:64:24: error: implicit instantiation of undefined template 'std::__1::array<float, 4>'
                std::array<float, 4> mergedVoltages;
                                     ^
/home/cschol/src/osxcross/target/bin/../SDK/MacOSX10.13.sdk/usr/include/c++/v1/__tuple:223:64: note: template is declared here
template <class _Tp, size_t _Size> struct _LIBCPP_TEMPLATE_VIS array;

You are missing an explicit

#include <array>

at the top of the file. This is required for Mac platform only.

HTML Documentation

If the collection continues to grow, a github page won't cut it for documentation. I want to make something nicer, using the templates currently in use on https://aria.dog, which uses a homegrown static site generator, but could be adapted to github pages.

Ext. Rnd for Darius Feature Request

Hi,
I like Darius very much but also love to have the ability to repeat the same semi random sequence multiple times. So I would propose to add an external random cv input to be used in up/down decisions. Added a Screenshot implementing it using cv mapping. In this solution probabilities for up and down have to controlled using Seeds of Change. Would be much easier with an ext. rnd input.
The random generator which allows to set a seed (ext. rnd in) to get repeatable random numbers can easily copied from OrangeLine (Mother) source code. So it shouldn't be much work to do it but would make Darius much more usable in my setups.
RepeatableDarius
Regards
Dieter

Azure azure-win-dist breaks

Look into the Azure file I adapted to see what that make target entails and whether it's safe to swap it to dist on windows.

Improve the Arcane server selection of scales

I'm waiting until Arcane hits the library and people start to understand it before I draw attention to this, but currently, the server has a very conservative selection of music scales.

I'll just copy what I say in the source:

# Once people understand what Arcane does, I'd like to have experts help me
# decide which ones to add, which to omit, which weights would be best.
#
# I AM NOT SEEKING TO ADD A FULL LIST OF EVERY CONCEIVABLE SCALE EVER.
# Please re-read the line above.
#
# I'll avoid using a lot of fancy theory words, and just explain the big idea:
# shoving any random shit into the quantizer should sound fun and musical to
# people from most countries.
#
# Until that conversation happens, I'll start out with a very limited, 
# safe curation, and add more exotic scales later.

Here's the relevant part of the script. You don't have to know the language to understand what it does. https://github.com/AriaSalvatrice/Arcane/blob/f698b7f064bc5355f702dae3bdb940222a6bf3f7/arcane.coffee#L53

Add automatic builds

I don't have easy constant access to a mac currently. I need to know when things break on other platforms, and make it easier for people to test things by providing development binaries.

It seems that people had success with both Azure and Travis-CI.

The LCD font lacks scanlines on some HDPI displays

The effect was probably an artifact of nanovg subpixel hinting in the first place. I can probably alter the files automatically to increase the gap.

I do not want to use a font unless the rendering is perfect everywhere: pixel-perfect at every zoom level on every OS, no antialiasing or weird subpixel hinting behavior, visible scanlines or pixel grid but still readable at 100% standard DPI.

Qqqq recall bug

Woof Aria,

This is a bit hard to explain but here I go:
When you load the project I attached, it will play a chord sequence, this should be Cm7 Dm7 E#M7 A#(add9), and it is !
When you stop the clock close rack and start rack again, all is still fine.
But...
...when you close rack while playing (the clock is still running), the first chord in Qqqq will change to the chord that was playing when you closed rack.
So when you close rack while it's playing a Dm7 , the first chord in the seq will become a Dm7.

Greetings Peter.

AriaBug.zip

UnDuLaR: alternative to the Engine > Sample Rate > Pause safety

Forgot where it was posted, but I think pausing the engine is slated for removal in rack v2.

Having a way to stop a misconfigured UnDuLaR instance is crucial, as it could otherwise destroy a patch.

Providing instructions how to edit the JSON yourself in a text editor would be good enough, but I could create a little all-in-one javascript page that automates it, and provide it as part of the plugin.

Arcane: "DOWNLOADING" on LCD can be misleading

If the first instance added to the rack fails the download, other instances are stuck on the "DOWNLOADING" message, despite those other instances not attempting a download themselves.

What's a better message? It should fit in 11 characters spaces included.

"LOADING"
"WAITING"
"WAIT ON DL"

better ideas?

QQQQ Poly External Scale should forward the tonic

When the scale is set from an external source in such a way the tonic is known, QQQQ should forward it instead of using its key knob.

There exists no use case for this yet, but it should be fixed to make those use cases possible in the future.

Darius: add portable sequence format copy-paste support

Received a suggestion via private conversation to add the proposed portable sequence format to Darius. For now I haven't decided.

See also: https://github.com/VCVRack/Rack/issues/1708

Copying my reaction here:


I considered it, but the main problem is that it has a different amount of nodes per step. This is how it represents its steps internally:

const int STEP1START = 0;  //               00        
const int STEP2START = 1;  //             02  01            
const int STEP3START = 3;  //           05  04  03          
const int STEP4START = 6;  //         09  08  07  06        
const int STEP5START = 10; //       14  13  12  11  10      
const int STEP6START = 15; //     20  19  18  17  16  15    
const int STEP7START = 21; //   27  26  25  24  23  22  21  
const int STEP8START = 28; // 35  34  33  32  31  30  29  28

There's two major ways people use it: all probabilities to the center, or strongly biased to a side (I.E., biased to go 00 01 03 06 10 15 21 28).

I just have no idea how to interchange data in a way that'd match people's intuitions. We've got 36 nodes rather than a multiple of 8, and a different amount of potential nodes per step.

I think the least worse behavior for it would be, upon receiving a sequence, to treat it as a 8 step sequence, and assign its values to every node of the corresponding step, and let the user work from here. But I have no idea whatsoever what people would want to export. Exporting only the top or bottom path would encourage a specific way of working with the device and restrict its potential. Exporting a random possible 8 step sequence would be more in the spirit of the module, but would not be intuitive.

I'd like to see how the reference implementations do things and how much enthusiasm users have for it before I decide to do this, Darius has some really messy code due to my lack of experience with C++, so it'd require a very major rewrite, without breaking existing sequences that provide a fixed seed to the PRNG.

Review and improve the code of the earliest modules

These modules are in part a learning project for me. It's my very first C++ project, and I barely have a clue what I'm doing. A lot of things are implemented the hard way, with a lot of duplication.

Bad code that gets the job done today is better than beautiful code I will "release one day".
But I'd prefer to have clean code that gets the job done. If you have suggestions how and why to improve aspects of the existing code, they are welcome. You can use this issue for that.

The Fool (0) crashes Arcane

Off by one error somewhere.

I pushed an emergency fix to the server - corrected today's fortune, and made it so the Fool can't be drawn. I will revert the latter change a week after a fix for Arcane is in the library.

Crash on VCVRack Exit.

I ran into this yesterday on Linux. I think it's a relatively easy fix because it's simply freeing the same memory twice. I'll build a version with debugging turned on and maybe I can suggest a patch.

*** Error in `./Rack': double free or corruption (out): 0x0000000002b7e880 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x81679)[0x7fb79f461679]
./Rack(rack::engine::Module::~Module()+0x56)[0x5bb4c6]
/home/kwilliams/.Rack/plugins-v1/AriaSalvatrice/plugin.so(Darius::~Darius()+0x17)[0x7fb79289ca01]
./Rack(rack::app::ModuleWidget::~ModuleWidget()+0x1f)[0x5a285f]
/home/kwilliams/.Rack/plugins-v1/AriaSalvatrice/plugin.so(DariusWidget::~DariusWidget()+0x17)[0x7fb79289c931]
./Rack(rack::app::RackWidget::clear()+0x1b1)[0x5ac923]
./Rack(rack::app::RackWidget::~RackWidget()+0x19)[0x5ae80f]
./Rack(rack::widget::Widget::clearChildren()+0x11d)[0x5b556d]
./Rack(rack::widget::Widget::~Widget()+0x1c)[0x5b5594]
./Rack(rack::widget::ZoomWidget::~ZoomWidget()+0x10)[0x5b48a2]
./Rack(rack::widget::Widget::clearChildren()+0x11d)[0x5b556d]
./Rack(rack::widget::Widget::clearChildren()+0x91)[0x5b54e1]
./Rack(rack::widget::Widget::~Widget()+0x1c)[0x5b5594]
./Rack(rack::app::RackScrollWidget::~RackScrollWidget()+0x10)[0x5b1020]
./Rack(rack::widget::Widget::clearChildren()+0x11d)[0x5b556d]
./Rack(rack::widget::Widget::~Widget()+0x1c)[0x5b5594]
./Rack(rack::app::Scene::~Scene()+0x2f)[0x5a7b1f]
./Rack(rack::App::~App()+0x18)[0x56efd4]
./Rack(rack::appDestroy()+0x15)[0x56f0d1]
./Rack(main+0x509)[0x4e6359]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x7fb79f402505]
./Rack(_start+0x29)[0x4eb1f9]

Build failure on multiple platforms

Build fails on multiple platforms when compiling QuickJS using an environment like the official build system.

Unfortunately, I don't have time today to troubleshoot this further.

I am attaching the build log: aria.log

Relicense to GPL-3.0-only

The simplicity (and formal beauty) of the WTFPL served me well while the collection was a bunch of small hacks, but it's now polished software, I want to avoid having it used commercially without giving back to the community.

Given that RMS is no longer in charge of the FSF, I have insufficient long-term trust that the values of the FSF will remain what they have been in the past.
I do not want to use the "any later version" clause when I have no way to know that future licenses won't become less restrictive.

However, I think I'm gonna keep my re-usable components under the WTFPL so the VCV community can benefit from them in commercial & GPL-incompatible modules.

Just gonna license on a file-by-file basis, with a clear boilerplate which is which on each. In general, module = GPL, re-usable library = WTFPL.

Simply documenting my decision here, as there's nothing to debate, since it's a solo project I get to do whatever I want.

Darius: desync ending a sequence with up or down.

Via private conversation.

can't seem to tell how to reproduce beyond "spamming direction inputs" - it seems to happen if you end the sequence with a "down" then begin the next with an "up" or vice versa

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.