Merge https://github.com/LMMS/lmms into stable-0.4
8
AUTHORS
@@ -1,6 +1,6 @@
|
||||
Tobias Doerffel
|
||||
<tobydox/at/users/dot/sourceforge/dot/net>
|
||||
Maintainer, main-development, artwork etc.
|
||||
Development Manager
|
||||
|
||||
Jonathan Aquilina
|
||||
<eagles051387/at/gmail/dot/com>
|
||||
@@ -17,6 +17,10 @@ Danny McRae
|
||||
Javier Serrano Polo
|
||||
<jasp00/at/terra/dot/es>
|
||||
Development
|
||||
|
||||
Lukas Wohlschläger
|
||||
<lukaswhl/at/gmail/dot/com>
|
||||
Development
|
||||
|
||||
Andrew Kelley
|
||||
<superjoe30/at/gmail/dot/com>
|
||||
@@ -28,7 +32,7 @@ Andreas Brandmaier
|
||||
|
||||
Juan Fabián Simón
|
||||
<treees@gmail.com>
|
||||
Version 4.0 plugin artwork
|
||||
Version 0.4 plugin artwork
|
||||
|
||||
Sebastian Tilsch
|
||||
<djcompilation/at/gmx/dot/de>
|
||||
|
||||
|
Before Width: | Height: | Size: 907 B After Width: | Height: | Size: 900 B |
|
Before Width: | Height: | Size: 736 B After Width: | Height: | Size: 787 B |
|
Before Width: | Height: | Size: 604 B After Width: | Height: | Size: 575 B |
|
Before Width: | Height: | Size: 581 B After Width: | Height: | Size: 615 B |
|
Before Width: | Height: | Size: 569 B After Width: | Height: | Size: 586 B |
|
Before Width: | Height: | Size: 623 B After Width: | Height: | Size: 599 B |
|
Before Width: | Height: | Size: 610 B After Width: | Height: | Size: 604 B |
|
Before Width: | Height: | Size: 687 B After Width: | Height: | Size: 296 B |
|
Before Width: | Height: | Size: 476 B After Width: | Height: | Size: 318 B |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1021 B |
|
Before Width: | Height: | Size: 101 B After Width: | Height: | Size: 369 B |
|
Before Width: | Height: | Size: 160 B After Width: | Height: | Size: 840 B |
|
Before Width: | Height: | Size: 135 B After Width: | Height: | Size: 947 B |
|
Before Width: | Height: | Size: 717 B After Width: | Height: | Size: 700 B |
|
Before Width: | Height: | Size: 842 B After Width: | Height: | Size: 808 B |
|
Before Width: | Height: | Size: 546 B After Width: | Height: | Size: 565 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 410 B After Width: | Height: | Size: 299 B |
|
Before Width: | Height: | Size: 706 B After Width: | Height: | Size: 708 B |
|
Before Width: | Height: | Size: 770 B After Width: | Height: | Size: 772 B |
|
Before Width: | Height: | Size: 668 B After Width: | Height: | Size: 665 B |
|
Before Width: | Height: | Size: 539 B After Width: | Height: | Size: 555 B |
|
Before Width: | Height: | Size: 974 B After Width: | Height: | Size: 979 B |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 974 B After Width: | Height: | Size: 979 B |
|
Before Width: | Height: | Size: 556 B After Width: | Height: | Size: 571 B |
|
Before Width: | Height: | Size: 547 B After Width: | Height: | Size: 551 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 726 B After Width: | Height: | Size: 717 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 709 B After Width: | Height: | Size: 728 B |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 551 B After Width: | Height: | Size: 552 B |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 518 B After Width: | Height: | Size: 541 B |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 544 B After Width: | Height: | Size: 576 B |
|
Before Width: | Height: | Size: 505 B After Width: | Height: | Size: 531 B |
@@ -104,6 +104,15 @@ QScrollBar:vertical {
|
||||
margin: 13px 0px;
|
||||
}
|
||||
|
||||
visualizationWidget {
|
||||
background: none;
|
||||
border: none;
|
||||
}
|
||||
|
||||
cpuloadWidget {
|
||||
border: none;
|
||||
background: url(resources:cpuload_bg.png);
|
||||
}
|
||||
/* scrollbar: trough clicky things */
|
||||
|
||||
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal,
|
||||
@@ -472,6 +481,14 @@ sf2InstrumentView knob {
|
||||
qproperty-lineWidth: 2;
|
||||
}
|
||||
|
||||
sfxrInstrumentView knob {
|
||||
color: #b06319;
|
||||
qproperty-outerColor: rgb(194, 177, 145);
|
||||
qproperty-innerRadius: 2;
|
||||
qproperty-outerRadius: 10;
|
||||
qproperty-lineWidth: 2;
|
||||
}
|
||||
|
||||
opl2instrumentView knob {
|
||||
color: rgb(128,128,128);
|
||||
qproperty-outerColor: rgb(255,255,255);
|
||||
|
||||
|
Before Width: | Height: | Size: 746 B After Width: | Height: | Size: 951 B |
|
Before Width: | Height: | Size: 787 B After Width: | Height: | Size: 988 B |
|
Before Width: | Height: | Size: 746 B After Width: | Height: | Size: 966 B |
|
Before Width: | Height: | Size: 537 B After Width: | Height: | Size: 535 B |
|
Before Width: | Height: | Size: 518 B After Width: | Height: | Size: 474 B |
|
Before Width: | Height: | Size: 502 B After Width: | Height: | Size: 533 B |
@@ -51,6 +51,8 @@ public:
|
||||
static ConstNotePlayHandleList nphsOfInstrumentTrack(
|
||||
const InstrumentTrack * _ct );
|
||||
|
||||
static bool isPreviewing();
|
||||
|
||||
|
||||
private:
|
||||
static previewTrackContainer * s_previewTC;
|
||||
|
||||
@@ -15,6 +15,7 @@ ADD_SUBDIRECTORY(papu)
|
||||
ADD_SUBDIRECTORY(patman)
|
||||
ADD_SUBDIRECTORY(peak_controller_effect)
|
||||
ADD_SUBDIRECTORY(sf2_player)
|
||||
ADD_SUBDIRECTORY(sfxr)
|
||||
ADD_SUBDIRECTORY(sid)
|
||||
ADD_SUBDIRECTORY(spectrum_analyzer)
|
||||
ADD_SUBDIRECTORY(stereo_enhancer)
|
||||
|
||||
456
plugins/ladspa_effect/swh/vocoder_1337.c
Normal file
@@ -0,0 +1,456 @@
|
||||
/* vocoder.c
|
||||
Version 0.3
|
||||
|
||||
LADSPA Unique ID: 1337
|
||||
|
||||
Version 0.31
|
||||
Added stereo output, renamed input/output ports, added,
|
||||
added a control for stereo balance
|
||||
|
||||
Version 0.3
|
||||
Added support for changing bands in real time 2003-12-09
|
||||
|
||||
Version 0.2
|
||||
Adapted to LADSPA by Josh Green <jgreen@users.sourceforge.net>
|
||||
15.6.2001 (for the LinuxTag 2001!)
|
||||
|
||||
Original program can be found at:
|
||||
http://www.sirlab.de/linux/
|
||||
Author: Achim Settelmeier <settel-linux@sirlab.de>
|
||||
|
||||
Adapted to LMMS by Hexasoft (hexasoft.corp@free.fr)
|
||||
|
||||
|
||||
Licence: GPL
|
||||
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 3 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/* not familiar with WINDOWS stuff. Saw this in other sources, it should be needed */
|
||||
|
||||
#ifdef WIN32
|
||||
#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport)
|
||||
int bIsFirstTime = 1;
|
||||
void _init(); // forward declaration
|
||||
#else
|
||||
#define _WINDOWS_DLL_EXPORT_
|
||||
#endif
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* general includes */
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
/*****************************************************************************/
|
||||
/* LADSPA headers */
|
||||
#include <ladspa.h>
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
|
||||
#define LADSPA_UNIQUE_ID 1337
|
||||
|
||||
#define MAX_BANDS 16 /* max 16 bandsn should be increased */
|
||||
#define AMPLIFIER 16.0
|
||||
|
||||
struct bandpass
|
||||
{
|
||||
LADSPA_Data c, f, att;
|
||||
|
||||
LADSPA_Data freq;
|
||||
LADSPA_Data low1, low2;
|
||||
LADSPA_Data mid1, mid2;
|
||||
LADSPA_Data high1, high2;
|
||||
LADSPA_Data y;
|
||||
};
|
||||
|
||||
struct bands_out{
|
||||
LADSPA_Data decay;
|
||||
LADSPA_Data oldval;
|
||||
LADSPA_Data level; /* 0.0 - 1.0 level of this output band */
|
||||
};
|
||||
|
||||
const LADSPA_Data decay_table[] =
|
||||
{
|
||||
1/100.0,
|
||||
1/100.0, 1/100.0, 1/100.0,
|
||||
1/125.0, 1/125.0, 1/125.0,
|
||||
1/166.0, 1/166.0, 1/166.0,
|
||||
1/200.0, 1/200.0, 1/200.0,
|
||||
1/250.0, 1/250.0, 1/250.0
|
||||
};
|
||||
|
||||
/* The port numbers for the plugin: */
|
||||
|
||||
#define PORT_FORMANT 0 /* the track to "vocodify */
|
||||
#define PORT_CARRIER 1 /* the track to control 1st track */
|
||||
#define PORT_OUTPUT 2 /* left output */
|
||||
#define PORT_OUTPUT2 3 /* right output */
|
||||
#define CTRL_BANDCOUNT 4 /* selected # of bands to use */
|
||||
#define CTRL_PAN 5 /* stereo balance for outputs */
|
||||
#define CTRL_BAND1LVL 6 /* start of bands level */
|
||||
|
||||
#define PORT_COUNT 6 + MAX_BANDS /* bands level */
|
||||
|
||||
|
||||
/* useful macros */
|
||||
#undef CLAMP
|
||||
#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
|
||||
|
||||
/* Instance data for the vocoder plugin */
|
||||
typedef struct {
|
||||
LADSPA_Data SampleRate;
|
||||
|
||||
int num_bands; /* current number of bands */
|
||||
float mainvol; /* main volume */
|
||||
|
||||
struct bandpass bands_formant[MAX_BANDS]; /* one structure per band */
|
||||
struct bandpass bands_carrier[MAX_BANDS]; /* one structure per band */
|
||||
struct bands_out bands_out[MAX_BANDS]; /* one structure per band */
|
||||
|
||||
/* Ports */
|
||||
|
||||
LADSPA_Data * portFormant; /* Formant signal port data location */
|
||||
LADSPA_Data * portCarrier; /* Carrier signal port data location */
|
||||
LADSPA_Data * portOutput; /* Output audio port data location */
|
||||
LADSPA_Data * portOutput2; /* Output audio port data location (copy of previous one) */
|
||||
LADSPA_Data * ctrlPan; /* PAN for output */
|
||||
LADSPA_Data * ctrlBandCount; /* Band count control */
|
||||
LADSPA_Data * ctrlBandLevels[MAX_BANDS]; /* level controls for each band */
|
||||
|
||||
} VocoderInstance;
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/* Construct a new plugin instance. */
|
||||
LADSPA_Handle
|
||||
instantiateVocoder(const LADSPA_Descriptor * Descriptor,
|
||||
unsigned long SampleRate) {
|
||||
VocoderInstance * vocoder;
|
||||
|
||||
vocoder = (VocoderInstance *)malloc(sizeof(VocoderInstance));
|
||||
|
||||
if (vocoder == NULL)
|
||||
return NULL;
|
||||
|
||||
vocoder->SampleRate = (LADSPA_Data)SampleRate;
|
||||
vocoder->num_bands = -1;
|
||||
|
||||
return vocoder;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/* Initialise and activate a plugin instance. */
|
||||
void
|
||||
activateVocoder(LADSPA_Handle Instance) {
|
||||
VocoderInstance *vocoder = (VocoderInstance *)Instance;
|
||||
int i;
|
||||
|
||||
vocoder->mainvol = 1.0 * AMPLIFIER;
|
||||
|
||||
for (i = 0; i < MAX_BANDS; i++)
|
||||
vocoder->bands_out[i].oldval = 0.0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/* Connect a port to a data location. */
|
||||
void
|
||||
connectPortToVocoder(LADSPA_Handle Instance,
|
||||
unsigned long Port,
|
||||
LADSPA_Data * DataLocation) {
|
||||
|
||||
VocoderInstance * vocoder;
|
||||
|
||||
vocoder = (VocoderInstance *)Instance;
|
||||
switch (Port) {
|
||||
case PORT_FORMANT: /* formant port? */
|
||||
vocoder->portFormant = DataLocation;
|
||||
break;
|
||||
case PORT_CARRIER: /* carrier port? */
|
||||
vocoder->portCarrier = DataLocation;
|
||||
break;
|
||||
case PORT_OUTPUT: /* output port? */
|
||||
vocoder->portOutput = DataLocation;
|
||||
break;
|
||||
case PORT_OUTPUT2: /* output port? */
|
||||
vocoder->portOutput2 = DataLocation;
|
||||
break;
|
||||
case CTRL_BANDCOUNT: /* band count control? */
|
||||
vocoder->ctrlBandCount = DataLocation;
|
||||
break;
|
||||
case CTRL_PAN: /* Pan control? */
|
||||
vocoder->ctrlPan = DataLocation;
|
||||
break;
|
||||
default: /* a band level control? */
|
||||
if (Port >= CTRL_BAND1LVL && Port < CTRL_BAND1LVL + MAX_BANDS)
|
||||
vocoder->ctrlBandLevels[Port - CTRL_BAND1LVL] = DataLocation;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
// vocoder_do_bandpasses /*fold00*/
|
||||
void vocoder_do_bandpasses(struct bandpass *bands, LADSPA_Data sample,
|
||||
VocoderInstance *vocoder)
|
||||
{
|
||||
int i;
|
||||
for (i=0; i < vocoder->num_bands; i++)
|
||||
{
|
||||
bands[i].high1 = sample - bands[i].f * bands[i].mid1 - bands[i].low1;
|
||||
bands[i].mid1 += bands[i].high1 * bands[i].c;
|
||||
bands[i].low1 += bands[i].mid1;
|
||||
|
||||
bands[i].high2 = bands[i].low1 - bands[i].f * bands[i].mid2
|
||||
- bands[i].low2;
|
||||
bands[i].mid2 += bands[i].high2 * bands[i].c;
|
||||
bands[i].low2 += bands[i].mid2;
|
||||
bands[i].y = bands[i].high2 * bands[i].att;
|
||||
}
|
||||
}
|
||||
|
||||
/* Run a vocoder instance for a block of SampleCount samples. */
|
||||
void
|
||||
runVocoder(LADSPA_Handle Instance,
|
||||
unsigned long SampleCount)
|
||||
{
|
||||
VocoderInstance *vocoder = (VocoderInstance *)Instance;
|
||||
int i, j, numbands, pan;
|
||||
float a;
|
||||
LADSPA_Data x, c;
|
||||
float fl, fr;
|
||||
|
||||
numbands = (int)(*vocoder->ctrlBandCount);
|
||||
if (numbands < 1 || numbands > MAX_BANDS) numbands = MAX_BANDS;
|
||||
|
||||
/* initialize bandpass information if num_bands control has changed,
|
||||
or on first run */
|
||||
if (vocoder->num_bands != numbands)
|
||||
{
|
||||
vocoder->num_bands = numbands;
|
||||
|
||||
for(i=0; i < numbands; i++)
|
||||
{
|
||||
memset(&vocoder->bands_formant[i], 0, sizeof(struct bandpass));
|
||||
|
||||
a = 16.0 * i/(double)numbands; // stretch existing bands
|
||||
|
||||
if (a < 4.0)
|
||||
vocoder->bands_formant[i].freq = 150 + 420 * a / 4.0;
|
||||
else
|
||||
vocoder->bands_formant[i].freq = 600 * pow (1.23, a - 4.0);
|
||||
|
||||
c = vocoder->bands_formant[i].freq * 2 * M_PI / vocoder->SampleRate;
|
||||
vocoder->bands_formant[i].c = c * c;
|
||||
|
||||
vocoder->bands_formant[i].f = 0.4/c;
|
||||
vocoder->bands_formant[i].att =
|
||||
1/(6.0 + ((exp (vocoder->bands_formant[i].freq
|
||||
/ vocoder->SampleRate) - 1) * 10));
|
||||
|
||||
memcpy(&vocoder->bands_carrier[i],
|
||||
&vocoder->bands_formant[i], sizeof(struct bandpass));
|
||||
|
||||
vocoder->bands_out[i].decay = decay_table[(int)a];
|
||||
vocoder->bands_out[i].level =
|
||||
CLAMP (*vocoder->ctrlBandLevels[i], 0.0, 1.0);
|
||||
}
|
||||
}
|
||||
else /* get current values of band level controls */
|
||||
{
|
||||
for (i = 0; i < numbands; i++)
|
||||
vocoder->bands_out[i].level = CLAMP (*vocoder->ctrlBandLevels[i],
|
||||
0.0, 1.0);
|
||||
}
|
||||
|
||||
for (i=0; i < SampleCount; i++)
|
||||
{
|
||||
vocoder_do_bandpasses (vocoder->bands_carrier,
|
||||
vocoder->portCarrier[i], vocoder);
|
||||
vocoder_do_bandpasses (vocoder->bands_formant,
|
||||
vocoder->portFormant[i], vocoder);
|
||||
|
||||
vocoder->portOutput[i] = 0.0;
|
||||
vocoder->portOutput2[i] = 0.0;
|
||||
for (j=0; j < numbands; j++)
|
||||
{
|
||||
vocoder->bands_out[j].oldval = vocoder->bands_out[j].oldval
|
||||
+ (fabs (vocoder->bands_formant[j].y)
|
||||
- vocoder->bands_out[j].oldval)
|
||||
* vocoder->bands_out[j].decay;
|
||||
x = vocoder->bands_carrier[j].y * vocoder->bands_out[j].oldval;
|
||||
vocoder->portOutput[i] += x * vocoder->bands_out[j].level;
|
||||
vocoder->portOutput2[i] += x * vocoder->bands_out[j].level;
|
||||
}
|
||||
/* treat paning + main volume */
|
||||
pan = (int)(*vocoder->ctrlPan);
|
||||
fl = fr = 1.;
|
||||
if (pan != 0) { /* no paning, don't compute useless values */
|
||||
if (pan > 0) { /* reduce left */
|
||||
fl = (100.-pan)/100.;
|
||||
} else {
|
||||
fr = (100.+pan)/100.;
|
||||
}
|
||||
}
|
||||
/* apply volume and paning */
|
||||
vocoder->portOutput[i] *= vocoder->mainvol * fl;
|
||||
vocoder->portOutput2[i] *= vocoder->mainvol * fr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/* Throw away a vocoder instance. */
|
||||
void
|
||||
cleanupVocoder(LADSPA_Handle Instance)
|
||||
{
|
||||
VocoderInstance * Vocoder;
|
||||
Vocoder = (VocoderInstance *)Instance;
|
||||
free(Vocoder);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
LADSPA_Descriptor * g_psDescriptor = NULL;
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/* _init() is called automatically when the plugin library is first
|
||||
loaded. */
|
||||
void
|
||||
_init() {
|
||||
char ** pcPortNames;
|
||||
LADSPA_PortDescriptor * piPortDescriptors;
|
||||
LADSPA_PortRangeHint * psPortRangeHints;
|
||||
int i;
|
||||
|
||||
g_psDescriptor = (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor));
|
||||
|
||||
if (g_psDescriptor) {
|
||||
g_psDescriptor->UniqueID = LADSPA_UNIQUE_ID;
|
||||
g_psDescriptor->Label = strdup("vocoder-lmms");
|
||||
g_psDescriptor->Properties = LADSPA_PROPERTY_HARD_RT_CAPABLE;
|
||||
g_psDescriptor->Name = strdup("Vocoder for LMMS");
|
||||
g_psDescriptor->Maker = strdup("Achim Settelmeier (adapted to LADSPA by Josh Green, adapted to LMMS by Hexasoft)");
|
||||
g_psDescriptor->Copyright = strdup("GPL");
|
||||
g_psDescriptor->PortCount = PORT_COUNT;
|
||||
piPortDescriptors = (LADSPA_PortDescriptor *)calloc(PORT_COUNT,
|
||||
sizeof(LADSPA_PortDescriptor));
|
||||
g_psDescriptor->PortDescriptors
|
||||
= (const LADSPA_PortDescriptor *)piPortDescriptors;
|
||||
piPortDescriptors[PORT_FORMANT]
|
||||
= LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO;
|
||||
piPortDescriptors[PORT_CARRIER]
|
||||
= LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO;
|
||||
piPortDescriptors[PORT_OUTPUT]
|
||||
= LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO;
|
||||
piPortDescriptors[PORT_OUTPUT2]
|
||||
= LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO;
|
||||
piPortDescriptors[CTRL_BANDCOUNT]
|
||||
= LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL;
|
||||
piPortDescriptors[CTRL_PAN]
|
||||
= LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL;
|
||||
|
||||
pcPortNames = (char **)calloc(PORT_COUNT, sizeof(char *));
|
||||
g_psDescriptor->PortNames = (const char **)pcPortNames;
|
||||
pcPortNames[PORT_FORMANT] = strdup("Formant-in");
|
||||
pcPortNames[PORT_CARRIER] = strdup("Carrier-in");
|
||||
pcPortNames[PORT_OUTPUT] = strdup("Output-out");
|
||||
pcPortNames[PORT_OUTPUT2] = strdup("Output2-out");
|
||||
pcPortNames[CTRL_BANDCOUNT] = strdup("Number of bands");
|
||||
pcPortNames[CTRL_PAN] = strdup("Left/Right");
|
||||
|
||||
psPortRangeHints = ((LADSPA_PortRangeHint *)
|
||||
calloc(PORT_COUNT, sizeof(LADSPA_PortRangeHint)));
|
||||
g_psDescriptor->PortRangeHints
|
||||
= (const LADSPA_PortRangeHint *)psPortRangeHints;
|
||||
psPortRangeHints[PORT_FORMANT].HintDescriptor = 0;
|
||||
psPortRangeHints[PORT_CARRIER].HintDescriptor = 0;
|
||||
psPortRangeHints[PORT_OUTPUT].HintDescriptor = 0;
|
||||
psPortRangeHints[PORT_OUTPUT2].HintDescriptor = 0;
|
||||
psPortRangeHints[CTRL_BANDCOUNT].HintDescriptor
|
||||
= LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE
|
||||
| LADSPA_HINT_INTEGER;
|
||||
psPortRangeHints[CTRL_BANDCOUNT].LowerBound = 1;
|
||||
psPortRangeHints[CTRL_BANDCOUNT].UpperBound = MAX_BANDS;
|
||||
psPortRangeHints[CTRL_PAN].HintDescriptor
|
||||
= LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE
|
||||
| LADSPA_HINT_INTEGER;
|
||||
psPortRangeHints[CTRL_PAN].LowerBound = -100;
|
||||
psPortRangeHints[CTRL_PAN].UpperBound = +100;
|
||||
|
||||
for (i=CTRL_BAND1LVL; i < CTRL_BAND1LVL + MAX_BANDS; i++)
|
||||
{
|
||||
piPortDescriptors[i] = LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL;
|
||||
pcPortNames[i] = malloc (sizeof ("Band 99 Level"));
|
||||
sprintf(pcPortNames[i], "Band %d Level", i - CTRL_BAND1LVL + 1);
|
||||
psPortRangeHints[i].HintDescriptor
|
||||
= LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE;
|
||||
psPortRangeHints[i].LowerBound = 0;
|
||||
psPortRangeHints[i].UpperBound = 1;
|
||||
}
|
||||
|
||||
g_psDescriptor->instantiate = instantiateVocoder;
|
||||
g_psDescriptor->connect_port = connectPortToVocoder;
|
||||
g_psDescriptor->activate = activateVocoder;
|
||||
g_psDescriptor->run = runVocoder;
|
||||
g_psDescriptor->run_adding = NULL;
|
||||
g_psDescriptor->set_run_adding_gain = NULL;
|
||||
g_psDescriptor->deactivate = NULL;
|
||||
g_psDescriptor->cleanup = cleanupVocoder;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/* _fini() is called automatically when the library is unloaded. */
|
||||
void
|
||||
_fini() {
|
||||
long lIndex;
|
||||
if (g_psDescriptor) {
|
||||
free((char *)g_psDescriptor->Label);
|
||||
free((char *)g_psDescriptor->Name);
|
||||
free((char *)g_psDescriptor->Maker);
|
||||
free((char *)g_psDescriptor->Copyright);
|
||||
free((LADSPA_PortDescriptor *)g_psDescriptor->PortDescriptors);
|
||||
for (lIndex = 0; lIndex < g_psDescriptor->PortCount; lIndex++)
|
||||
free((char *)(g_psDescriptor->PortNames[lIndex]));
|
||||
free((char **)g_psDescriptor->PortNames);
|
||||
free((LADSPA_PortRangeHint *)g_psDescriptor->PortRangeHints);
|
||||
free(g_psDescriptor);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/* Return a descriptor of the requested plugin type. Only one plugin
|
||||
type is available in this library. */
|
||||
const LADSPA_Descriptor *
|
||||
ladspa_descriptor(unsigned long Index) {
|
||||
if (Index == 0)
|
||||
return g_psDescriptor;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/* EOF */
|
||||
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 26 KiB |
@@ -81,6 +81,7 @@ PeakControllerEffect::~PeakControllerEffect()
|
||||
if( idx >= 0 )
|
||||
{
|
||||
PeakController::s_effects.remove( idx );
|
||||
engine::getSong()->removeController( m_autoController );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "PeakController.h"
|
||||
#include "peak_controller_effect_controls.h"
|
||||
#include "peak_controller_effect.h"
|
||||
#include "preset_preview_play_handle.h"
|
||||
|
||||
|
||||
PeakControllerEffectControls::
|
||||
@@ -66,7 +67,7 @@ void PeakControllerEffectControls::loadSettings( const QDomElement & _this )
|
||||
}
|
||||
m_effect->m_effectId = effectId;
|
||||
|
||||
if( m_effect->m_autoController )
|
||||
if( m_effect->m_autoController && presetPreviewPlayHandle::isPreviewing() == false )
|
||||
{
|
||||
delete m_effect->m_autoController;
|
||||
m_effect->m_autoController = 0;
|
||||
|
||||
3
plugins/sfxr/CMakeLists.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
INCLUDE(BuildPlugin)
|
||||
|
||||
BUILD_PLUGIN(sfxr sfxr.cpp sfxr.h MOCFILES sfxr.h EMBEDDED_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.png)
|
||||
BIN
plugins/sfxr/artwork.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
plugins/sfxr/blip_active.png
Normal file
|
After Width: | Height: | Size: 222 B |
BIN
plugins/sfxr/blip_inactive.png
Normal file
|
After Width: | Height: | Size: 334 B |
BIN
plugins/sfxr/explosion_active.png
Normal file
|
After Width: | Height: | Size: 264 B |
BIN
plugins/sfxr/explosion_inactive.png
Normal file
|
After Width: | Height: | Size: 350 B |
BIN
plugins/sfxr/hit_active.png
Normal file
|
After Width: | Height: | Size: 210 B |
BIN
plugins/sfxr/hit_inactive.png
Normal file
|
After Width: | Height: | Size: 330 B |
BIN
plugins/sfxr/jump_active.png
Normal file
|
After Width: | Height: | Size: 272 B |
BIN
plugins/sfxr/jump_inactive.png
Normal file
|
After Width: | Height: | Size: 347 B |
BIN
plugins/sfxr/laser_active.png
Normal file
|
After Width: | Height: | Size: 191 B |
BIN
plugins/sfxr/laser_inactive.png
Normal file
|
After Width: | Height: | Size: 318 B |
BIN
plugins/sfxr/logo.png
Normal file
|
After Width: | Height: | Size: 433 B |
BIN
plugins/sfxr/mutate_active.png
Normal file
|
After Width: | Height: | Size: 332 B |
BIN
plugins/sfxr/mutate_inactive.png
Normal file
|
After Width: | Height: | Size: 379 B |
BIN
plugins/sfxr/pickup_active.png
Normal file
|
After Width: | Height: | Size: 274 B |
BIN
plugins/sfxr/pickup_inactive.png
Normal file
|
After Width: | Height: | Size: 343 B |
BIN
plugins/sfxr/powerup_active.png
Normal file
|
After Width: | Height: | Size: 236 B |
BIN
plugins/sfxr/powerup_inactive.png
Normal file
|
After Width: | Height: | Size: 337 B |
BIN
plugins/sfxr/randomize_active.png
Normal file
|
After Width: | Height: | Size: 339 B |
BIN
plugins/sfxr/randomize_inactive.png
Normal file
|
After Width: | Height: | Size: 383 B |
170
plugins/sfxr/readme.txt
Normal file
@@ -0,0 +1,170 @@
|
||||
This is a port of sfxr to LMMS, ported by Wong Cho Ching.
|
||||
|
||||
NOTE: Do NOT remove the MIT license below to prevent legal problem.
|
||||
Original Readme File:
|
||||
|
||||
(http://www.drpetter.se/project_sfxr.html)
|
||||
|
||||
-----------------------------
|
||||
sfxr - sound effect generator
|
||||
-----------------------------
|
||||
by DrPetter, 2007-12-14
|
||||
developed for LD48#10
|
||||
-----------------------------
|
||||
|
||||
|
||||
Basic usage:
|
||||
|
||||
Start the application, then hit
|
||||
some of the buttons on the left
|
||||
side to generate random sounds
|
||||
matching the button descriptions.
|
||||
|
||||
Press "Export .WAV" to save the
|
||||
current sound as a WAV audio file.
|
||||
Click the buttons below to change
|
||||
WAV format in terms of bits per
|
||||
sample and sample rate.
|
||||
|
||||
If you find a sound that is sort
|
||||
of interesting but not quite what
|
||||
you want, you can drag some sliders
|
||||
around until it sounds better.
|
||||
|
||||
The Randomize button generates
|
||||
something completely random.
|
||||
|
||||
Mutate slightly alters the current
|
||||
parameters to automatically create
|
||||
a variation of the sound.
|
||||
|
||||
|
||||
|
||||
Advanced usage:
|
||||
|
||||
Figure out what each slider does and
|
||||
use them to adjust particular aspects
|
||||
of the current sound...
|
||||
|
||||
Press the right mouse button on a slider
|
||||
to reset it to a value of zero.
|
||||
|
||||
Press Space or Enter to play the current sound.
|
||||
|
||||
The Save/Load sound buttons allow saving
|
||||
and loading of program parameters to work
|
||||
on a sound over several sessions.
|
||||
|
||||
Volume setting is saved with the sound and
|
||||
exported to WAV. If you increase it too much
|
||||
there's a risk of clipping.
|
||||
|
||||
Some parameters influence the sound during
|
||||
playback (particularly when using a non-zero
|
||||
repeat speed), and dragging these sliders
|
||||
can cause some interesting effects.
|
||||
To record this you will need to use an external
|
||||
recording application, for instance Audacity.
|
||||
Set the recording source in that application
|
||||
to "Wave", "Stereo Mix", "Mixed Output" or similar.
|
||||
|
||||
Using an external sound editor to capture and edit
|
||||
sound can also be used to string several sounds
|
||||
together for more complex results.
|
||||
|
||||
Parameter description:
|
||||
- The top four buttons select base waveform
|
||||
- First four parameters control the volume envelope
|
||||
Attack is the beginning of the sound,
|
||||
longer attack means a smoother start.
|
||||
Sustain is how long the volume is held constant
|
||||
before fading out.
|
||||
Increase Sustain Punch to cause a popping
|
||||
effect with increased (and falling) volume
|
||||
during the sustain phase.
|
||||
Decay is the fade-out time.
|
||||
- Next six are for controlling the sound pitch or
|
||||
frequency.
|
||||
Start frequency is pretty obvious. Has a large
|
||||
impact on the overall sound.
|
||||
Min frequency represents a cutoff that stops all
|
||||
sound if it's passed during a downward slide.
|
||||
Slide sets the speed at which the frequency should
|
||||
be swept (up or down).
|
||||
Delta slide is the "slide of slide", or rate of change
|
||||
in the slide speed.
|
||||
Vibrato depth/speed makes for an oscillating
|
||||
frequency effect at various strengths and rates.
|
||||
- Then we have two parameters for causing an abrupt
|
||||
change in pitch after a ceratin delay.
|
||||
Amount is pitch change (up or down)
|
||||
and Speed indicates time to wait before changing
|
||||
the pitch.
|
||||
- Following those are two parameters specific to the
|
||||
squarewave waveform.
|
||||
The duty cycle of a square describes its shape
|
||||
in terms of how large the positive vs negative
|
||||
sections are. It can be swept up or down by
|
||||
changing the second parameter.
|
||||
- Repeat speed, when not zero, causes the frequency
|
||||
and duty parameters to be reset at regular intervals
|
||||
while the envelope and filter continue unhindered.
|
||||
This can make for some interesting pulsating effects.
|
||||
- Phaser offset overlays a delayed copy of the audio
|
||||
stream on top of itself, resulting in a kind of tight
|
||||
reverb or sci-fi effect.
|
||||
This parameter can also be swept like many others.
|
||||
- Finally, the bottom five sliders control two filters
|
||||
which are applied after all other effects.
|
||||
The first one is a resonant lowpass filter which has
|
||||
a sweepable cutoff frequency.
|
||||
The other is a highpass filter which can be used to
|
||||
remove undesired low frequency hum in "light" sounds.
|
||||
|
||||
|
||||
----------------------
|
||||
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
Basically, I don't care what you do with it, anything goes.
|
||||
|
||||
To please all the troublesome folks who request a formal license,
|
||||
I attach the "MIT license" as follows:
|
||||
|
||||
--
|
||||
|
||||
Copyright (c) 2007 Tomas Pettersson
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
|
||||
|
||||
----------------------
|
||||
|
||||
http://www.drpetter.se
|
||||
|
||||
drpetter@gmail.com
|
||||
|
||||
----------------------
|
||||
|
||||
1052
plugins/sfxr/sfxr.cpp
Normal file
301
plugins/sfxr/sfxr.h
Normal file
@@ -0,0 +1,301 @@
|
||||
/*
|
||||
* sfxr.h - declaration of classes of the LMMS sfxr plugin
|
||||
* Originally written by Tomas Pettersson. For the original license,
|
||||
* please read readme.txt in this directory
|
||||
*
|
||||
* Copyright (c) 2014 Wong Cho Ching
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
* 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 (see COPYING); if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301 USA.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _SFXR_H
|
||||
#define _SFXR_H
|
||||
|
||||
#include "Instrument.h"
|
||||
#include "InstrumentView.h"
|
||||
#include "knob.h"
|
||||
#include "graph.h"
|
||||
#include "pixmap_button.h"
|
||||
#include "led_checkbox.h"
|
||||
|
||||
|
||||
enum SfxrWaves
|
||||
{
|
||||
SQR_WAVE, SAW_WAVE, SINE_WAVE, NOISE_WAVE, WAVES_NUM
|
||||
};
|
||||
|
||||
const int WAVEFORM_BASE_X = 20;
|
||||
const int WAVEFORM_BASE_Y = 14;
|
||||
const int WAVEFORM_BUTTON_WIDTH = 16;
|
||||
|
||||
const int GENERATOR_BASE_X = 110;
|
||||
const int GENERATOR_BASE_Y = 24;
|
||||
const int GENERATOR_BUTTON_WIDTH = 16;
|
||||
|
||||
const int RAND_BUTTON_X = 160;
|
||||
const int RAND_BUTTON_Y = 4;
|
||||
|
||||
const int MUTA_BUTTON_X = 205;
|
||||
const int MUTA_BUTTON_Y = 4;
|
||||
|
||||
const int KNOBS_BASE_X = 20;
|
||||
const int KNOBS_BASE_Y = 50;
|
||||
const int KNOB_BLOCK_SIZE_X = 40;
|
||||
const int KNOB_BLOCK_SIZE_Y = 40;
|
||||
|
||||
|
||||
|
||||
|
||||
class sfxrInstrument;
|
||||
|
||||
|
||||
|
||||
class SfxrSynth
|
||||
{
|
||||
public:
|
||||
SfxrSynth( const sfxrInstrument * s );
|
||||
virtual ~SfxrSynth();
|
||||
|
||||
void resetSample( bool restart );
|
||||
void update( sampleFrame * buffer, const fpp_t frameNum );
|
||||
|
||||
bool isPlaying() const;
|
||||
|
||||
private:
|
||||
const sfxrInstrument * s;
|
||||
bool playing_sample;
|
||||
int phase;
|
||||
double fperiod;
|
||||
double fmaxperiod;
|
||||
double fslide;
|
||||
double fdslide;
|
||||
int period;
|
||||
float square_duty;
|
||||
float square_slide;
|
||||
int env_stage;
|
||||
int env_time;
|
||||
int env_length[3];
|
||||
float env_vol;
|
||||
float fphase;
|
||||
float fdphase;
|
||||
int iphase;
|
||||
float phaser_buffer[1024];
|
||||
int ipp;
|
||||
float noise_buffer[32];
|
||||
float fltp;
|
||||
float fltdp;
|
||||
float fltw;
|
||||
float fltw_d;
|
||||
float fltdmp;
|
||||
float fltphp;
|
||||
float flthp;
|
||||
float flthp_d;
|
||||
float vib_phase;
|
||||
float vib_speed;
|
||||
float vib_amp;
|
||||
int rep_time;
|
||||
int rep_limit;
|
||||
int arp_time;
|
||||
int arp_limit;
|
||||
double arp_mod;
|
||||
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief A class that simplify the constructor of FloatModel, with value [0,1]
|
||||
*/
|
||||
class SfxrZeroToOneFloatModel : public FloatModel
|
||||
{
|
||||
public:
|
||||
SfxrZeroToOneFloatModel(float val, Model * parent):
|
||||
FloatModel( val, 0.0, 1.0, 0.001, parent)
|
||||
{
|
||||
}
|
||||
/* purpose: prevent the initial value of the model from being changed */
|
||||
virtual void loadSettings( const QDomElement& element, const QString& name = QString( "value" ) )
|
||||
{
|
||||
float oldInitValue = initValue();
|
||||
FloatModel::loadSettings(element, name);
|
||||
float oldValue = value();
|
||||
setInitValue(oldInitValue);
|
||||
setValue(oldValue);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief A class that simplify the constructor of FloatModel, with value [-1,1]
|
||||
*/
|
||||
class SfxrNegPosOneFloatModel : public FloatModel
|
||||
{
|
||||
public:
|
||||
SfxrNegPosOneFloatModel(float val, Model * parent):
|
||||
FloatModel( val, -1.0, 1.0, 0.001, parent)
|
||||
{
|
||||
}
|
||||
/* purpose: prevent the initial value of the model from being changed */
|
||||
virtual void loadSettings( const QDomElement& element, const QString& name = QString( "value" ) )
|
||||
{
|
||||
float oldInitValue = initValue();
|
||||
FloatModel::loadSettings(element, name);
|
||||
float oldValue = value();
|
||||
setInitValue(oldInitValue);
|
||||
setValue(oldValue);
|
||||
}
|
||||
};
|
||||
|
||||
class sfxrInstrument : public Instrument
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
sfxrInstrument(InstrumentTrack * _instrument_track );
|
||||
virtual ~sfxrInstrument();
|
||||
|
||||
virtual void playNote( notePlayHandle * _n, sampleFrame * _working_buffer );
|
||||
virtual void deleteNotePluginData( notePlayHandle * _n );
|
||||
|
||||
virtual void saveSettings( QDomDocument & _doc,
|
||||
QDomElement & _parent );
|
||||
virtual void loadSettings( const QDomElement & _this );
|
||||
|
||||
virtual QString nodeName() const;
|
||||
|
||||
virtual PluginView * instantiateView( QWidget * _parent );
|
||||
|
||||
void resetModels();
|
||||
|
||||
|
||||
private:
|
||||
QMutex m_synthMutex;
|
||||
SfxrZeroToOneFloatModel m_attModel;
|
||||
SfxrZeroToOneFloatModel m_holdModel;
|
||||
SfxrZeroToOneFloatModel m_susModel;
|
||||
SfxrZeroToOneFloatModel m_decModel;
|
||||
|
||||
SfxrZeroToOneFloatModel m_startFreqModel;
|
||||
SfxrZeroToOneFloatModel m_minFreqModel;
|
||||
SfxrNegPosOneFloatModel m_slideModel;
|
||||
SfxrNegPosOneFloatModel m_dSlideModel;
|
||||
SfxrZeroToOneFloatModel m_vibDepthModel;
|
||||
SfxrZeroToOneFloatModel m_vibSpeedModel;
|
||||
|
||||
SfxrNegPosOneFloatModel m_changeAmtModel;
|
||||
SfxrZeroToOneFloatModel m_changeSpeedModel;
|
||||
|
||||
SfxrZeroToOneFloatModel m_sqrDutyModel;
|
||||
SfxrNegPosOneFloatModel m_sqrSweepModel;
|
||||
|
||||
SfxrZeroToOneFloatModel m_repeatSpeedModel;
|
||||
|
||||
SfxrNegPosOneFloatModel m_phaserOffsetModel;
|
||||
SfxrNegPosOneFloatModel m_phaserSweepModel;
|
||||
|
||||
SfxrZeroToOneFloatModel m_lpFilCutModel;
|
||||
SfxrNegPosOneFloatModel m_lpFilCutSweepModel;
|
||||
SfxrZeroToOneFloatModel m_lpFilResoModel;
|
||||
SfxrZeroToOneFloatModel m_hpFilCutModel;
|
||||
SfxrNegPosOneFloatModel m_hpFilCutSweepModel;
|
||||
|
||||
IntModel m_waveFormModel;
|
||||
|
||||
friend class sfxrInstrumentView;
|
||||
friend class SfxrSynth;
|
||||
};
|
||||
|
||||
|
||||
|
||||
class sfxrInstrumentView : public InstrumentView
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
sfxrInstrumentView( Instrument * _instrument,
|
||||
QWidget * _parent );
|
||||
|
||||
virtual ~sfxrInstrumentView() {};
|
||||
|
||||
protected slots:
|
||||
void genPickup();
|
||||
void genLaser();
|
||||
void genExplosion();
|
||||
void genPowerup();
|
||||
void genHit();
|
||||
void genJump();
|
||||
void genBlip();
|
||||
void randomize();
|
||||
void mutate();
|
||||
|
||||
private:
|
||||
virtual void modelChanged();
|
||||
|
||||
knob * m_attKnob; //Attack Time
|
||||
knob * m_holdKnob; //Sustain Time
|
||||
knob * m_susKnob; //Sustain Punch
|
||||
knob * m_decKnob; //Decay Time
|
||||
|
||||
knob * m_startFreqKnob; //Start Frequency
|
||||
knob * m_minFreqKnob; //Min Frequency
|
||||
knob * m_slideKnob; //Slide
|
||||
knob * m_dSlideKnob; //Delta Slide
|
||||
knob * m_vibDepthKnob; //Vibrato Depth
|
||||
knob * m_vibSpeedKnob; //Vibrato Speed
|
||||
|
||||
knob * m_changeAmtKnob; //Change Amount
|
||||
knob * m_changeSpeedKnob; //Change Speed
|
||||
|
||||
knob * m_sqrDutyKnob; //Squre Duty
|
||||
knob * m_sqrSweepKnob; //Squre Sweep
|
||||
|
||||
knob * m_repeatSpeedKnob; //Repeat Speed
|
||||
|
||||
knob * m_phaserOffsetKnob; //Phaser Offset
|
||||
knob * m_phaserSweepKnob; //Phaser Sweep
|
||||
|
||||
knob * m_lpFilCutKnob; //LP Filter Cutoff
|
||||
knob * m_lpFilCutSweepKnob; //LP Filter Cutoff Sweep
|
||||
knob * m_lpFilResoKnob; //LP Filter Resonance
|
||||
knob * m_hpFilCutKnob; //HP Filter Cutoff
|
||||
knob * m_hpFilCutSweepKnob; //HP Filter Cutoff Sweep
|
||||
|
||||
automatableButtonGroup * m_waveBtnGroup;
|
||||
pixmapButton * m_sqrWaveBtn; //NOTE: This button has Squre Duty
|
||||
//and Squre Speed configurable
|
||||
pixmapButton * m_sawWaveBtn;
|
||||
pixmapButton * m_sinWaveBtn;
|
||||
pixmapButton * m_noiseWaveBtn;
|
||||
|
||||
|
||||
pixmapButton * m_pickupBtn;
|
||||
pixmapButton * m_laserBtn;
|
||||
pixmapButton * m_explosionBtn;
|
||||
pixmapButton * m_powerupBtn;
|
||||
pixmapButton * m_hitBtn;
|
||||
pixmapButton * m_jumpBtn;
|
||||
pixmapButton * m_blipBtn;
|
||||
|
||||
pixmapButton * m_randomizeBtn;
|
||||
pixmapButton * m_mutateBtn;
|
||||
|
||||
static QPixmap * s_artwork;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 84 KiB |
@@ -89,12 +89,24 @@ public:
|
||||
m_dataMutex.unlock();
|
||||
}
|
||||
|
||||
bool isPreviewing()
|
||||
{
|
||||
bool ret = m_dataMutex.tryLock();
|
||||
if( ret == true )
|
||||
{
|
||||
m_dataMutex.unlock();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
InstrumentTrack * m_previewInstrumentTrack;
|
||||
notePlayHandle * m_previewNote;
|
||||
QMutex m_dataMutex;
|
||||
|
||||
friend class presetPreviewPlayHandle;
|
||||
|
||||
} ;
|
||||
|
||||
|
||||
@@ -242,3 +254,17 @@ ConstNotePlayHandleList presetPreviewPlayHandle::nphsOfInstrumentTrack(
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool presetPreviewPlayHandle::isPreviewing()
|
||||
{
|
||||
bool ret = s_previewTC->m_dataMutex.tryLock();
|
||||
if( ret == true )
|
||||
{
|
||||
s_previewTC->m_dataMutex.unlock();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -201,7 +201,7 @@ song::~song()
|
||||
}
|
||||
if( m_SncVSTplug != NULL )
|
||||
{
|
||||
delete m_SncVSTplug;
|
||||
free( m_SncVSTplug );
|
||||
m_SncVSTplug = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@ cpuloadWidget::cpuloadWidget( QWidget * _parent ) :
|
||||
setFixedSize( m_background.width(), m_background.height() );
|
||||
|
||||
m_temp = QPixmap( width(), height() );
|
||||
|
||||
|
||||
connect( &m_updateTimer, SIGNAL( timeout() ),
|
||||
this, SLOT( updateCpuLoad() ) );
|
||||
@@ -66,7 +67,8 @@ void cpuloadWidget::paintEvent( QPaintEvent * )
|
||||
if( m_changed == true )
|
||||
{
|
||||
m_changed = false;
|
||||
|
||||
|
||||
m_temp.fill( QColor(0,0,0,0) );
|
||||
QPainter p( &m_temp );
|
||||
p.drawPixmap( 0, 0, m_background );
|
||||
|
||||
|
||||
@@ -141,7 +141,7 @@ void visualizationWidget::paintEvent( QPaintEvent * )
|
||||
// and set color according to that...
|
||||
if( max_level * master_output < 0.9 )
|
||||
{
|
||||
p.setPen( QColor( 128, 224, 128 ) );
|
||||
p.setPen( QColor( 71, 253, 133 ) );
|
||||
}
|
||||
else if( max_level * master_output < 1.0 )
|
||||
{
|
||||
|
||||