Sort additional VST3 interace implementations
The sensible order would be IComponent, IEditController, IAudioProcessor, and then everything else.
This commit is contained in:
parent
a74d8264fb
commit
f05e31d9e3
|
@ -41,8 +41,8 @@ use vst3_sys as vst3_com;
|
||||||
IEditController,
|
IEditController,
|
||||||
IAudioProcessor,
|
IAudioProcessor,
|
||||||
IMidiMapping,
|
IMidiMapping,
|
||||||
IUnitInfo,
|
INoteExpressionController,
|
||||||
INoteExpressionController
|
IUnitInfo
|
||||||
))]
|
))]
|
||||||
pub(crate) struct Wrapper<P: Vst3Plugin> {
|
pub(crate) struct Wrapper<P: Vst3Plugin> {
|
||||||
inner: Arc<WrapperInner<P>>,
|
inner: Arc<WrapperInner<P>>,
|
||||||
|
@ -1332,6 +1332,80 @@ impl<P: Vst3Plugin> IMidiMapping for Wrapper<P> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<P: Vst3Plugin> INoteExpressionController for Wrapper<P> {
|
||||||
|
unsafe fn get_note_expression_count(&self, bus_idx: i32, _channel: i16) -> i32 {
|
||||||
|
// Apparently you need to define the predefined note expressions. Thanks VST3.
|
||||||
|
if P::MIDI_INPUT >= MidiConfig::Basic && bus_idx == 0 {
|
||||||
|
note_expressions::KNOWN_NOTE_EXPRESSIONS.len() as i32
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe fn get_note_expression_info(
|
||||||
|
&self,
|
||||||
|
bus_idx: i32,
|
||||||
|
_channel: i16,
|
||||||
|
note_expression_idx: i32,
|
||||||
|
info: *mut NoteExpressionTypeInfo,
|
||||||
|
) -> tresult {
|
||||||
|
if P::MIDI_INPUT < MidiConfig::Basic
|
||||||
|
|| bus_idx != 0
|
||||||
|
|| !(0..note_expressions::KNOWN_NOTE_EXPRESSIONS.len() as i32)
|
||||||
|
.contains(¬e_expression_idx)
|
||||||
|
{
|
||||||
|
return kInvalidArgument;
|
||||||
|
}
|
||||||
|
|
||||||
|
check_null_ptr!(info);
|
||||||
|
|
||||||
|
*info = mem::zeroed();
|
||||||
|
|
||||||
|
let info = &mut *info;
|
||||||
|
let note_expression_info =
|
||||||
|
¬e_expressions::KNOWN_NOTE_EXPRESSIONS[note_expression_idx as usize];
|
||||||
|
info.type_id = note_expression_info.type_id;
|
||||||
|
u16strlcpy(&mut info.title, note_expression_info.title);
|
||||||
|
u16strlcpy(&mut info.short_title, note_expression_info.title);
|
||||||
|
u16strlcpy(&mut info.units, note_expression_info.unit);
|
||||||
|
info.unit_id = kNoParentUnitId;
|
||||||
|
// This should not be needed since they're predefined, but then again you'd think you also
|
||||||
|
// wouldn't need to define predefined note expressions now do you?
|
||||||
|
info.value_desc = NoteExpressionValueDescription {
|
||||||
|
default_value: 0.5,
|
||||||
|
min: 0.0,
|
||||||
|
max: 1.0,
|
||||||
|
step_count: 0,
|
||||||
|
};
|
||||||
|
info.id = kNoParamId;
|
||||||
|
info.flags = 1 << 2; // kIsAbsolute
|
||||||
|
|
||||||
|
kResultOk
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe fn get_note_expression_string_by_value(
|
||||||
|
&self,
|
||||||
|
_bus_idx: i32,
|
||||||
|
_channel: i16,
|
||||||
|
_id: u32,
|
||||||
|
_value: f64,
|
||||||
|
_string: *mut TChar,
|
||||||
|
) -> tresult {
|
||||||
|
kResultFalse
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe fn get_note_expression_value_by_string(
|
||||||
|
&self,
|
||||||
|
_bus_idx: i32,
|
||||||
|
_channel: i16,
|
||||||
|
_id: u32,
|
||||||
|
_string: *const TChar,
|
||||||
|
_value: *mut f64,
|
||||||
|
) -> tresult {
|
||||||
|
kResultFalse
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<P: Vst3Plugin> IUnitInfo for Wrapper<P> {
|
impl<P: Vst3Plugin> IUnitInfo for Wrapper<P> {
|
||||||
unsafe fn get_unit_count(&self) -> i32 {
|
unsafe fn get_unit_count(&self) -> i32 {
|
||||||
self.inner.param_units.len() as i32
|
self.inner.param_units.len() as i32
|
||||||
|
@ -1433,77 +1507,3 @@ impl<P: Vst3Plugin> IUnitInfo for Wrapper<P> {
|
||||||
kInvalidArgument
|
kInvalidArgument
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<P: Vst3Plugin> INoteExpressionController for Wrapper<P> {
|
|
||||||
unsafe fn get_note_expression_count(&self, bus_idx: i32, _channel: i16) -> i32 {
|
|
||||||
// Apparently you need to define the predefined note expressions. Thanks VST3.
|
|
||||||
if P::MIDI_INPUT >= MidiConfig::Basic && bus_idx == 0 {
|
|
||||||
note_expressions::KNOWN_NOTE_EXPRESSIONS.len() as i32
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unsafe fn get_note_expression_info(
|
|
||||||
&self,
|
|
||||||
bus_idx: i32,
|
|
||||||
_channel: i16,
|
|
||||||
note_expression_idx: i32,
|
|
||||||
info: *mut NoteExpressionTypeInfo,
|
|
||||||
) -> tresult {
|
|
||||||
if P::MIDI_INPUT < MidiConfig::Basic
|
|
||||||
|| bus_idx != 0
|
|
||||||
|| !(0..note_expressions::KNOWN_NOTE_EXPRESSIONS.len() as i32)
|
|
||||||
.contains(¬e_expression_idx)
|
|
||||||
{
|
|
||||||
return kInvalidArgument;
|
|
||||||
}
|
|
||||||
|
|
||||||
check_null_ptr!(info);
|
|
||||||
|
|
||||||
*info = mem::zeroed();
|
|
||||||
|
|
||||||
let info = &mut *info;
|
|
||||||
let note_expression_info =
|
|
||||||
¬e_expressions::KNOWN_NOTE_EXPRESSIONS[note_expression_idx as usize];
|
|
||||||
info.type_id = note_expression_info.type_id;
|
|
||||||
u16strlcpy(&mut info.title, note_expression_info.title);
|
|
||||||
u16strlcpy(&mut info.short_title, note_expression_info.title);
|
|
||||||
u16strlcpy(&mut info.units, note_expression_info.unit);
|
|
||||||
info.unit_id = kNoParentUnitId;
|
|
||||||
// This should not be needed since they're predefined, but then again you'd think you also
|
|
||||||
// wouldn't need to define predefined note expressions now do you?
|
|
||||||
info.value_desc = NoteExpressionValueDescription {
|
|
||||||
default_value: 0.5,
|
|
||||||
min: 0.0,
|
|
||||||
max: 1.0,
|
|
||||||
step_count: 0,
|
|
||||||
};
|
|
||||||
info.id = kNoParamId;
|
|
||||||
info.flags = 1 << 2; // kIsAbsolute
|
|
||||||
|
|
||||||
kResultOk
|
|
||||||
}
|
|
||||||
|
|
||||||
unsafe fn get_note_expression_string_by_value(
|
|
||||||
&self,
|
|
||||||
_bus_idx: i32,
|
|
||||||
_channel: i16,
|
|
||||||
_id: u32,
|
|
||||||
_value: f64,
|
|
||||||
_string: *mut TChar,
|
|
||||||
) -> tresult {
|
|
||||||
kResultFalse
|
|
||||||
}
|
|
||||||
|
|
||||||
unsafe fn get_note_expression_value_by_string(
|
|
||||||
&self,
|
|
||||||
_bus_idx: i32,
|
|
||||||
_channel: i16,
|
|
||||||
_id: u32,
|
|
||||||
_string: *const TChar,
|
|
||||||
_value: *mut f64,
|
|
||||||
) -> tresult {
|
|
||||||
kResultFalse
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue