27 Commits

Author SHA1 Message Date
Mike Oliphant 0649b4a822 Bump version -> 0.1.4 2024-08-17 11:27:04 -07:00
Mike Oliphant 61bbce1e2a Add "nam" namespace 2024-08-17 11:23:52 -07:00
Mike Oliphant 1dc54bc5f9 Update NeuralAmpModelerCore 2024-08-17 11:17:46 -07:00
Mike Oliphant 40bae2bd87 c++ version -> 17 2024-08-01 12:41:26 -07:00
Mike Oliphant 1ff6dab119 Update LV2 description 2024-05-03 17:50:54 -07:00
Mike Oliphant baff908f93 Update README.md 2024-04-29 12:42:37 -07:00
Mike Oliphant 72fd4a1e3d Make DC blocker coefficient depend on sample rate 2024-04-09 08:00:35 -07:00
Mike Oliphant 1626e74d0e Update README.md 2024-01-31 07:15:04 -08:00
Mike Oliphant d1794e1bbd Update README.md 2024-01-06 07:52:52 -08:00
Mike Oliphant b8c6333955 Merge branch 'main' of https://github.com/mikeoliphant/neural-amp-modeler-lv2 2024-01-06 07:49:52 -08:00
Mike Oliphant 02256b4349 Default x64 optimizations to OFF 2024-01-06 07:49:33 -08:00
Mike Oliphant f07c40c16f Update README.md 2024-01-01 15:36:33 -08:00
Mike Oliphant 5605b03acc Update README.md 2024-01-01 15:33:50 -08:00
Mike Oliphant 43fb036706 Update submodules 2023-11-12 09:20:40 +08:00
Mike Oliphant b40df0945c Merge branch 'main' of https://github.com/mikeoliphant/neural-amp-modeler-lv2 2023-10-24 13:11:17 -07:00
Mike Oliphant 24f03afd69 Add x86_64 to 64-bit check 2023-10-24 13:11:04 -07:00
Mike Oliphant db3603e134 Update build.yml 2023-10-24 10:14:46 -07:00
Mike Oliphant 97cff04114 Enable architecture-specific optimization by default. Added option to turn it off. 2023-10-24 10:09:16 -07:00
Mike Oliphant 067b3236ea remove deb artifact for now 2023-10-19 13:25:30 -07:00
Mike Oliphant 191ae3786e proper indent 2023-10-19 13:11:05 -07:00
Mike Oliphant 2b5a4c9912 Try to add .deb artifact 2023-10-19 13:10:17 -07:00
Mike Oliphant 23200eb566 Add Linux artifact 2023-10-19 12:57:19 -07:00
Mike Oliphant 3434ba0b7d <sigh> 2023-10-19 12:49:31 -07:00
Mike Oliphant 3e9ffee4e7 Update build.yml 2023-10-19 12:45:32 -07:00
Mike Oliphant 3cff8ca37a Update build.yml 2023-10-19 12:40:40 -07:00
Mike Oliphant fcec78fa0f First try at an artifact 2023-10-19 12:36:58 -07:00
Mike Oliphant 34be69df6d Remove AudioDSPTools dependency. Do simple DC blocker instead of HPF. 2023-10-17 12:25:14 -07:00
12 changed files with 65 additions and 40 deletions
+19 -1
View File
@@ -24,6 +24,18 @@ jobs:
cmake --build . --config $BUILD_TYPE -j4
cpack
- name: Upload binary
uses: actions/upload-artifact@v1
with:
name: neural_amp_modeler.lv2-linux-amd64
path: ${{github.workspace}}/build/neural_amp_modeler.lv2
# - name: Upload deb
# uses: actions/upload-artifact@v1
# with:
# name: neural_amp_modeler.lv2-linux-deb-amd64
# path: ${{github.workspace}}/build/*.deb
build-windows:
name: Build Windows
runs-on: windows-latest
@@ -35,5 +47,11 @@ jobs:
- name: Build Plugin
working-directory: ${{github.workspace}}/build
run: |
cmake.exe -G "Visual Studio 17 2022" -A x64 ..
cmake.exe -G "Visual Studio 17 2022" -A x64 -T ClangCL ..
cmake --build . --config=release -j4
- name: Upload artifact
uses: actions/upload-artifact@v1
with:
name: neural_amp_modeler.lv2-win
path: ${{github.workspace}}/build/neural_amp_modeler.lv2
+2 -3
View File
@@ -1,10 +1,10 @@
cmake_minimum_required(VERSION 3.10)
project(NeuralAmpModelerLv2 VERSION 0.1.3)
project(NeuralAmpModelerLv2 VERSION 0.1.4)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED OFF)
set(CMAKE_CXX_EXTENSIONS OFF)
@@ -23,7 +23,6 @@ set(NAM_LV2_ID http://github.com/mikeoliphant/neural-amp-modeler-lv2)
include_directories(SYSTEM deps/eigen)
include_directories(SYSTEM deps/lv2/include)
include_directories(SYSTEM deps/NeuralAmpModelerCore)
include_directories(SYSTEM deps/AudioDSPTools)
include_directories(SYSTEM deps/json)
include_directories(SYSTEM deps/denormal)
+4
View File
@@ -3,6 +3,7 @@
Bare-bones implementation of [Neural Amp Modeler](https://github.com/sdatkinson/neural-amp-modeler) (NAM) models in an LV2 plugin.
**There is no user interface**. Setting the model to use requires that your LV2 host supports atom:Path parameters. Reaper does as of v6.82. Carla and Ardour do. If your favorite LV2 host does not support atom:Path, let them know you want it.
If you are looking for a GUI version, @brummer10 [has one here](https://github.com/brummer10/neural-amp-modeler-ui) that works for Linux and Windows. You may also be interested in the the version shipped with the [MOD Desktop App](https://github.com/moddevices/mod-desktop-app), or my digital pedalboard app [Stompbox](https://github.com/mikeoliphant/StompboxUI).
To get the intended behavior, **you must run your audio host at the same sample rate the model was trained at** (usually 48kHz) - no resampling is done by the plugin.
@@ -44,3 +45,6 @@ Note - you'll have to change the Visual Studio version if you are using a differ
After building, the plugin will be in **build/neural_amp_modeler.lv2**.
### Optimization
If you have a relatively modern x64 processor, you can pass "**&#8209;DUSE_NATIVE_ARCH=ON**" on your cmake command line to enable certain processor-specific optimizations.
Submodule deps/AudioDSPTools deleted from 37f73d9ea6
Vendored
+1 -1
Submodule deps/eigen updated: 7bf2968fed...f78c37f0af
Vendored
+1 -1
Submodule deps/lv2 updated: dbdbe3e518...e9d9432874
+3 -3
View File
@@ -39,11 +39,11 @@
opts:supportedOption <http://lv2plug.in/ns/ext/buf-size#maxBlockLength>;
rdfs:comment """
An LV2 implementation of Neural Amp Modeler.
LV2 plugin for Neural Amp Modeler machine learning guitar amplifier simulation models
NAM accepts Neural Amp Modeler .nam files.
Based on the Neural Amp Modeler Core codebase: https://github.com/sdatkinson/NeuralAmpModelerCore
A large collection of .nam files is available at https://tonehunt.org/
A large collection of .nam models is available at https://tonehunt.org
""";
patch:writable <@NAM_LV2_ID@#model>;
+11 -10
View File
@@ -17,24 +17,25 @@ set(NAM_SOURCES ../deps/NeuralAmpModelerCore/NAM/activations.h
../deps/NeuralAmpModelerCore/NAM/convnet.cpp
../deps/NeuralAmpModelerCore/NAM/convnet.h)
set(DSP_SOURCES ../deps/AudioDSPTools/dsp/dsp.h
../deps/AudioDSPTools/dsp/dsp.cpp
../deps/AudioDSPTools/dsp/RecursiveLinearFilter.h
../deps/AudioDSPTools/dsp/RecursiveLinearFilter.cpp)
add_library(neural_amp_modeler MODULE ${SOURCES} ${NAM_SOURCES} ${DSP_SOURCES})
add_library(neural_amp_modeler MODULE ${SOURCES} ${NAM_SOURCES})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SOURCES})
source_group(NAM ${CMAKE_CURRENT_SOURCE_DIR} FILES ${NAM_SOURCES})
source_group(dsp ${CMAKE_CURRENT_SOURCE_DIR} FILES ${DSP_SOURCES})
option(DISABLE_DENORMALS "Disable floating point denormals" ON)
if(DISABLE_DENORMALS)
if (DISABLE_DENORMALS)
add_definitions(-DDISABLE_DENORMALS)
endif(DISABLE_DENORMALS)
endif (DISABLE_DENORMALS)
target_compile_features(neural_amp_modeler PUBLIC cxx_std_17)
if (CMAKE_SYSTEM_PROCESSOR MATCHES "(amd64)|(AMD64)|(x86_64)")
option(USE_NATIVE_ARCH "Enable architecture-specific optimizations" OFF)
if (USE_NATIVE_ARCH)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=x86-64-v3")
message("Enabling -march=x86-64-v3")
endif (USE_NATIVE_ARCH)
endif ()
set_target_properties(neural_amp_modeler
PROPERTIES
+1 -1
View File
@@ -96,7 +96,7 @@ LV2_SYMBOL_EXPORT const LV2_Descriptor* lv2_descriptor(uint32_t index)
{
if (index == 0) {
// Turn on fast tanh approximation
activations::Activation::enable_fast_tanh();
nam::activations::Activation::enable_fast_tanh();
return &descriptor;
}
+17 -13
View File
@@ -24,10 +24,6 @@ namespace NAM {
{
this->sampleRate = sampleRate;
const double highPassCutoffFreq = 5.0;
const recursive_linear_filter::HighPassParams highPassParams(sampleRate, highPassCutoffFreq);
mHighPass.SetParams(highPassParams);
// for fetching initial options, can be null
LV2_Options_Option* options = nullptr;
@@ -92,7 +88,7 @@ namespace NAM {
auto msg = static_cast<const LV2LoadModelMsg*>(data);
auto nam = static_cast<NAM::Plugin*>(instance);
::DSP* model = nullptr;
nam::DSP* model = nullptr;
LV2SwitchModelMsg response = { kWorkTypeSwitch, {}, {} };
LV2_Worker_Status result = LV2_WORKER_SUCCESS;
@@ -111,7 +107,7 @@ namespace NAM {
{
lv2_log_trace(&nam->logger, "Staging model change: `%s`\n", msg->path);
model = get_dsp(msg->path).release();
model = nam::get_dsp(msg->path).release();
// Pre-run model to ensure all needed buffers are allocated in advance
if (const int32_t numSamples = nam->maxBufferSize)
@@ -251,8 +247,6 @@ namespace NAM {
}
}
float** outputPtrs = &ports.audio_out;
float modelLoudnessAdjustmentDB = 0;
if (currentModel != nullptr)
@@ -260,9 +254,6 @@ namespace NAM {
currentModel->process(ports.audio_out, ports.audio_out, n_samples);
currentModel->finalize_(n_samples);
// Apply a high pass filter at 5Hz to eliminate any DC offset
outputPtrs = mHighPass.Process(outputPtrs, 1, n_samples);
if (currentModel->HasLoudness())
{
// Normalize model to -18dB
@@ -282,7 +273,7 @@ namespace NAM {
// do very basic smoothing
level = (.99f * level) + (.01f * desiredOutputLevel);
ports.audio_out[i] = outputPtrs[0][i] * outputLevel;
ports.audio_out[i] = ports.audio_out[i] * outputLevel;
}
outputLevel = level;
@@ -293,9 +284,22 @@ namespace NAM {
for (unsigned int i = 0; i < n_samples; i++)
{
ports.audio_out[i] = outputPtrs[0][i] * level;
ports.audio_out[i] = ports.audio_out[i] * level;
}
}
float dcBlockCoefficient = 1 - (220.0 / sampleRate);
for (unsigned int i = 0; i < n_samples; i++)
{
float dcInput = ports.audio_out[i];
// dc blocker
ports.audio_out[i] = ports.audio_out[i] - prevDCInput + dcBlockCoefficient * prevDCOutput;
prevDCInput = dcInput;
prevDCOutput = ports.audio_out[i];
}
}
uint32_t Plugin::options_get(LV2_Handle, LV2_Options_Option*)
+5 -5
View File
@@ -22,7 +22,6 @@
#include <lv2/units/units.h>
#include <NAM/dsp.h>
#include <dsp/RecursiveLinearFilter.h>
#define PlUGIN_URI "http://github.com/mikeoliphant/neural-amp-modeler-lv2"
#define MODEL_URI PlUGIN_URI "#model"
@@ -44,12 +43,12 @@ namespace NAM {
struct LV2SwitchModelMsg {
LV2WorkType type;
char path[MAX_FILE_NAME];
::DSP* model;
nam::DSP* model;
};
struct LV2FreeModelMsg {
LV2WorkType type;
::DSP* model;
nam::DSP* model;
};
class Plugin {
@@ -71,9 +70,10 @@ namespace NAM {
LV2_Log_Logger logger = {};
LV2_Worker_Schedule* schedule = nullptr;
::DSP* currentModel = nullptr;
nam::DSP* currentModel = nullptr;
std::string currentModelPath;
recursive_linear_filter::HighPass mHighPass;
float prevDCInput = 0;
float prevDCOutput = 0;
Plugin();
~Plugin();