@@ -722,7 +722,7 @@ struct ParameterRanges { | |||||
if (newValue < 0.0f) | if (newValue < 0.0f) | ||||
newValue = 0.0f; | newValue = 0.0f; | ||||
else if (newValue < 1.0f) | |||||
else if (newValue > 1.0f) | |||||
newValue = 1.0f; | newValue = 1.0f; | ||||
return newValue; | return newValue; | ||||
@@ -338,7 +338,7 @@ struct EngineTimeInfo { | |||||
static const uint32_t ValidBBT = 0x1; | static const uint32_t ValidBBT = 0x1; | ||||
bool playing; | bool playing; | ||||
uint32_t frame; | |||||
uint64_t frame; | |||||
uint64_t usecs; | uint64_t usecs; | ||||
uint32_t valid; | uint32_t valid; | ||||
EngineTimeInfoBBT bbt; | EngineTimeInfoBBT bbt; | ||||
@@ -142,8 +142,8 @@ typedef struct _TimeInfoBBT { | |||||
typedef struct _TimeInfo { | typedef struct _TimeInfo { | ||||
bool playing; | bool playing; | ||||
uint32_t frame; | |||||
uint32_t usecs; | |||||
uint64_t frame; | |||||
uint64_t usecs; | |||||
TimeInfoBBT bbt; | TimeInfoBBT bbt; | ||||
} TimeInfo; | } TimeInfo; | ||||
@@ -23,6 +23,9 @@ | |||||
using DISTRHO::d_cconst; | using DISTRHO::d_cconst; | ||||
using DISTRHO::d_string; | using DISTRHO::d_string; | ||||
#ifdef QTCREATOR_TEST | |||||
CARLA_BACKEND_START_NAMESPACE | |||||
#else | |||||
// ----------------------------------------- | // ----------------------------------------- | ||||
// needed symbols | // needed symbols | ||||
@@ -33,11 +36,12 @@ CARLA_BACKEND_START_NAMESPACE | |||||
CarlaEngine* CarlaEngine::newJack() { return nullptr; } | CarlaEngine* CarlaEngine::newJack() { return nullptr; } | ||||
#ifdef WANT_RTAUDIO | |||||
# ifdef WANT_RTAUDIO | |||||
CarlaEngine* CarlaEngine::newRtAudio(RtAudioApi) { return nullptr; } | CarlaEngine* CarlaEngine::newRtAudio(RtAudioApi) { return nullptr; } | ||||
size_t CarlaEngine::getRtAudioApiCount() { return 0; } | size_t CarlaEngine::getRtAudioApiCount() { return 0; } | ||||
const char* CarlaEngine::getRtAudioApiName(const unsigned int) { return nullptr; } | const char* CarlaEngine::getRtAudioApiName(const unsigned int) { return nullptr; } | ||||
const char** CarlaEngine::getRtAudioApiDeviceNames(const unsigned int) { return nullptr; } | const char** CarlaEngine::getRtAudioApiDeviceNames(const unsigned int) { return nullptr; } | ||||
# endif | |||||
#endif | #endif | ||||
// ----------------------------------------- | // ----------------------------------------- | ||||
@@ -1,5 +1,5 @@ | |||||
/* | /* | ||||
* Carla Plugin Engine | |||||
* Carla Plugin Engine (DISTRHO) | |||||
* Copyright (C) 2012-2013 Filipe Coelho <falktx@falktx.com> | * Copyright (C) 2012-2013 Filipe Coelho <falktx@falktx.com> | ||||
* | * | ||||
* This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
@@ -20,16 +20,18 @@ | |||||
#define DISTRHO_PLUGIN_NAME "Carla" | #define DISTRHO_PLUGIN_NAME "Carla" | ||||
#define DISTRHO_PLUGIN_HAS_UI 0 | |||||
#define DISTRHO_PLUGIN_HAS_UI 1 | |||||
#define DISTRHO_PLUGIN_IS_SYNTH 1 | #define DISTRHO_PLUGIN_IS_SYNTH 1 | ||||
#define DISTRHO_PLUGIN_NUM_INPUTS 2 | #define DISTRHO_PLUGIN_NUM_INPUTS 2 | ||||
#define DISTRHO_PLUGIN_NUM_OUTPUTS 2 | #define DISTRHO_PLUGIN_NUM_OUTPUTS 2 | ||||
#define DISTRHO_PLUGIN_WANT_LATENCY 1 | |||||
#define DISTRHO_PLUGIN_WANT_LATENCY 0 | |||||
#define DISTRHO_PLUGIN_WANT_PROGRAMS 1 | #define DISTRHO_PLUGIN_WANT_PROGRAMS 1 | ||||
#define DISTRHO_PLUGIN_WANT_STATE 1 | #define DISTRHO_PLUGIN_WANT_STATE 1 | ||||
#define DISTRHO_PLUGIN_URI "http://kxstudio.sf.net/carla" | #define DISTRHO_PLUGIN_URI "http://kxstudio.sf.net/carla" | ||||
#define DISTRHO_UI_EXTERNAL | |||||
#endif // __DISTRHO_PLUGIN_INFO_H__ | #endif // __DISTRHO_PLUGIN_INFO_H__ |
@@ -31,4 +31,6 @@ | |||||
#define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/3BandEQ" | #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/3BandEQ" | ||||
#define DISTRHO_UI_OPENGL | |||||
#endif // __DISTRHO_PLUGIN_INFO_H__ | #endif // __DISTRHO_PLUGIN_INFO_H__ |
@@ -31,4 +31,6 @@ | |||||
#define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/3BandSplitter" | #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/3BandSplitter" | ||||
#define DISTRHO_UI_OPENGL | |||||
#endif // __DISTRHO_PLUGIN_INFO_H__ | #endif // __DISTRHO_PLUGIN_INFO_H__ |
@@ -31,4 +31,6 @@ | |||||
#define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/PingPongPan" | #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/PingPongPan" | ||||
#define DISTRHO_UI_OPENGL | |||||
#endif // __DISTRHO_PLUGIN_INFO_H__ | #endif // __DISTRHO_PLUGIN_INFO_H__ |
@@ -79,9 +79,25 @@ struct ParameterRanges { | |||||
value = max; | value = max; | ||||
} | } | ||||
float fixValue(const float& value) const | |||||
{ | |||||
if (value < min) | |||||
return min; | |||||
else if (value > max) | |||||
return max; | |||||
return value; | |||||
} | |||||
float normalizeValue(const float& value) const | float normalizeValue(const float& value) const | ||||
{ | { | ||||
return (value - min) / (max - min); | |||||
float newValue = (value - min) / (max - min); | |||||
if (newValue < 0.0f) | |||||
newValue = 0.0f; | |||||
else if (newValue > 1.0f) | |||||
newValue = 1.0f; | |||||
return newValue; | |||||
} | } | ||||
float unnormalizeValue(const float& value) const | float unnormalizeValue(const float& value) const | ||||
@@ -132,17 +148,19 @@ struct MidiEvent { | |||||
// TimePos | // TimePos | ||||
struct TimePos { | struct TimePos { | ||||
bool playing; | |||||
uint64_t frame; | |||||
double bpm; | double bpm; | ||||
TimePos() | TimePos() | ||||
: bpm(120.0) {} | |||||
: playing(false), | |||||
frame(0), | |||||
bpm(120.0) {} | |||||
}; | }; | ||||
// ------------------------------------------------- | // ------------------------------------------------- | ||||
// Plugin | // Plugin | ||||
struct PluginPrivateData; | |||||
class Plugin | class Plugin | ||||
{ | { | ||||
public: | public: | ||||
@@ -209,7 +227,8 @@ protected: | |||||
// --------------------------------------------- | // --------------------------------------------- | ||||
private: | private: | ||||
PluginPrivateData* const pData; | |||||
struct PrivateData; | |||||
PrivateData* const pData; | |||||
friend class PluginInternal; | friend class PluginInternal; | ||||
}; | }; | ||||
@@ -26,8 +26,6 @@ START_NAMESPACE_DISTRHO | |||||
// ------------------------------------------------- | // ------------------------------------------------- | ||||
// UI | // UI | ||||
struct UIPrivateData; | |||||
class UI | class UI | ||||
{ | { | ||||
public: | public: | ||||
@@ -82,7 +80,8 @@ protected: | |||||
// --------------------------------------------- | // --------------------------------------------- | ||||
private: | private: | ||||
UIPrivateData* const pData; | |||||
struct PrivateData; | |||||
PrivateData* const pData; | |||||
friend class UIInternal; | friend class UIInternal; | ||||
}; | }; | ||||
@@ -62,16 +62,6 @@ void d_msleep(unsigned int msecs) | |||||
#endif | #endif | ||||
} | } | ||||
static inline | |||||
void d_usleep(unsigned int usecs) | |||||
{ | |||||
#ifdef DISTRHO_OS_WINDOWS | |||||
Sleep(usecs / 1000); | |||||
#else | |||||
usleep(usecs); | |||||
#endif | |||||
} | |||||
// ------------------------------------------------- | // ------------------------------------------------- | ||||
static inline | static inline | ||||
@@ -504,4 +494,4 @@ d_string operator+(const char* const strBufBefore, const d_string& strAfter) | |||||
END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
#endif // __UTILS_HPP__ | |||||
#endif // __DISTRHO_UTILS_HPP__ |
@@ -51,6 +51,12 @@ | |||||
# error DISTRHO_PLUGIN_WANT_STATE undefined! | # error DISTRHO_PLUGIN_WANT_STATE undefined! | ||||
#endif | #endif | ||||
#if DISTRHO_PLUGIN_HAS_UI | |||||
# if ! (defined(DISTRHO_UI_EXTERNAL) || defined(DISTRHO_UI_OPENGL) || defined(DISTRHO_UI_QT)) | |||||
# error DISTRHO_PLUGIN_HAS_UI is defined but not its type; please define one of DISTRHO_UI_EXTERNAL, DISTRHO_UI_OPENGL or DISTRHO_UI_QT | |||||
# endif | |||||
#endif | |||||
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) | #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) | ||||
# define DISTRHO_PLUGIN_EXPORT extern "C" __declspec (dllexport) | # define DISTRHO_PLUGIN_EXPORT extern "C" __declspec (dllexport) | ||||
# define DISTRHO_OS_WINDOWS 1 | # define DISTRHO_OS_WINDOWS 1 | ||||
@@ -86,10 +92,6 @@ | |||||
# define USE_NAMESPACE_DISTRHO | # define USE_NAMESPACE_DISTRHO | ||||
#endif | #endif | ||||
#ifndef DISTRHO_UI_QT | |||||
# define DISTRHO_UI_OPENGL | |||||
#endif | |||||
#define DISTRHO_UI_URI DISTRHO_PLUGIN_URI "#UI" | #define DISTRHO_UI_URI DISTRHO_PLUGIN_URI "#UI" | ||||
#endif // __DISTRHO_DEFINES_H__ | #endif // __DISTRHO_DEFINES_H__ |
@@ -34,7 +34,7 @@ const ParameterRanges PluginInternal::sFallbackRanges; | |||||
// Plugin | // Plugin | ||||
Plugin::Plugin(uint32_t parameterCount, uint32_t programCount, uint32_t stateCount) | Plugin::Plugin(uint32_t parameterCount, uint32_t programCount, uint32_t stateCount) | ||||
: pData(new PluginPrivateData) | |||||
: pData(new PrivateData()) | |||||
{ | { | ||||
if (parameterCount > 0) | if (parameterCount > 0) | ||||
{ | { | ||||
@@ -28,7 +28,7 @@ START_NAMESPACE_DISTRHO | |||||
extern uint32_t d_lastBufferSize; | extern uint32_t d_lastBufferSize; | ||||
extern double d_lastSampleRate; | extern double d_lastSampleRate; | ||||
struct PluginPrivateData { | |||||
struct Plugin::PrivateData { | |||||
uint32_t bufferSize; | uint32_t bufferSize; | ||||
double sampleRate; | double sampleRate; | ||||
@@ -49,9 +49,9 @@ struct PluginPrivateData { | |||||
uint32_t latency; | uint32_t latency; | ||||
#endif | #endif | ||||
TimePos timePos; | |||||
TimePos timePos; | |||||
PluginPrivateData() | |||||
PrivateData() | |||||
: bufferSize(d_lastBufferSize), | : bufferSize(d_lastBufferSize), | ||||
sampleRate(d_lastSampleRate), | sampleRate(d_lastSampleRate), | ||||
parameterCount(0), | parameterCount(0), | ||||
@@ -73,7 +73,7 @@ struct PluginPrivateData { | |||||
assert(sampleRate != 0.0); | assert(sampleRate != 0.0); | ||||
} | } | ||||
~PluginPrivateData() | |||||
~PrivateData() | |||||
{ | { | ||||
if (parameterCount > 0 && parameters != nullptr) | if (parameterCount > 0 && parameters != nullptr) | ||||
delete[] parameters; | delete[] parameters; | ||||
@@ -344,7 +344,7 @@ public: | |||||
protected: | protected: | ||||
Plugin* const kPlugin; | Plugin* const kPlugin; | ||||
PluginPrivateData* const kData; | |||||
Plugin::PrivateData* const kData; | |||||
private: | private: | ||||
static const d_string sFallbackString; | static const d_string sFallbackString; | ||||
@@ -223,6 +223,13 @@ protected: | |||||
#if DISTRHO_PLUGIN_IS_SYNTH | #if DISTRHO_PLUGIN_IS_SYNTH | ||||
// TODO | // TODO | ||||
#endif | #endif | ||||
return; | |||||
// unused | |||||
(void)onOff; | |||||
(void)channel; | |||||
(void)note; | |||||
(void)velocity; | |||||
} | } | ||||
void uiResize(unsigned int width, unsigned int height) | void uiResize(unsigned int width, unsigned int height) | ||||
@@ -27,7 +27,7 @@ double d_lastUiSampleRate = 0.0; | |||||
// UI | // UI | ||||
UI::UI() | UI::UI() | ||||
: pData(new UIPrivateData) | |||||
: pData(new PrivateData()) | |||||
{ | { | ||||
#if (defined(DISTRHO_PLUGIN_TARGET_DSSI) || defined(DISTRHO_PLUGIN_TARGET_LV2)) | #if (defined(DISTRHO_PLUGIN_TARGET_DSSI) || defined(DISTRHO_PLUGIN_TARGET_LV2)) | ||||
pData->parameterOffset = DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS; | pData->parameterOffset = DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS; | ||||
@@ -19,7 +19,10 @@ | |||||
#include "DistrhoDefines.h" | #include "DistrhoDefines.h" | ||||
#ifdef DISTRHO_UI_OPENGL | |||||
#if defined(DISTRHO_UI_EXTERNAL) | |||||
# include "../DistrhoUI.hpp" | |||||
// TODO | |||||
#elif defined(DISTRHO_UI_OPENGL) | |||||
# include "../DistrhoUIOpenGL.hpp" | # include "../DistrhoUIOpenGL.hpp" | ||||
# include "../dgl/App.hpp" | # include "../dgl/App.hpp" | ||||
# include "../dgl/Window.hpp" | # include "../dgl/Window.hpp" | ||||
@@ -43,7 +46,7 @@ extern double d_lastUiSampleRate; | |||||
// ------------------------------------------------- | // ------------------------------------------------- | ||||
struct UIPrivateData { | |||||
struct UI::PrivateData { | |||||
// DSP | // DSP | ||||
double sampleRate; | double sampleRate; | ||||
uint32_t parameterOffset; | uint32_t parameterOffset; | ||||
@@ -56,7 +59,7 @@ struct UIPrivateData { | |||||
uiResizeFunc uiResizeCallbackFunc; | uiResizeFunc uiResizeCallbackFunc; | ||||
void* ptr; | void* ptr; | ||||
UIPrivateData() | |||||
PrivateData() | |||||
: sampleRate(d_lastUiSampleRate), | : sampleRate(d_lastUiSampleRate), | ||||
parameterOffset(0), | parameterOffset(0), | ||||
editParamCallbackFunc(nullptr), | editParamCallbackFunc(nullptr), | ||||
@@ -69,7 +72,7 @@ struct UIPrivateData { | |||||
assert(sampleRate != 0.0); | assert(sampleRate != 0.0); | ||||
} | } | ||||
~UIPrivateData() | |||||
~PrivateData() | |||||
{ | { | ||||
} | } | ||||
@@ -214,17 +217,26 @@ public: | |||||
void idle() | void idle() | ||||
{ | { | ||||
#ifdef DISTRHO_UI_QT | |||||
#if defined(DISTRHO_UI_EXTERNAL) | |||||
// TODO - idle OSC | |||||
#elif defined(DISTRHO_UI_OPENGL) | |||||
glApp.idle(); | |||||
#else | |||||
assert(kUi != nullptr); | assert(kUi != nullptr); | ||||
if (kUi != nullptr) | if (kUi != nullptr) | ||||
kUi->d_uiIdle(); | kUi->d_uiIdle(); | ||||
#else | |||||
glApp.idle(); | |||||
#endif | #endif | ||||
} | } | ||||
#ifdef DISTRHO_UI_QT | |||||
#if defined(DISTRHO_UI_EXTERNAL) | |||||
// needed? | |||||
#elif defined(DISTRHO_UI_OPENGL) | |||||
intptr_t getWinId() | |||||
{ | |||||
return glWindow.getWindowId(); | |||||
} | |||||
#else | |||||
QtUI* getQtUI() const | QtUI* getQtUI() const | ||||
{ | { | ||||
return (QtUI*)kUi; | return (QtUI*)kUi; | ||||
@@ -234,24 +246,19 @@ public: | |||||
{ | { | ||||
return ((QtUI*)kUi)->d_resizable(); | return ((QtUI*)kUi)->d_resizable(); | ||||
} | } | ||||
#else | |||||
intptr_t getWinId() | |||||
{ | |||||
return glWindow.getWindowId(); | |||||
} | |||||
#endif | #endif | ||||
// --------------------------------------------- | // --------------------------------------------- | ||||
private: | |||||
#ifdef DISTRHO_UI_OPENGL | #ifdef DISTRHO_UI_OPENGL | ||||
private: | |||||
App glApp; | App glApp; | ||||
Window glWindow; | Window glWindow; | ||||
#endif | #endif | ||||
protected: | protected: | ||||
UI* const kUi; | UI* const kUi; | ||||
UIPrivateData* const kData; | |||||
UI::PrivateData* const kData; | |||||
}; | }; | ||||
// ------------------------------------------------- | // ------------------------------------------------- | ||||