You are not logged in.
Pages: 1
Hey,
I been trying to build Ardour with vst support but I get this error message:
scons BUILD_SSE_OPTIMIZATIONS=1 USE_SSE_EVERYWHERE=0 VST=1 VSTPATH=/path/of/fst-1.7 PREFIX=/usr KSI=no DEBUG=yes
scons: Reading SConscript files ...
Checking for C header file alsa/asoundlib.h... yes
*******************************
detected DIST_TARGET = i686
*******************************
Checking for internationalization support ...
Checking for C header file libintl.h... yes
Checking for C header file /System/Library/Frameworks/CoreAudio.framework/Versions/A/Headers/CoreAudio.h... no
Checking for C function posix_memalign()... yes
Checking for C function getmntent()... yes
Checking for jack_client_open()...ok
Checking for jack_recompute_total_latencies()...ok
Checking for C header file wordexp.h... yes
Checking for C header file sys/vfs.h... yes
Checking for executable gtk-config ...yes
scons: done reading SConscript files.
scons: Building targets ...
scons: `ardour.rc' is up to date.
scons: `libs/soundtouch/libsoundtouch.a' is up to date.
scons: `libs/sigc++/libsigc++.a' is up to date.
scons: `libs/pbd/libpbd.a' is up to date.
scons: `libs/midi++/libmidi++.a' is up to date.
scons: `libs/ardour/libardour.a' is up to date.
scons: `libs/gtkmm/config.h.in' is up to date.
scons: `libs/gtkmm/config.h' is up to date.
scons: `libs/gtkmm/libgtkmm.a' is up to date.
scons: `libs/gtkmmext/libgtkmmext.a' is up to date.
scons: `libs/gtk-canvas/libgtk-canvas.a' is up to date.
g++ -o gtk_ardour/ardour.bin gtk_ardour/about.o gtk_ardour/add_route_dialog.o gtk_ardour/ardour_dialog.o gtk_ardour/ardour_message.o gtk_ardour/ardour_ui.o gtk_ardour/ardour_ui2.o gtk_ardour/ardour_ui_dependents.o gtk_ardour/ardour_ui_dialogs.o gtk_ardour/ardour_ui_ed.o gtk_ardour/ardour_ui_mixer.o gtk_ardour/audio_clock.o gtk_ardour/audio_time_axis.o gtk_ardour/automation_gain_line.o gtk_ardour/automation_line.o gtk_ardour/automation_pan_line.o gtk_ardour/automation_time_axis.o gtk_ardour/axis_view.o gtk_ardour/canvas-imageframe.o gtk_ardour/canvas-ruler.o gtk_ardour/canvas-simpleline.o gtk_ardour/canvas-simplerect.o gtk_ardour/canvas-waveview.o gtk_ardour/connection_editor.o gtk_ardour/crossfade_edit.o gtk_ardour/crossfade_view.o gtk_ardour/curvetest.o gtk_ardour/default_keys.o gtk_ardour/editing.o gtk_ardour/editor.o gtk_ardour/editor_audiotrack.o gtk_ardour/editor_canvas_events.o gtk_ardour/editor_cursors.o gtk_ardour/editor_edit_groups.o gtk_ardour/editor_export_audio.o gtk_ardour/editor_hscroller.o gtk_ardour/editor_imageframe.o gtk_ardour/editor_keyboard.o gtk_ardour/editor_keys.o gtk_ardour/editor_markers.o gtk_ardour/editor_mixer.o gtk_ardour/editor_mouse.o gtk_ardour/editor_nudge.o gtk_ardour/editor_ops.o gtk_ardour/editor_region_list.o gtk_ardour/editor_route_list.o gtk_ardour/editor_rulers.o gtk_ardour/editor_scrub.o gtk_ardour/editor_selection_list.o gtk_ardour/editor_tempodisplay.o gtk_ardour/editor_timefx.o gtk_ardour/export_dialog.o gtk_ardour/gain_automation_time_axis.o gtk_ardour/gain_meter.o gtk_ardour/ghostregion.o gtk_ardour/grouped_buttons.o gtk_ardour/gtk-custom-hruler.o gtk_ardour/gtk-custom-ruler.o gtk_ardour/gtkscrolledwindow.o gtk_ardour/imageframe_socket_handler.o gtk_ardour/imageframe_time_axis.o gtk_ardour/imageframe_time_axis_group.o gtk_ardour/imageframe_time_axis_view.o gtk_ardour/imageframe_view.o gtk_ardour/io_selector.o gtk_ardour/keyboard.o gtk_ardour/keyboard_target.o gtk_ardour/library_ui.o gtk_ardour/location_ui.o gtk_ardour/main.o gtk_ardour/marker.o gtk_ardour/marker_time_axis.o gtk_ardour/marker_time_axis_view.o gtk_ardour/marker_view.o gtk_ardour/meter_bridge.o gtk_ardour/meter_bridge_strip.o gtk_ardour/mixer_strip.o gtk_ardour/mixer_ui.o gtk_ardour/new_session_dialog.o gtk_ardour/option_editor.o gtk_ardour/opts.o gtk_ardour/pan_automation_time_axis.o gtk_ardour/panner2d.o gtk_ardour/panner_ui.o gtk_ardour/playlist_selector.o gtk_ardour/plugin_selector.o gtk_ardour/plugin_ui.o gtk_ardour/prompter.o gtk_ardour/public_editor.o gtk_ardour/redirect_automation_line.o gtk_ardour/redirect_automation_time_axis.o gtk_ardour/redirect_box.o gtk_ardour/region_editor.o gtk_ardour/region_gain_line.o gtk_ardour/region_selection.o gtk_ardour/regionview.o gtk_ardour/route_params_ui.o gtk_ardour/route_redirect_selection.o gtk_ardour/route_ui.o gtk_ardour/selection.o gtk_ardour/send_ui.o gtk_ardour/streamview.o gtk_ardour/tempo_dialog.o gtk_ardour/time_axis_view.o gtk_ardour/time_axis_view_item.o gtk_ardour/time_selection.o gtk_ardour/utils.o gtk_ardour/version.o gtk_ardour/visual_time_axis.o gtk_ardour/vst_pluginui.o -Llibs/ardour -Llibs/gtkmmext -Llibs/midi++ -Llibs/pbd -Llibs/gtkmm -Llibs/sigc++ -Llibs/gtk-canvas -L/usr/lib -Llibs/soundtouch -lardour -lgtkmmext -lmidi++ -lpbd -lgtkmm -lsigc++ -lgtk-canvas -lart_lgpl_2 -lasound -lsndfile -llrdf -lgtk -lgdk -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm -lxml2 -lz -lm -lsoundtouch -lraptor -lcurl -lssl -lcrypto -ldl -lxslt -lxml2 -lz -lm -lsamplerate -ljack -lfst -lwine -lwine_unicode
/usr/bin/ld: cannot find -lfst
collect2: ld returned 1 exit status
scons: *** [gtk_ardour/ardour.bin] Error 1
scons: building terminated because of errors.
Does anyone know what /usr/bin/ld: cannot find -lfst means?
Thank you in advance.
Offline
"/usr/bin/ld: cannot find -lfst" means that it didn't found libfst.
You need to install fst before building ardour with fst support. There's no package so you'll need to build it: http://linuxaudiosystems.com/fst/
Offline
I do have fst-1.7 installed and I use it as a standalone to run vst programs.
some vst plugins needs a vsthost that's why I want to build Ardour with vst support.
where would I find the libfst?
Thanx Snowman. Me being from Toronto, I should be Snowman2 after the storm a few days ago.
Offline
Where did you installed fst? I would assume that it would come with fst.
Search your system for it:
# updatedb
# locate libfst
Offline
Hey Snowman, thanx again.
I looked at the Sconscript in Ardour and the one from the fst-1.7. I then edit the fst/vst section of the Ardour Sconscript.
Now I get this:
scons BUILD_SSE_OPTIMIZATIONS=1 USE_SSE_EVERYWHERE=0 VST=1 VSTPATH=/path/to/fst-1.7 PREFIX=/usr KSI=no DEBUG=yes
scons: Reading SConscript files ...
Checking for C header file alsa/asoundlib.h... yes
*******************************
detected DIST_TARGET = i686
*******************************
Checking for internationalization support ...
Checking for C header file libintl.h... yes
Checking for C header file /System/Library/Frameworks/CoreAudio.framework/Versions/A/Headers/CoreAudio.h... no
Checking for C function posix_memalign()... yes
Checking for C function getmntent()... yes
Checking for jack_client_open()...ok
Checking for jack_recompute_total_latencies()...ok
Checking for C header file wordexp.h... yes
Checking for C header file sys/vfs.h... yes
Checking for executable gtk-config ...yes
scons: done reading SConscript files.
scons: Building targets ...
scons: `ardour.rc' is up to date.
scons: `libs/soundtouch/libsoundtouch.a' is up to date.
scons: `libs/sigc++/libsigc++.a' is up to date.
scons: `libs/pbd/libpbd.a' is up to date.
scons: `libs/midi++/libmidi++.a' is up to date.
scons: `libs/ardour/libardour.a' is up to date.
scons: `libs/gtkmm/config.h.in' is up to date.
scons: `libs/gtkmm/config.h' is up to date.
scons: `libs/gtkmm/libgtkmm.a' is up to date.
scons: `libs/gtkmmext/libgtkmmext.a' is up to date.
scons: `libs/gtk-canvas/libgtk-canvas.a' is up to date.
version_builder(["gtk_ardour/version.cc", "gtk_ardour/version.h"], ["gtk_ardour/SConscript"])
g++ -g -DARCH_X86 -msse -mfpmath=sse -DBUILD_SSE_OPTIMIZATIONS -Wall -DVST_SUPPORT -DENABLE_NLS -D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DPACKAGE="gtk_ardour" -DDATA_DIR="/usr/share" -DLOCALEDIR="/usr/share/locale" -DVERSIONSTRING="0.99.1" -Igtk_ardour -Ilibs -Ilibs/ardour -Ilibs/gtkmmext -Ilibs/midi++ -Ilibs/pbd -Ilibs/gtkmm -Ilibs/gtkmm/gdk-- -Ilibs/gtkmm/src -Ilibs/sigc++ -Ilibs/sigc++/sigc++/config -Ilibs/gtk-canvas -I/usr/include/libart-2.0 -I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/include/libxml2 -Ilibs -Ilibs/soundtouch -c -o gtk_ardour/about.o gtk_ardour/about.cc
g++ -g -DARCH_X86 -msse -mfpmath=sse -DBUILD_SSE_OPTIMIZATIONS -Wall -DVST_SUPPORT -DENABLE_NLS -D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DPACKAGE="gtk_ardour" -DDATA_DIR="/usr/share" -DLOCALEDIR="/usr/share/locale" -DVERSIONSTRING="0.99.1" -Igtk_ardour -Ilibs -Ilibs/ardour -Ilibs/gtkmmext -Ilibs/midi++ -Ilibs/pbd -Ilibs/gtkmm -Ilibs/gtkmm/gdk-- -Ilibs/gtkmm/src -Ilibs/sigc++ -Ilibs/sigc++/sigc++/config -Ilibs/gtk-canvas -I/usr/include/libart-2.0 -I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/include/libxml2 -Ilibs -Ilibs/soundtouch -c -o gtk_ardour/main.o gtk_ardour/main.cc
g++ -g -DARCH_X86 -msse -mfpmath=sse -DBUILD_SSE_OPTIMIZATIONS -Wall -DVST_SUPPORT -DENABLE_NLS -D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DPACKAGE="gtk_ardour" -DDATA_DIR="/usr/share" -DLOCALEDIR="/usr/share/locale" -DVERSIONSTRING="0.99.1" -Igtk_ardour -Ilibs -Ilibs/ardour -Ilibs/gtkmmext -Ilibs/midi++ -Ilibs/pbd -Ilibs/gtkmm -Ilibs/gtkmm/gdk-- -Ilibs/gtkmm/src -Ilibs/sigc++ -Ilibs/sigc++/sigc++/config -Ilibs/gtk-canvas -I/usr/include/libart-2.0 -I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/include/libxml2 -Ilibs -Ilibs/soundtouch -c -o gtk_ardour/version.o gtk_ardour/version.cc
g++ -o gtk_ardour/ardour.bin gtk_ardour/about.o gtk_ardour/add_route_dialog.o gtk_ardour/ardour_dialog.o gtk_ardour/ardour_message.o gtk_ardour/ardour_ui.o gtk_ardour/ardour_ui2.o gtk_ardour/ardour_ui_dependents.o gtk_ardour/ardour_ui_dialogs.o gtk_ardour/ardour_ui_ed.o gtk_ardour/ardour_ui_mixer.o gtk_ardour/audio_clock.o gtk_ardour/audio_time_axis.o gtk_ardour/automation_gain_line.o gtk_ardour/automation_line.o gtk_ardour/automation_pan_line.o gtk_ardour/automation_time_axis.o gtk_ardour/axis_view.o gtk_ardour/canvas-imageframe.o gtk_ardour/canvas-ruler.o gtk_ardour/canvas-simpleline.o gtk_ardour/canvas-simplerect.o gtk_ardour/canvas-waveview.o gtk_ardour/connection_editor.o gtk_ardour/crossfade_edit.o gtk_ardour/crossfade_view.o gtk_ardour/curvetest.o gtk_ardour/default_keys.o gtk_ardour/editing.o gtk_ardour/editor.o gtk_ardour/editor_audiotrack.o gtk_ardour/editor_canvas_events.o gtk_ardour/editor_cursors.o gtk_ardour/editor_edit_groups.o gtk_ardour/editor_export_audio.o gtk_ardour/editor_hscroller.o gtk_ardour/editor_imageframe.o gtk_ardour/editor_keyboard.o gtk_ardour/editor_keys.o gtk_ardour/editor_markers.o gtk_ardour/editor_mixer.o gtk_ardour/editor_mouse.o gtk_ardour/editor_nudge.o gtk_ardour/editor_ops.o gtk_ardour/editor_region_list.o gtk_ardour/editor_route_list.o gtk_ardour/editor_rulers.o gtk_ardour/editor_scrub.o gtk_ardour/editor_selection_list.o gtk_ardour/editor_tempodisplay.o gtk_ardour/editor_timefx.o gtk_ardour/export_dialog.o gtk_ardour/gain_automation_time_axis.o gtk_ardour/gain_meter.o gtk_ardour/ghostregion.o gtk_ardour/grouped_buttons.o gtk_ardour/gtk-custom-hruler.o gtk_ardour/gtk-custom-ruler.o gtk_ardour/gtkscrolledwindow.o gtk_ardour/imageframe_socket_handler.o gtk_ardour/imageframe_time_axis.o gtk_ardour/imageframe_time_axis_group.o gtk_ardour/imageframe_time_axis_view.o gtk_ardour/imageframe_view.o gtk_ardour/io_selector.o gtk_ardour/keyboard.o gtk_ardour/keyboard_target.o gtk_ardour/library_ui.o gtk_ardour/location_ui.o gtk_ardour/main.o gtk_ardour/marker.o gtk_ardour/marker_time_axis.o gtk_ardour/marker_time_axis_view.o gtk_ardour/marker_view.o gtk_ardour/meter_bridge.o gtk_ardour/meter_bridge_strip.o gtk_ardour/mixer_strip.o gtk_ardour/mixer_ui.o gtk_ardour/new_session_dialog.o gtk_ardour/option_editor.o gtk_ardour/opts.o gtk_ardour/pan_automation_time_axis.o gtk_ardour/panner2d.o gtk_ardour/panner_ui.o gtk_ardour/playlist_selector.o gtk_ardour/plugin_selector.o gtk_ardour/plugin_ui.o gtk_ardour/prompter.o gtk_ardour/public_editor.o gtk_ardour/redirect_automation_line.o gtk_ardour/redirect_automation_time_axis.o gtk_ardour/redirect_box.o gtk_ardour/region_editor.o gtk_ardour/region_gain_line.o gtk_ardour/region_selection.o gtk_ardour/regionview.o gtk_ardour/route_params_ui.o gtk_ardour/route_redirect_selection.o gtk_ardour/route_ui.o gtk_ardour/selection.o gtk_ardour/send_ui.o gtk_ardour/streamview.o gtk_ardour/tempo_dialog.o gtk_ardour/time_axis_view.o gtk_ardour/time_axis_view_item.o gtk_ardour/time_selection.o gtk_ardour/utils.o gtk_ardour/version.o gtk_ardour/visual_time_axis.o gtk_ardour/vst_pluginui.o -Llibs/ardour -Llibs/gtkmmext -Llibs/midi++ -Llibs/pbd -Llibs/gtkmm -Llibs/sigc++ -Llibs/gtk-canvas -L/usr/lib -Llibs/soundtouch -lardour -lgtkmmext -lmidi++ -lpbd -lgtkmm -lsigc++ -lgtk-canvas -lart_lgpl_2 -lasound -lsndfile -llrdf -lgtk -lgdk -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm -lxml2 -lz -lm -lsoundtouch -lraptor -lcurl -lssl -lcrypto -ldl -lxslt -lxml2 -lz -lm -lsamplerate -ljack
gtk_ardour/vst_pluginui.o: In function `VSTPluginUI::package(Gtk::Window&)':
gtk_ardour/vst_pluginui.cc:78: undefined reference to `fst_get_XID'
gtk_ardour/vst_pluginui.o: In function `VSTPluginUI':
gtk_ardour/vst_pluginui.cc:40: undefined reference to `fst_run_editor'
gtk_ardour/vst_pluginui.cc:40: undefined reference to `fst_run_editor'
libs/ardour/libardour.a(audioengine.o): In function `_thread_init_callback(void*)':
libs/ardour/audioengine.cc:87: undefined reference to `fst_adopt_thread'
libs/ardour/libardour.a(globals.o): In function `ARDOUR::init(ARDOUR::AudioEngine&, bool, bool, void (*)(int, siginfo*, void*))':
libs/ardour/globals.cc:183: undefined reference to `fst_init'
libs/ardour/libardour.a(plugin_manager.o): In function `ARDOUR::PluginManager::vst_discover(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
libs/ardour/plugin_manager.cc:456: undefined reference to `fst_get_info'
libs/ardour/plugin_manager.cc:484: undefined reference to `fst_free_info'
libs/ardour/libardour.a(plugin_manager.o): In function `ARDOUR::PluginManager::load(ARDOUR::Session&, ARDOUR::PluginInfo*)':
libs/ardour/plugin_manager.cc:296: undefined reference to `fst_load'
libs/ardour/libardour.a(vst_plugin.o): In function `~VSTPlugin':
libs/ardour/vst_plugin.cc:103: undefined reference to `fst_close'
libs/ardour/vst_plugin.cc:103: undefined reference to `fst_close'
libs/ardour/vst_plugin.cc:103: undefined reference to `fst_close'
libs/ardour/libardour.a(vst_plugin.o): In function `VSTPlugin':
libs/ardour/vst_plugin.cc:91: undefined reference to `fst_instantiate'
libs/ardour/vst_plugin.cc:91: undefined reference to `fst_instantiate'
libs/ardour/vst_plugin.cc:65: undefined reference to `fst_instantiate'
libs/ardour/vst_plugin.cc:65: undefined reference to `fst_instantiate'
collect2: ld returned 1 exit status
scons: *** [gtk_ardour/ardour.bin] Error 1
scons: building terminated because of errors.
So I got further but don't know what these errors are.
Thanx again.
Offline
Looks like it can't find the vst header files. Were they also installed? And where? Maybe you'll need to add an argument to scons so that it can find them.
Offline
Yeah, that's what i was thinking but the vst files are in the .../ardour-0.99.1/libs/ardour/vst.
this seems to be the file in question:
/*
Copyright (C) 2004 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
$Id: vst_plugin.cc,v 1.19 2005/11/14 16:31:05 sampo Exp $
*/
#include <algorithm>
#include <vector>
#include <string>
#include <ctype.h>
#include <cstdlib>
#include <cstdio> // so libraptor doesn't complain
#include <cmath>
#include <dirent.h>
#include <string.h> // for memmove
#include <sys/stat.h>
#include <cerrno>
#include <lrdf.h>
#include <fst.h>
#include <pbd/compose.h>
#include <pbd/error.h>
#include <pbd/pathscanner.h>
#include <pbd/xml++.h>
#include <vst/aeffectx.h>
#include <midi++/manager.h>
#include <ardour/ardour.h>
#include <ardour/session.h>
#include <ardour/audioengine.h>
#include <ardour/vst_plugin.h>
#include <pbd/stl_delete.h>
#include "i18n.h"
#include <locale.h>
using namespace ARDOUR;
using std::min;
using std::max;
VSTPlugin::VSTPlugin (AudioEngine& e, Session& session, FSTHandle* h)
: Plugin (e, session)
{
handle = h;
if ((_fst = fst_instantiate (handle, Session::vst_callback, this)) == 0) {
throw failed_constructor();
}
_plugin = _fst->plugin;
_plugin->user = this;
/* set rate and blocksize */
_plugin->dispatcher (_plugin, effSetSampleRate, 0, 0, NULL,
(float) session.frame_rate());
_plugin->dispatcher (_plugin, effSetBlockSize, 0,
session.get_block_size(), NULL, 0.0f);
/* set program to zero */
_plugin->dispatcher (_plugin, effSetProgram, 0, 0, NULL, 0.0f);
Plugin::setup_midi_controls ();
}
VSTPlugin::VSTPlugin (const VSTPlugin &other)
: Plugin (other)
{
handle = other.handle;
if ((_fst = fst_instantiate (handle, Session::vst_callback, this)) == 0) {
throw failed_constructor();
}
_plugin = _fst->plugin;
Plugin::setup_midi_controls ();
}
VSTPlugin::~VSTPlugin ()
{
deactivate ();
GoingAway (this); /* EMIT SIGNAL */
fst_close (_fst);
}
void
VSTPlugin::set_block_size (jack_nframes_t nframes)
{
deactivate ();
_plugin->dispatcher (_plugin, effSetBlockSize, 0, nframes, NULL, 0.0f);
activate ();
}
void
VSTPlugin::store_state (PluginState& state)
{
}
void
VSTPlugin::restore_state (PluginState& state)
{
}
float
VSTPlugin::default_value (uint32_t port)
{
return 0;
}
void
VSTPlugin::set_parameter (uint32_t which, float val)
{
_plugin->setParameter (_plugin, which, val);
ParameterChanged (which, val); /* EMIT SIGNAL */
if (session().get_midi_feedback()) {
if (which < parameter_count() && midi_controls[which]) {
midi_controls[which]->send_feedback (val);
}
}
}
float
VSTPlugin::get_parameter (uint32_t which) const
{
return _plugin->getParameter (_plugin, which);
}
uint32_t
VSTPlugin::nth_parameter (uint32_t n, bool& ok) const
{
ok = true;
return n;
}
XMLNode&
VSTPlugin::get_state()
{
XMLNode *root = new XMLNode (state_node_name());
LocaleGuard lg (X_("POSIX"));
if (_plugin->flags & effFlagsProgramChunks) {
/* fetch the current chunk */
void* data;
long data_size;
if ((data_size = _plugin->dispatcher (_plugin, effGetChunk, 0, 0, &data, false)) == 0) {
return *root;
}
/* save it to a file */
string path;
struct stat sbuf;
path = getenv ("HOME");
path += "/.ardour/vst";
if (stat (path.c_str(), &sbuf)) {
if (errno == ENOENT) {
if (mkdir (path.c_str(), 0600)) {
error << compose (_("cannot create VST chunk directory: %1"),
strerror (errno))
<< endmsg;
return *root;
}
} else {
error << compose (_("cannot check VST chunk directory: %1"),
strerror (errno))
<< endmsg;
return *root;
}
} else if (!S_ISDIR (sbuf.st_mode)) {
error << compose (_("%1 exists but is not a directory"), path)
<< endmsg;
return *root;
}
path += "something";
/* store information */
XMLNode* chunk_node = new XMLNode (X_("chunk"));
chunk_node->add_property ("path", path);
root->add_child_nocopy (*chunk_node);
} else {
XMLNode* parameters = new XMLNode ("parameters");
for (long n = 0; n < _plugin->numParams; ++n) {
char index[64];
char val[32];
snprintf (index, sizeof (index), "param_%ld", n);
snprintf (val, sizeof (val), "%f", _plugin->getParameter (_plugin, n));
parameters->add_property (index, val);
}
root->add_child_nocopy (*parameters);
}
return *root;
}
int
VSTPlugin::set_state(const XMLNode& node)
{
LocaleGuard lg (X_("POSIX"));
if (node.name() != state_node_name()) {
error << _("Bad node sent to VSTPlugin::set_state") << endmsg;
return 0;
}
XMLNode* child;
if ((child = find_named_node (node, X_("chunks"))) != 0) {
return 0;
} else if ((child = find_named_node (node, X_("parameters"))) != 0) {
XMLPropertyList::const_iterator i;
for (i = child->properties().begin(); i != child->properties().end(); ++i) {
long param;
float val;
sscanf ((*i)->name().c_str(), "param_%ld", ¶m);
sscanf ((*i)->value().c_str(), "%f", &val);
_plugin->setParameter (_plugin, param, val);
}
return 0;
}
return -1;
}
int
VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc) const
{
VstParameterProperties prop;
desc.min_unbound = false;
desc.max_unbound = false;
if (_plugin->dispatcher (_plugin, effGetParameterProperties, which, 0, &prop, 0)) {
/* i have yet to find or hear of a VST plugin that uses this */
if (prop.flags & kVstParameterUsesIntegerMinMax) {
desc.lower = prop.minInteger;
desc.upper = prop.maxInteger;
} else {
desc.lower = 0;
desc.upper = 1.0;
}
if (prop.flags & kVstParameterUsesIntStep) {
desc.step = prop.stepInteger;
desc.smallstep = prop.stepInteger;
desc.largestep = prop.stepInteger;
} else if (prop.flags & kVstParameterUsesFloatStep) {
desc.step = prop.stepFloat;
desc.smallstep = prop.smallStepFloat;
desc.largestep = prop.largeStepFloat;
} else {
float range = desc.upper - desc.lower;
desc.step = range / 100.0f;
desc.smallstep = desc.step / 2.0f;
desc.largestep = desc.step * 10.0f;
}
desc.toggled = prop.flags & kVstParameterIsSwitch;
desc.logarithmic = false;
desc.sr_dependent = false;
desc.label = prop.label;
} else {
/* old style */
char label[64];
label[0] = '';
_plugin->dispatcher (_plugin, effGetParamName, which, 0, label, 0);
desc.label = label;
desc.integer_step = false;
desc.lower = 0.0f;
desc.upper = 1.0f;
desc.step = 0.01f;
desc.smallstep = 0.005f;
desc.largestep = 0.1f;
desc.toggled = false;
desc.logarithmic = false;
desc.sr_dependent = false;
}
return 0;
}
bool
VSTPlugin::load_preset (string name)
{
if (_plugin->flags & effFlagsProgramChunks) {
error << _("no support for presets using chunks at this time")
<< endmsg;
return false;
}
return Plugin::load_preset (name);
}
bool
VSTPlugin::save_preset (string name)
{
if (_plugin->flags & effFlagsProgramChunks) {
error << _("no support for presets using chunks at this time")
<< endmsg;
return false;
}
return Plugin::save_preset (name, "vst");
}
string
VSTPlugin::describe_parameter (uint32_t param)
{
char name[64];
_plugin->dispatcher (_plugin, effGetParamName, param, 0, name, 0);
return name;
}
jack_nframes_t
VSTPlugin::latency () const
{
return _plugin->initialDelay;
}
set<uint32_t>
VSTPlugin::automatable () const
{
set<uint32_t> ret;
for (uint32_t i = 0; i < parameter_count(); ++i){
ret.insert (ret.end(), i);
}
return ret;
}
int
VSTPlugin::connect_and_run (vector<Sample*>& bufs, uint32_t maxbuf, int32_t& in_index, int32_t& out_index, jack_nframes_t nframes, jack_nframes_t offset)
{
float *ins[_plugin->numInputs];
float *outs[_plugin->numOutputs];
int32_t i;
for (i = 0; i < (int32_t) _plugin->numInputs; ++i) {
ins[i] = bufs[min((uint32_t) in_index,maxbuf)] + offset;
in_index++;
}
for (i = 0; i < (int32_t) _plugin->numOutputs; ++i) {
outs[i] = bufs[min((uint32_t) out_index,maxbuf)] + offset;
/* unbelievably, several VST plugins still rely on Cubase
behaviour and do not silence the buffer in processReplacing
when they have no output.
*/
// memset (outs[i], 0, sizeof (Sample) * nframes);
out_index++;
}
/* we already know it can support processReplacing */
_plugin->processReplacing (_plugin, ins, outs, nframes);
return 0;
}
void
VSTPlugin::deactivate ()
{
_plugin->dispatcher (_plugin, effMainsChanged, 0, 0, NULL, 0.0f);
}
void
VSTPlugin::activate ()
{
_plugin->dispatcher (_plugin, effMainsChanged, 0, 1, NULL, 0.0f);
}
uint32_t
VSTPlugin::unique_id() const
{
return _plugin->uniqueID;
}
const char *
VSTPlugin::name () const
{
return handle->name;
}
const char *
VSTPlugin::maker () const
{
return "imadeit";
}
const char *
VSTPlugin::label () const
{
return handle->name;
}
uint32_t
VSTPlugin::parameter_count() const
{
return _plugin->numParams;
}
bool
VSTPlugin::has_editor () const
{
return _plugin->flags & effFlagsHasEditor;
}
void
VSTPlugin::print_parameter (uint32_t param, char *buf, uint32_t len) const
{
char lab[9];
char *first_nonws;
_plugin->dispatcher (_plugin, effGetParamLabel, param, 0, lab, 0);
_plugin->dispatcher (_plugin, effGetParamDisplay, param, 0, buf, 0);
if (buf[0] == '') {
return;
}
first_nonws = buf;
while (*first_nonws && isspace (*first_nonws)) {
first_nonws++;
}
if (*first_nonws == '') {
return;
}
memmove (buf, first_nonws, strlen (buf) - (first_nonws - buf) + 1);
}
Once again, thank you very much. People like you are the reason I left Windows.
Offline
Pages: 1