{"id":15717619,"url":"https://github.com/rinoreyns/crossplatformvsthost","last_synced_at":"2025-08-22T07:09:25.835Z","repository":{"id":37003817,"uuid":"487215838","full_name":"RinoReyns/CrossPlatformVstHost","owner":"RinoReyns","description":"Cross-Platform Vst Host","archived":false,"fork":false,"pushed_at":"2025-04-20T09:21:57.000Z","size":1781,"stargazers_count":30,"open_issues_count":2,"forks_count":1,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-20T09:52:57.053Z","etag":null,"topics":["android","audio","audio-endpoint","cpp","cross-platform","linux","mac-osx","vst-host","vst3-host","windows"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RinoReyns.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-04-30T07:49:30.000Z","updated_at":"2025-03-16T10:56:21.000Z","dependencies_parsed_at":"2024-11-16T13:17:09.585Z","dependency_job_id":"c51aa128-c694-4cb0-9c10-2aa4f9a0c875","html_url":"https://github.com/RinoReyns/CrossPlatformVstHost","commit_stats":{"total_commits":107,"total_committers":2,"mean_commits":53.5,"dds":"0.028037383177570097","last_synced_commit":"68fa6817b0a5af9a9b438ff803e0df2ce38cabf4"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RinoReyns%2FCrossPlatformVstHost","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RinoReyns%2FCrossPlatformVstHost/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RinoReyns%2FCrossPlatformVstHost/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RinoReyns%2FCrossPlatformVstHost/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RinoReyns","download_url":"https://codeload.github.com/RinoReyns/CrossPlatformVstHost/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253746975,"owners_count":21957665,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","audio","audio-endpoint","cpp","cross-platform","linux","mac-osx","vst-host","vst3-host","windows"],"created_at":"2024-10-03T21:50:46.966Z","updated_at":"2025-05-12T13:27:02.476Z","avatar_url":"https://github.com/RinoReyns.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Coverage Status](https://coveralls.io/repos/github/RinoReyns/CrossPlatformVstHost/badge.png?branch=main)](https://coveralls.io/github/RinoReyns/CrossPlatformVstHost?branch=main)\n\n\u003cp align=\"left\"\u003e\n    \u003cimg alt=\"ViewCount\" src=\"https://views.whatilearened.today/views/github/CrossPlatformVstHost/github-clone-count-badge.svg\"\u003e\n\u003c/p\u003e\n\n[![Build Vst Host](https://github.com/RinoReyns/CrossPlatformVstHost/actions/workflows/vst_host_ci.yml/badge.svg?branch=main)](https://github.com/RinoReyns/CrossPlatformVstHost/actions/workflows/vst_host_ci.yml)\n\n# Cross-Platform Vst Host\n\n## General Idea\nSince I found that there are not many easy-to-use command-line based VST Hosts, and some of them are no longer supported,\n I always wanted to create my own cmd VST Host. Unfortunately, I also found that samples provided in VST 3 SDK are way \nto complicated for me to use, so I decided to created my own easy-to-use repository. Thus, the main goal of this project\n is to learn how to work with VST 3 SDK, how to create custom VST Host and handler VST 3 Plugins. During the work on \ncmd-based VST Host I found out that it would be also a good idea to learn how to read audio from audio endpoint on \ndifferent operation systems like Windows, Linux, MacOS and Android and process audio in real time with VST Host. So that \nis why this repository was created. I know that it will take a lot of work but it will also be a good way to learn about\n everything that I'm interested in. My idea here was also to use as many available elements as it is possible.\n\n## How to Build\n\n1. Windows \u0026 Linux\n    ```\n    git submodule update --init --recursive\n    pip install -r VstHost_Python/requirements.txt\n    mkdir build\n    cd build\n    cmake ../VstHost_VisualC++ -DCMAKE_BUILD_TYPE=Release -DBUILD_GMOCK=1\n    cd ..\n    cmake --build build --config Release -j 8\n    ```\n2. Mac OS (Intel)\n    ```\n    git submodule update --init --recursive\n    pip install -r VstHost_Python/requirements.txt\n    brew install doxygen\n    mkdir build\n    cd build\n    cmake -G Xcode ../VstHost_VisualC++ -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=gcc -DBUILD_GMOCK=1\n    cd ..\n    cmake --build build --config Release -j 8 --resolve-package-references on\n    ```\n3. Mac OS (ARM)\n\n   As a first step you have to install Xcode or/and Command Line Tools for Xcode. If you see following or similar error `XCode 9 or newer is required`, please run command below which should help with the issue based on [stackoverflow thread](https://stackoverflow.com/questions/41380900/cmake-error-no-cmake-c-compiler-could-be-found-using-xcode-and-glfw).\n   \u003e sudo xcode-select --reset\n   ```\n   arch -arm64 brew install cmake\n   brew install doxygen\n   git submodule update --init --recursive\n   pip install -r VstHost_Python/requirements.txt\n   mkdir build\n   cd build\n   cmake ../VstHost_VisualC++ -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=gcc -DBUILD_GMOCK=1\n   cd ..\n   cmake --build build --config Release -j 8 --resolve-package-references on\n   ```\n4. Android\n    ```\n    NOTE:\n    Following instruction is made for Linux enviroment. However, steps for any OS should be similar.\n    1. Download Android NDK and unzip in the chosen location. (https://developer.android.com/ndk/downloads).\n    \n    2. Set environmental variable for Android NDK as foloow:\n       \n       \u003e export ANDROID_NDK_PATH=/path/to/android/ndk/main/folder\n    \n    3. Build VST Host for chosen architecture:\n       a. armeabi-v7a:\n         \u003e cmake \"../VstHost_VisualC++\" -B build_armeabi-v7a -G \"Unix Makefiles\" -DCMAKE_BUILD_TYPE=RELEASE -DANDROID_PLATFORM=android-28 -D ANDROID_ABI=armeabi-v7a -DANDROID_BUILD=True\n         \u003e cd build_armeabi-v7a\n         \u003e $ANDROID_NDK_PATH/prebuilt/linux-x86_64/bin/make\n       \n       b. arm64-v8a:\n         \u003e cmake \"../VstHost_VisualC++\"  -B build_arm64-v8a -G \"Unix Makefiles\" -DCMAKE_BUILD_TYPE=RELEASE -DANDROID_PLATFORM=android-28 -D ANDROID_ABI=arm64-v8a -DANDROID_BUILD=True\n         \u003e cd build_arm64-v8a\n         \u003e $ANDROID_NDK_PATH/prebuilt/linux-x86_64/bin/make\n       \n       c. build_x86:\n         \u003e cmake \"../VstHost_VisualC++\" -B build_x86 -G \"Unix Makefiles\" -DCMAKE_BUILD_TYPE=RELEASE -DANDROID_PLATFORM=android-28 -D ANDROID_ABI=x86 -DANDROID_BUILD=True\n         \u003e cd build_x86\n         \u003e $ANDROID_NDK_PATH/prebuilt/linux-x86_64/bin/make\n       \n       d. build_x86_64:\n         \u003e cmake \"../VstHost_VisualC++\" -B build_x86_64 -G \"Unix Makefiles\" -DCMAKE_BUILD_TYPE=RELEASE -DANDROID_PLATFORM=android-28 -D ANDROID_ABI=x86_64 -DANDROID_BUILD=True\n         \u003e cd build_x86_64\n         \u003e $ANDROID_NDK_PATH/prebuilt/linux-x86_64/bin/make\n\n    4. Build Android Demo App that uses VST Host lib\n       a. Copy necessery dependencess. In the example below dependeces for all architectures were copied. Also note that\n          in the example VST plugin has been copied from \"build_x86_64\" due to the fact that Instrumentation test are \n          executed in androdi simulater on regular CPU.\n   \n         \u003e mkdir VstHost_Android/AndroidPack\n         \u003e cp -rv build_armeabi-v7a/bin/Release/AndroidPack/ VstHost_Android/\n         \u003e cp -rv build_arm64-v8a/bin/Release/AndroidPack/ VstHost_Android/\n         \u003e cp -rv build_x86/bin/Release/AndroidPack/ VstHost_Android/\n         \u003e cp -rv build_x86_64/bin/Release/AndroidPack/ VstHost_Android/\n         \u003e cp -rv build_x86_64/VST3/Release VstHost_Android/app/src/main/assets\n         \u003e cp -v VstHost_VisualC++/modules/UnitTests/data/sine_440.wav VstHost_Android/app/src/main/assets/\n         \u003e cp -v VstHost_VisualC++/modules/UnitTests/data/sine_440_output_ref.wav VstHost_Android/app/src/main/assets/\n       \n       b. Build Android App\n         \u003e cd VstHost_Android\n         \u003e chmod +x gradlew\n       \n       c. Run Intrumentation Test\n         \u003e ./gradlew connectedCheck\n    ```\n## Examples of usage\n  1. Print help:\n    ```\n     VstHostTool.exe --help\n    ```\n  2. Dump an empty configuration needed to run the tool:\n    ```VstHostTool.exe -dump_app_config -config config.json```\n  3. Dump an empty configuration for VST plugin/plugins that will be used be.\n    ```VstHostTool.exe -dump_plugins_config -config config.json```\n  4. Run Audio Processing with Vst Plugin.\n    ```VstHostTool.exe -config config.json```\n\n## Features list\n1. **Platform Agnostic Features**\n    - **Implemented**:\n      - [x] CMake based project\n      - [x] Use submodules\n      - [x] Arg Parser\n      - [X] Json Reader \n      - [x] Treat Warnings as Errors\n      - [x] VST Host library in C++\n      - [x] VST Host Offline Tool in C++\n      - [x] Unit Test for library and offline tool in C++\n      - [x] CI for each configuration (Windows, Linux, MacOs, Android)\n      - [x] VST Host Library with C api that allows to use it in e.g. Python\n      - [x] Basic python and android unit test for C api\n      - [x] Allow to use multiple plugins and configs for them\n      - [x] Generate Documentation\n      - [x] AudioProcessing Class that can wrap different non-vst algorithms\n      - [x] Cross-Platform Audio Endpoint Render-Capture with RtAudio (Validated only for Windows)\n      - [x] Create and pass config for AudioProcessing Class\n    - **TODO**:\n      - [ ] Implement simple Vst plugin that allows to process data in real-time (e.g. context buffering). Start from \n      delay validation implemented in VST SDK. \n      - [ ] Enable streaming processing (one frame in, one frame out)\n      - [ ] Integrate Open Vino to process audio with AI based Audio Algorithms\n\t  - [ ] Enable Apple Silicon AI acceleration\n      - [ ] Add more advanced python-based Vst Host Lib utilization\n      - [ ] Add more UT for python and Android\n      - [ ] Integrate better wave reader\n      - [ ] Build solution for ARM\n      - [ ] Handle different audio formats e.g. sampling rate, bit depth etc.\n      - [ ] Validate RtAudio for different OSes\n      - [ ] Move *vst_host_config_* from *WaveProcessingPipeline* class to *AudioProcessingVstHost* class.\n      - [ ] Rename *VstHostTool* to *AudioProcessingTool*\n      - [ ] Create Baseclass for processing modules and extract common parameters\n\n1. Android\n    - TODO:\n      - [ ] Add endpoint reader\n      - [ ] Add platform specific offline tool\n\n\n## Credits (repositories used in project)\n1. [VST 3 SDK](https://github.com/steinbergmedia/vst3sdk)\n1. [Google Test](https://github.com/google/googletest)\n1. [Logger](https://github.com/amrayn/easyloggingpp)\n1. [Arg Parser](https://github.com/p-ranav/argparse)\n1. [Wave Reader](https://github.com/audionamix/wave)\n1. [C ++ Json Handler](https://github.com/nlohmann/json)\n1. [Windows Endpoint Reader](https://github.com/mofo7777/Stackoverflow/tree/master/WasapiCapture)\n1. [Implementation of audio filters in C](https://github.com/adis300/filter-c)\n1. [Real Timie Audio Render and Capture](https://github.com/thestk/rtaudio)\n\nVST is a trademark held by Steinberg Media Technologies, GMBH.\n\n## License\nThis project is licensed under the terms of the GNU GPLv3 license. Moreover, it is a derivative work of the original \nVST 3 SDK. However, I don't redistribute any of the original source code.\n\n## Useful links\n1. [How to read data from audio endpoint (Windows, Linux, MacOS)?](https://github.com/MicrosoftDocs/azure-docs/blob/main/articles/cognitive-services/Speech-Service/how-to-select-audio-input-devices.md)\n2. [Audio Capture on Windows](https://graphics.stanford.edu/~mdfisher/Code/Engine/AudioCapture.cpp)\n3. [Treat warnings as errors on linux](https://stackoverflow.com/questions/3378560/how-to-disable-gcc-warnings-for-a-few-lines-of-code)\n4. [More info about treating warnings as errors](https://www.foonathan.net/2018/10/cmake-warnings/)\n5. [How to build c++ code for Android?](https://stackoverflow.com/questions/67729247/build-cmake-library-without-android-studio-by-command-line-or-gui/67729248#67729248)\n6. [How to use c++ .so on Android?](https://github.com/android/ndk-samples/tree/master/hello-libs)\n7. [Rendering an audio stream on windows](https://docs.microsoft.com/en-us/windows/win32/coreaudio/rendering-a-stream)\n8. [XCode Dependencies Installation](https://stackoverflow.com/questions/41380900/cmake-error-no-cmake-c-compiler-could-be-found-using-xcode-and-glfw)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frinoreyns%2Fcrossplatformvsthost","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frinoreyns%2Fcrossplatformvsthost","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frinoreyns%2Fcrossplatformvsthost/lists"}