Git Product home page Git Product logo

stoneydsp / stoneydsp Goto Github PK

View Code? Open in Web Editor NEW
0.0 0.0 1.0 1.04 MB

The StoneyDSP library for JUCE.

Home Page: https://stoneydsp.com

License: Other

CMake 80.57% C 2.51% C++ 15.15% Objective-C++ 1.46% JavaScript 0.14% TypeScript 0.18%
audio ci-cd cmake continuous-deployment continuous-integration cpack cpp ctest digital-signal-processing dsp juce juce-framework juce-modules juce-plugins nodejs pluginval stoneydsp typescript

stoneydsp's Introduction

StoneyDSP

The StoneyDSP audio, graphics, and web library for JUCE.

Latest release: v.0.0.1-rc
Latest development: Formats:
windows-latest VST3, Standalone
ubuntu-latest LV2, VST3, Standalone
macos-latest AU, VST3, Standalone
macos-arm-latest AU, VST3, Standalone

StoneyDSP


Hi! I'm Nathan (aka StoneyDSP).

I am making a C++ library extension for the JUCE framework for building audio and graphical software applications.

You may use this library to build your own audio software with on MIT license. You must also respect the JUCE license system.

The primary goal here is/will be to provide some additional DSP (digital signal processing) classes, utilities, and functions of specific interests; the StoneyDSP library aims to be relatively approachable to builders with firm backgrounds in patching together new ideas from modular pieces of software or hardware, by using familiar conventions and abstractions and aiming to provide a low cognitive overhead.

StoneyDSP is not an audio plugin manufacturer or vendor explicitly, but aims to provide a useful set of coding tools that can be used to create interesting audio and graphical effects with, specifically targeting the JUCE application framework.

To this end, JUCE is the standard that the StoneyDSP library must follow closely; in order to guarantee a solid and familiar interface, our codebase intentionally mimics the JUCE project in lots of places, taking JUCE as our leading example. This also helps us minimize our own dependencies on JUCE itself, thus keeping our project as lightweight and portable as possible (we aim to be buildable without even needing to link with juce_core, ideally).

Familiar base functionality aside, builders will find useable, modular DSP classes with interfaces reminiscent of the many popular "rack" modular environments, accompanied by strong documentation and plenty working examples. Being that StoneyDSP is not affiliated with JUCE itself in any way, we are also afforded all the scope we like for investigating various ideas that JUCE itself might not support directly.

...we are seeking to ease the flow of creativity within the creation of audio software itself...

We are still in the early days of construction, so please consider bookmarking and keeping on eye on development!

This is something that I am working on during my free time, so progress may be sporadic; however, I/we already have a lot of plugins, instruments, and interesting DSP up and running behind the scenes, and even more in working prototypes and breadboards. There are also various other types of software and tooling currently under construction that will likely appeal to visitors of this project.

...in other words, plenty of reasons to stay tuned!

Meanwhile, a small selection of older audio plugins are available as source code under permissive open-source licenses, much of which shall be re-contextualized to make use of the StoneyDSP audio and graphics libraries in due course, and may be found here:

Biquads OrfanidisBiquad
NonLinearFilters BiLinearEQ
AudioPlugin-SVF AudioPlugin

*we = just me, for now!

The StoneyDSP Library

Copyright (C) 2024 Nathan J. Hood [email protected]

THIS SOURCE CODE IS PROVIDED 'AS-IS', WITHOUT ANY EXPRESS OR IMPLIED WARRANTY. IN NO EVENT WILL THE AUTHOR BE HELD LIABLE FOR ANY DAMAGES ARISING FROM THE USE OF THIS SOFTWARE.

Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:

  1. The origin of this source code must not be misrepresented; you must not claim that you wrote the original source code. If you use this source code in a product, an acknowledgment in the product documentation would be appreciated but is not required.

  2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original source code.

  3. This notice may not be removed or altered from any source distribution.

For more information, visit the website: www.stoneydsp.com

FULL STONEYDSP TERMS:

stoneydsp's People

Contributors

dependabot[bot] avatar nathanjhood avatar

Watchers

 avatar

Forkers

nathanjhood

stoneydsp's Issues

Preview/v0.0.1-beta

Chore

Describe the chore

  • StoneyDSP::stoneydsp_core
  • StoneyDSP::stoneydsphelper
  • CI/CD artefact caching
  • vcpkg integration

Additional context

#14

CI/CD - plugin validation step

Chore

Describe the chore

Currently establishing a set of validation rules for our project v0.1 baseline.

Command-line tools are easy enough to test on CI/CD. However, this is an audio library catering for vst3 and other plugin formats. Testing these on CI/CD therefore requires a slightly different approach.

Fortunately, we have pluginval for that.

Need to implement a pluginval step for each platform. Ideally, the command shall be as identical as possible for all workflow runs, so that we can re-consolidate all platform runs into a single workflow file later on.

