Git Product home page Git Product logo

orfanidisbiquad's Introduction

Hi! I'm Nathan (aka StoneyDSP).

I am a software developer with a strong interest in system-level programming.

StoneyDSP's GitHub stats

I am also a musician making Audio software plugins using a variety of languages and workflows, and also have experience in web development.

StoneyDSP's GitHub stats

In my personal work, I have developed an interest in automating build systems for system-agnostic interoperabilities and cross-compiling routines, with an eye for driving continuous integration/deployment pipelines in modern software development and production workflows.

Tech Stack

Here you will find public repos of my personal research and development of audio plugins using popular frameworks such as JUCE and my own DSP, and more recently; explorations in cross-compiling toolchain technologies (WSL, MSYS2, MinGW, etc) and popular buildsystems (CMake, Meson, Make, Autotools, etc); code bindings to families such as the Win32 API, Linux Standards Base and Unix Single Specification; and usage of the Component Object Model alongside the C and C++ standard libraries, which you may download, compile, use, and study for free (mostly MIT or GPL2/3).

Biquads UBento
noderc base64
OrfanidisBiquad CxxWin
NonLinearFilters modules
AudioPlugin-SVF AudioPlugin
cmodule http2

Much of my code as presented here is something of a personal archive, a series of breadcrumbs through a journey of personal development. I anticipate that my work might mostly be useful as study pieces for other learners on the same path. My projects are typically either something I needed for a specific reason, or something I needed to learn about. The codebase itself strives for a minimal dependency overhead, in favour of longer shelf-life, cross-environment stability, and lower cognitive load. I tend toward traditionalism over modernism, but consider myself flexible and emperically-minded. If you have any suggestions or questions, get in touch - I love to chat code!

Coffee! That's how I get things done!! If you'd like to see me get more things done, please kindly consider buying me a coffee or two!

StoneyDSP on Patreon

orfanidisbiquad's People

Contributors

nathanjhood avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

orfanidisbiquad's Issues

Major code cleanup required!

The entire calculation and conversion of GUI parameters -> Processor parameters is very poorly coded, being taken almost line for line from a Matlab library (link in Readme credits).

Issues:

  • Very heavy amount of memory allocations
  • Indeterminate initialization order of the above
  • Near impossible to debug any numbers due to long strings of calculations in places...
  • Order of operations not respected at all (for seemingly any platform) in original codebase. Output is correct, at least!

Suggestions:

  • Re-create the parameter calculations in another workbench with easier/instantaneous debugging capabilities to validate the actual order of operations
  • Once the above is known, the various calculations may be broken out into separate functions and methods (for example; "DCBA()", "Numerator()", "Denominator()" etc...)
  • Calculations which are repeated very often (for example, "abs(a/b)") may also be split into small functions that simply return the input value with the algorithm applied, thus saving memory allocations in doing so (keep in mind that "return" may make a copy, research needed)
  • Once all of the above is in place and the filter is operating correctly (i.e., the same behaviour as v1.0.3b), the operational numbers can be observed closer with a view to breaking down how the calculations are applied, and further filter types might be possible branching off from here.

Refactor - StoneyDSP Library

The existing implementation is still a little messy; previous attempts at improving things within the codebase have lead to some complexity that is probably not necessary, given that the project is mostly just academic in nature.

Moreover, I've gotten to grips with making API's and modules with C++ and CMake in graceful ways that should now allow me to build my own library/extension for JUCE.

My intention therefore is to begin parting out the relevant source code for modularisation. This is already somewhat considered in some of the design aspects of the C++ used code, but there is currently no larger library or framework supplying these files to (potential) consumers.

The C++ module code shall be supported by a possibly optional CMake API, designed to provide consumers with easy CMake targets to link with in their projects, allowing them to easily pull in the C++ modules from various sources such as vcpkg, or even have system installations of the library, with which to build.

Furthermore, the proposed work would also allow some scope for the creation, development, and testing of a custom vcpkg registry from which the modules could be supplied.

Ideally, this external project should be able to do a CMake find_package(StoneyDSP 1.0.0 CONFIG REQUIRED) and then a target_link_libraries(Biquads PRIVATE stoneydsp::stoneydsp_audio stoneydsp::stoneydsp_graphics), and then only require the standard ProcessBlock() and MainComponent from the JUCE audio plugin template.

I have begun work on the library itself, and will be using this project as a test/example of the library.

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.