Commit 96830acb authored by Jaromír Mikeš's avatar Jaromír Mikeš

New upstream version 20161230

parent a488a657
...@@ -42,7 +42,7 @@ clv2:Mono ...@@ -42,7 +42,7 @@ clv2:Mono
bufsz:maxBlockLength 8192 ; bufsz:maxBlockLength 8192 ;
lv2:extensionData work:interface , lv2:extensionData work:interface ,
state:interface ; state:interface ;
lv2:optionalFeature lv2:hardRTCapable, state:threadSafeRestore, <http://ardour.org/lv2/ext#noSampleAccurateControls> ; lv2:optionalFeature lv2:hardRTCapable, state:threadSafeRestore, bufsz:coarseBlockLength;
@CLV2UI@ @CLV2UI@
patch:writable clv2:impulse ; patch:writable clv2:impulse ;
lv2:port [ lv2:port [
......
...@@ -1057,8 +1057,9 @@ instantiate ( ...@@ -1057,8 +1057,9 @@ instantiate (
ui->write = write_function; ui->write = write_function;
ui->controller = controller; ui->controller = controller;
ui->hover = -1; ui->hover = -1;
ui->disable_signals = true;
*widget = toplevel (ui, ui_toplevel); *widget = toplevel (ui, ui_toplevel);
ui->disable_signals = false;
return ui; return ui;
} }
......
...@@ -9,4 +9,5 @@ ...@@ -9,4 +9,5 @@
modgui:javascript <modgui/x42-autotune.js> ; modgui:javascript <modgui/x42-autotune.js> ;
modgui:brand "x42" ; modgui:brand "x42" ;
modgui:label "x42-autotune" ; modgui:label "x42-autotune" ;
modgui:monitoredOutputs [ lv2:symbol "nmask" ] , [ lv2:symbol "nset" ] , [ lv2:symbol "error" ] ;
] . ] .
...@@ -145,16 +145,59 @@ ...@@ -145,16 +145,59 @@
margin: 1px 5px; margin: 1px 5px;
} }
/* = ENUMERATED LIST /* = TOP-Row (enum + pitch-error bars)
================================================ */ ================================================ */
.x42-autotune{{{cns}}} .mod-enumerated-group { .x42-autotune{{{cns}}} .at-toprow {
height:31px; height:31px;
margin:20px auto 5px auto !important; margin:20px auto 5px auto !important;
position:relative; width:300px;
width:100px;
z-index:35; z-index:35;
} }
.x42-autotune{{{cns}}} .pitcherror,
.x42-autotune{{{cns}}} .mod-enumerated-group {
height:31px;
margin:0 10px 0 10px;
position:relative;
width:130px;
float:left;
}
.x42-autotune{{{cns}}} .pitcherror,
.x42-autotune{{{cns}}} .mod-enumerated .mod-enumerated-selected {
background-color:rgba(0,0,0,.3);
box-shadow:inset 0 0 4px rgba(0,0,0,.3);
border-radius:4px;
}
/* = Pitch Error display
================================================ */
.x42-autotune{{{cns}}} .pitcherror {
background-image:url(/resources/pitcherror.png{{{ns}}});
background-position:center;
background-repeat:no-repeat;
overflow:hidden;
}
.x42-autotune{{{cns}}} .pitcherror .bar {
background:#00ff00;
box-shadow: 0px 0px 0px 1px #000;
position:absolute;
width:3px;
margin:0;
padding:0;
height:31px;
top:0px;
left:63px;
}
.x42-autotune{{{cns}}} .pitcherror .bar.bad {
background:#ff0000;
}
/* = ENUMERATED LIST
================================================ */
.x42-autotune{{{cns}}} .mod-enumerated { .x42-autotune{{{cns}}} .mod-enumerated {
background-image:url(/resources/dropdown-arrow-black.png{{{ns}}}); background-image:url(/resources/dropdown-arrow-black.png{{{ns}}});
background-position:right center; background-position:right center;
...@@ -170,9 +213,6 @@ ...@@ -170,9 +213,6 @@
} }
.x42-autotune{{{cns}}} .mod-enumerated .mod-enumerated-selected { .x42-autotune{{{cns}}} .mod-enumerated .mod-enumerated-selected {
background-color:rgba(0,0,0,.3);
box-shadow:inset 0 0 4px rgba(0,0,0,.3);
border-radius:4px;
padding:3px 9px; padding:3px 9px;
} }
......
...@@ -3,15 +3,20 @@ ...@@ -3,15 +3,20 @@
<div class="x42-brand"><h1 title="Brought to you by x42.">x42</h1></div> <div class="x42-brand"><h1 title="Brought to you by x42.">x42</h1></div>
<div class="x42-plugin-name"><h1>fAT1</h1></div> <div class="x42-plugin-name"><h1>fAT1</h1></div>
<div class="mod-control-group mod-enumerated-group bottom clearfix"> <div class="mod-control-group at-toprow clearfix">
<div class="mod-enumerated" mod-role="input-control-port" mod-port-symbol="mode" mod-widget="custom-select"> <div class="mod-enumerated-group clearfix">
<div mod-role="input-control-value" mod-port-symbol="mode" class="mod-enumerated-selected"></div> <div class="mod-enumerated" mod-role="input-control-port" mod-port-symbol="mode" mod-widget="custom-select">
<div class="mod-enumerated-list"> <div mod-role="input-control-value" mod-port-symbol="mode" class="mod-enumerated-selected"></div>
<div mod-role="enumeration-option" mod-port-value="0">Auto</div> <div class="mod-enumerated-list">
<div mod-role="enumeration-option" mod-port-value="1">MIDI</div> <div mod-role="enumeration-option" mod-port-value="0">Auto</div>
<div mod-role="enumeration-option" mod-port-value="2">Manual</div> <div mod-role="enumeration-option" mod-port-value="1">MIDI</div>
</div> <div mod-role="enumeration-option" mod-port-value="2">Manual</div>
</div> </div>
</div>
</div>
<div class="pitcherror clearfix" title="Indicate the pitch error of the input signal with respect to the current note. The range is +/- one semitone.">
<div class="pitcherror bar" mod-role="pitch-error"></div>
</div>
</div> </div>
<div class="mod-control-group mod-aluminium top clearfix"> <div class="mod-control-group mod-aluminium top clearfix">
......
...@@ -30,34 +30,83 @@ function (event) { ...@@ -30,34 +30,83 @@ function (event) {
} }
} }
function update_midi_mask (data) {
if (data.mode == 2 || (data.mode == 0 && data.nmask == 0)) {
/* manual mode -- control input applies */
/* auto mode -- control applies IFF no midi notes are set */
for (k = 0; k < 12; ++k) {
mask_key (k, 0);
}
return;
}
/* midi rulez */
for (k = 0; k < 12; ++k) {
mask_key (k, (Math.floor (data.nmask) & (1 << k)) == 0 ? -1 : 1);
}
}
function update_note_set (data) {
for (k = 0; k < 12; ++k) {
set_key (k, Math.floor (data.nset) & (1 << k));
}
}
function update_pitcherror (err) {
var bar = event.icon.find ('[mod-role=pitch-error]');
if (Math.abs (err) > 0.33) {
bar.addClass ('bad');
} else {
bar.removeClass ('bad');
}
var pos = 63 + 64 * err;
bar.css ('left', pos + 'px'); /* CSS or style? XXX */
}
/* top-level entry, called from mod-ui */ /* top-level entry, called from mod-ui */
if (event.type == 'start') { if (event.type == 'start') {
var ports = event.ports; var ports = event.ports;
var data = {};
data.mode = 0;
data.nmask = 0;
data.nset = 0;
for (var p in ports) { for (var p in ports) {
if (ports[p].symbol == 'mode') { if (event.symbol == 'error') {
var pk = event.icon.find ('[mod-role=piano-keyboard]'); update_pitcherror (event.value);
if (event.value == 1) { }
pk.css('display', 'none'); else if (ports[p].symbol == 'mode') {
} else { data.mode = event.value;
pk.css('display', 'block'); }
} else if (ports[p].symbol == 'nmask') {
data.nmask = event.value;
}
else if (ports[p].symbol == 'nset') {
data.nset = event.value;
} }
} }
update_midi_mask (data);
update_note_set (data);
var ds = event.icon.find ('[mod-role=drag-handle]');
ds.data ('persist', data);
} }
else if (event.type == 'change') { else if (event.type == 'change') {
if (event.symbol == 'mode') { var ds = event.icon.find ('[mod-role=drag-handle]');
var pk = event.icon.find ('[mod-role=piano-keyboard]'); var data = ds.data ('persist');
if (event.value == 1) { if (event.symbol == 'error') {
pk.css('display', 'none'); update_pitcherror (event.value);
} else { return;
pk.css('display', 'block'); }
} else if (event.symbol == 'mode') {
// prepare for output params -- MIDI set keys data.mode = event.value;
if (event.value == 2) { update_midi_mask (data);
for (k = 0; k < 12; ++k) { }
mask_key (k, 0); else if (event.symbol == 'nmask') {
} data.nmask = event.value;
} update_midi_mask (data);
}
else if (event.symbol == 'nset') {
data.nset = event.value;
update_note_set (data);
} }
ds.data ('persist', data);
} }
} }
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4.
.TH X42-FAT1 "1" "August 2016" "x42-fat1 version 0.3.1" "User Commands" .TH X42-FAT1 "1" "December 2016" "x42-fat1 version 0.3.2" "User Commands"
.SH NAME .SH NAME
x42-fat1 \- x42 JACK Auto Tune x42-fat1 \- x42 JACK Auto Tune
.SH SYNOPSIS .SH SYNOPSIS
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
lv2:minimum 0 ; lv2:minimum 0 ;
lv2:maximum 1 ; lv2:maximum 1 ;
lv2:portProperty lv2:integer, lv2:toggled; lv2:portProperty lv2:integer, lv2:toggled;
lv2:designation <http://ardour.org/lv2/processing#enable>; lv2:designation lv2:enabled;
] , [ ] , [
a lv2:InputPort , a lv2:InputPort ,
lv2:ControlPort ; lv2:ControlPort ;
......
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4.
.TH X42-FIL4 "1" "August 2016" "x42-fil4 version 0.5.3" "User Commands" .TH X42-FIL4 "1" "December 2016" "x42-fil4 version 0.5.4" "User Commands"
.SH NAME .SH NAME
x42-fil4 \- x42 JACK Parametric Equalizer x42-fil4 \- x42 JACK Parametric Equalizer
.SH SYNOPSIS .SH SYNOPSIS
......
export balance_VERSION=0.6.5 export balance_VERSION=0.6.5
export controlfilter_VERSION=0.3.1 export controlfilter_VERSION=0.3.1
export convoLV2_VERSION=0.5.2 export convoLV2_VERSION=0.5.3
export fat1_VERSION=0.3.1 export fat1_VERSION=0.3.2
export fil4_VERSION=0.5.3 export fil4_VERSION=0.5.4
export meters_VERSION=0.9.2 export meters_VERSION=0.9.3
export midifilter_VERSION=0.4.5 export midifilter_VERSION=0.4.6
export midigen_VERSION=0.2.2 export midigen_VERSION=0.2.2
export midimap_VERSION=0.2.3 export midimap_VERSION=0.3.0
export mixtri_VERSION=0.2.7 export mixtri_VERSION=0.2.7
export nodelay_VERSION=0.2.2 export nodelay_VERSION=0.3.0
export onsettrigger_VERSION=0.2.3 export onsettrigger_VERSION=0.2.4
export robtk_VERSION=0.5.1 export robtk_VERSION=0.5.2
export sisco_VERSION=0.7.0 export sisco_VERSION=0.7.1
export stepseq_VERSION=0.3.4 export stepseq_VERSION=0.4.0
export stereoroute_VERSION=0.1.1 export stereoroute_VERSION=0.1.1
export testsignal_VERSION=0.3.2 export testsignal_VERSION=0.4.0
export tuna_VERSION=0.4.1 export tuna_VERSION=0.4.2
export xfade_VERSION=0.2.3 export xfade_VERSION=0.2.4
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4.
.TH X42-METER "1" "August 2016" "x42-meter version 0.9.2" "User Commands" .TH X42-METER "1" "December 2016" "x42-meter version 0.9.3" "User Commands"
.SH NAME .SH NAME
x42-meter \- JACK Audio Meter Collection x42-meter \- JACK Audio Meter Collection
.SH SYNOPSIS .SH SYNOPSIS
......
...@@ -579,16 +579,17 @@ static RobWidget* cb_reset_peak (RobWidget* handle, RobTkBtnEvent *event) { ...@@ -579,16 +579,17 @@ static RobWidget* cb_reset_peak (RobWidget* handle, RobTkBtnEvent *event) {
static void static void
size_request(RobWidget* handle, int *w, int *h) { size_request(RobWidget* handle, int *w, int *h) {
KMUI* ui = (KMUI*)GET_HANDLE(handle); KMUI* ui = (KMUI*)GET_HANDLE(handle);
*w = ui->width;
*h = GM_HEIGHT; *h = GM_HEIGHT;
*w = 2.0 * MA_WIDTH + ui->num_meters * GM_WIDTH; // recursive with allocted height
} }
static void static void
size_allocate(RobWidget* handle, int w, int h) { size_allocate(RobWidget* handle, int w, int h) {
KMUI* ui = (KMUI*)GET_HANDLE(handle); KMUI* ui = (KMUI*)GET_HANDLE(handle);
ui->height = h; ui->height = h;
ui->width = 2.0 * MA_WIDTH + ui->num_meters * GM_WIDTH; ui->width = MIN(w, 2.0 * MA_WIDTH + ui->num_meters * GM_WIDTH);
ui->size_changed = true; ui->size_changed = true;
assert(ui->width <= w);
robwidget_set_size(handle, ui->width, ui->height); robwidget_set_size(handle, ui->width, ui->height);
queue_draw(ui->m0); queue_draw(ui->m0);
} }
......
...@@ -531,12 +531,13 @@ instantiate( ...@@ -531,12 +531,13 @@ instantiate(
RobWidget** widget, RobWidget** widget,
const LV2_Feature* const* features) const LV2_Feature* const* features)
{ {
MetersLV2UI* ui = (MetersLV2UI*)malloc(sizeof(MetersLV2UI)); MetersLV2UI* ui = (MetersLV2UI*)calloc(1, sizeof(MetersLV2UI));
*widget = NULL;
if (!ui) { if (!ui) {
fprintf (stderr, "meters.lv2: out of memory.\n"); fprintf (stderr, "meters.lv2: out of memory.\n");
return NULL; return NULL;
} }
*widget = NULL;
if (!strcmp(plugin_uri, MTR_URI "VUmono")) { ui->chn = 1; ui->type = MT_VU; } if (!strcmp(plugin_uri, MTR_URI "VUmono")) { ui->chn = 1; ui->type = MT_VU; }
else if (!strcmp(plugin_uri, MTR_URI "VUstereo")) { ui->chn = 2; ui->type = MT_VU; } else if (!strcmp(plugin_uri, MTR_URI "VUstereo")) { ui->chn = 2; ui->type = MT_VU; }
......
...@@ -3,7 +3,7 @@ midifilter.lv2 ...@@ -3,7 +3,7 @@ midifilter.lv2
LV2 plugins to filter MIDI events. LV2 plugins to filter MIDI events.
So far 28 MIDI event filters have been implemented: So far 29 MIDI event filters have been implemented:
* CC2Note -- translate control-commands to note-on/off messages * CC2Note -- translate control-commands to note-on/off messages
* Channel Filter -- discard messages per channel * Channel Filter -- discard messages per channel
...@@ -26,6 +26,7 @@ So far 28 MIDI event filters have been implemented: ...@@ -26,6 +26,7 @@ So far 28 MIDI event filters have been implemented:
* Note2CC -- convert MIDI note-on messages to control change messages * Note2CC -- convert MIDI note-on messages to control change messages
* NoteToggle -- toggle notes: play a note to turn it on, play it again to turn it off * NoteToggle -- toggle notes: play a note to turn it on, play it again to turn it off
* nTabDelay -- repeat notes N times (incl tempo-ramps -- eurotechno hell yeah) * nTabDelay -- repeat notes N times (incl tempo-ramps -- eurotechno hell yeah)
* Simple 1 Channel Filter -- convenient MIDI channel filter
* Passthru -- no operation, just pass the MIDI event through (example plugin) * Passthru -- no operation, just pass the MIDI event through (example plugin)
* Quantize -- live midi event quantization * Quantize -- live midi event quantization
* Velocity Randomizer -- randomly change velocity of note-on events * Velocity Randomizer -- randomly change velocity of note-on events
......
...@@ -21,6 +21,7 @@ MFD_FILTER(notetocc) ...@@ -21,6 +21,7 @@ MFD_FILTER(notetocc)
lv2:portProperty lv2:integer; units:unit units:midiNote ; lv2:portProperty lv2:integer; units:unit units:midiNote ;
rdfs:comment "only used in 'value = velocity' mode." rdfs:comment "only used in 'value = velocity' mode."
) )
, TTF_IPORTTOGGLE(4, "nooff", "Ignore Note Off", 1)
; rdfs:comment "Convert MIDI note-on messages to control change messages." ; rdfs:comment "Convert MIDI note-on messages to control change messages."
. .
...@@ -79,7 +80,7 @@ filter_midi_notetocc(MidiFilter* self, ...@@ -79,7 +80,7 @@ filter_midi_notetocc(MidiFilter* self,
buf[2] = vel; buf[2] = vel;
break; break;
} }
if (mst == MIDI_NOTEON) { if (mst == MIDI_NOTEON || (*(self->cfg[4])) <= 0) {
forge_midimessage(self, tme, buf, 3); forge_midimessage(self, tme, buf, 3);
} }
} }
......