Additional context

Pamplejuce implementation

project organization

Chore

Describe the chore

The project root folder has become quite expansive, meaning new visitors are immediately faced with a lot of various content without much context or direction.

One root cause of the issue is that there are mixed traces of differing project layouts; in part, we have followed the Unix-y C-like approach of having things like /lib and share, which is a current personal preference due to it's universal frame of reference.

However, the underlying tooling such as JUCE and vcpkg take much more customary approaches: JUCE's C++ module support via CMake does not actually allow splitting C++ units between seperate /src and /include paths - the headers and sources must instead be co-located on disk. Their suggestion to use a /modules dir makes sense in this context, not to mention that it has been adopted by many users already.

I am happy to move all CMake into extras/Build/CMake/ as per the JUCE project layout, thus ensuring a single source of truth for our CMake module requirements, consumptions, and distributions. That will eradicate the /share dir.

I am happy to actually open a new /tests dir for our StoneyDSP CI/CD and CTest stuff, as this is a good reference for our users, just like JUCE's tests are a good reference for us. The naming is clear enough as to actually have some merit in it's existence, rather than it's removal.

Not sure what to do about the Typescript/Javascript/NodeJS interface under /lib, particularly since this is not likely to progress further in the current development cycle. At time of writing, I suggest probably leaving this alone for the moment, but once implemented it will probably likewise want to become a new CMake target and also be placed where it can be bundled safely for distro, a la the CMake modules.

The above also applied to our /public and /_layouts folders, and some various NodeJS-related files lingering around the root folder. These are probably all causing the most clutter and obfuscation, to my mind; perhaps, then, we should enhance the priority level of getting these pieces in play, rather than trying to ignore them until later on? There is a fair bit of documentation, not to mention CI/CD, intended to go along with that stuff... and also the question mark which is both cmake-js and the stoneydsp_web module. Quite a blocker...

I am 50/50 about the /.vscode stuff - it's not supposed to be some sort of requirement, just more of a helper. Could be pushed to one side and referenced in the docs as some helper files... maybe. Certainly it makes more sense to implement much of that stuff as CMake presets instead...

Strategy

Perhaps, then, we should make the initial changes which have no blockers, ensure the CI/CD is passing with this configuration, and then make another assessment of the condition of this task at that point.

If necessary, we can either:

  • choose to enhance the priority of the entire web/NodeJS interface
  • choose to move those files to one side for the moment
  • choose to proceed to other tasks without changing anything else here, for the time being

GitHub actions - osx workflows

Chore

Describe the chore

Bit of a nightmare trying to get just v.0.01 off the ground for osx platforms. A summary of some issues:

  • The runner for 'macOS' seems to be an ARM-based architecture, and PampleJuce's workflow sets CMAKE_OSX_ARCHITECTURES=arm64;x86_64; accordingly. This seems to be no issue for JUCE projects by themselves.
  • The vcpkg workflow action step fails when target triplet is x64-osx - using arm64-osx seems to correct things and the build succeeds
  • The linker step fails on all osx builds when trying to link our stoneydsp_web module's CURL-based functions to libcurl, with output suggesting that the linked libcurl is - frustratingly, always - the wrong architecture for osx triplets.
  • target_link_libraries(stoneydsp_web INTERFACE CURL::libcurl) picks up the x64-osx libcurl, fails, and the output suggests that we need the arm64-osx variant. Directly linking to the arm64-osx lib using various hacky tricks and/or linker flags allows us to force the previously-requested library variant, but this also fails, with the output here countering the previous advice by requesting the x64-osx library instead! So, it seems to be impossible to satisfy this
  • I had considered playing even more dirty by trying just a #pragma comment (lib, "curl") and seeing if the linker can just intelligently suss things out; however, the windows workflow is capable of taking close to one hour to fully complete (aghh...)
  • Since the intended CURL functionality is not necessarily critical to proving that the utmost essential parts of StoneyDSP are building, I have decided to sacrifice the stoneydsp_web module and the CurlConsoleApp example by removing it from this initial release, and will place it on a new wip or feature branch for later merging, pending further discovery and development
  • Having removed the above for the time being, the entire yaml file is now passing validation successfully; however, the macOS workflow is failing to cache it's build using sccache, producing the following output:
Non-cacheable reasons:
multiple different -arch, and SCCACHE_CACHE_MULTIARCH not set      47
  • This is clearly because of this mis-mash of architectures on osx, the same thing causing the libcurl linkage issues.
  • The macOS workflow is forgivingly fast enough in it's work that I am happy raising sperate issues for resolving the multi-arch handling of osx triplets and the setting of SCCACHE_CACHE_MULTIARCH, and the concurrent creation of the stoneydsp_web and CurlConsoleApp parts of the project

Additional context

This issue will be linked to PR's for resolving the multi-arch handling of osx triplets and the setting of SCCACHE_CACHE_MULTIARCH.

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.