@@ -231,24 +231,30 @@ void TrackSettingsModel::setInstrumentData(const Instrument & instrument)
231231 setBankMsb (instrument.settings ().bank ->msb );
232232 setBankByteOrderSwapped (instrument.settings ().bank ->byteOrderSwapped );
233233 }
234- setCutoffEnabled (instrument.settings ().predefinedMidiCcSettings .cutoff .has_value ());
234+ setTranspose (instrument.settings ().transpose );
235+
236+ setCutoffEnabled (instrument.settings ().standardMidiCcSettings .cutoff .has_value ());
235237 if (cutoffEnabled ()) {
236- setCutoff (*instrument.settings ().predefinedMidiCcSettings .cutoff );
238+ setCutoff (*instrument.settings ().standardMidiCcSettings .cutoff );
237239 }
238- setPanEnabled (instrument.settings ().predefinedMidiCcSettings .pan .has_value ());
240+ setPanEnabled (instrument.settings ().standardMidiCcSettings .pan .has_value ());
239241 if (panEnabled ()) {
240- setPan (*instrument.settings ().predefinedMidiCcSettings .pan );
242+ setPan (*instrument.settings ().standardMidiCcSettings .pan );
241243 }
242- setVolumeEnabled (instrument.settings ().predefinedMidiCcSettings .volume .has_value ());
244+ setVolumeEnabled (instrument.settings ().standardMidiCcSettings .volume .has_value ());
243245 if (volumeEnabled ()) {
244- setVolume (*instrument.settings ().predefinedMidiCcSettings .volume );
246+ setVolume (*instrument.settings ().standardMidiCcSettings .volume );
245247 }
246- setSendMidiClock (instrument.settings ().sendMidiClock .has_value () && *instrument.settings ().sendMidiClock );
247- setSendTransport (instrument.settings ().sendTransport .has_value () && *instrument.settings ().sendTransport );
248248
249- setDelay (static_cast <int >(instrument.settings ().delay .count ()));
250- setTranspose (instrument.settings ().transpose );
251- setVelocityJitter (instrument.settings ().velocityJitter );
249+ setSendMidiClock (instrument.settings ().timing .sendMidiClock .has_value () && *instrument.settings ().timing .sendMidiClock );
250+ setSendTransport (instrument.settings ().timing .sendTransport .has_value () && *instrument.settings ().timing .sendTransport );
251+ setAutoNoteOffOffsetEnabled (instrument.settings ().timing .autoNoteOffOffset .has_value ());
252+ if (autoNoteOffOffsetEnabled ()) {
253+ setAutoNoteOffOffset (static_cast <int >(instrument.settings ().timing .autoNoteOffOffset .value ().count ()));
254+ }
255+ setDelay (static_cast <int >(instrument.settings ().timing .delay .count ()));
256+
257+ setVelocityJitter (instrument.settings ().midiEffects .velocityJitter );
252258
253259 setMidiCcSettings (instrument.settings ().midiCcSettings );
254260
@@ -266,25 +272,27 @@ void TrackSettingsModel::reset()
266272 m_instrumentPortName = {};
267273 setAvailableMidiPorts (m_availableMidiPorts); // Update the list with instrument port name
268274
269- m_portName = {};
270- m_channel = 0 ;
271- m_patchEnabled = false ;
272- m_patch = 0 ;
275+ m_autoNoteOffOffset = {};
276+ m_autoNoteOffOffsetEnabled = false ;
277+ m_bankByteOrderSwapped = false ;
273278 m_bankEnabled = false ;
274279 m_bankLsb = 0 ;
275280 m_bankMsb = 0 ;
276- m_bankByteOrderSwapped = false ;
277- m_cutoffEnabled = false ;
281+ m_channel = 0 ;
278282 m_cutoff = m_defaultCutoff;
279- m_panEnabled = false ;
283+ m_cutoffEnabled = false ;
284+ m_delay = 0 ;
280285 m_pan = m_defaultPan;
281- m_volumeEnabled = false ;
282- m_volume = m_defaultVolume;
286+ m_panEnabled = false ;
287+ m_patch = 0 ;
288+ m_patchEnabled = false ;
289+ m_portName = {};
283290 m_sendMidiClock = false ;
284291 m_sendTransport = false ;
285- m_delay = 0 ;
286292 m_transpose = 0 ;
287293 m_velocityJitter = 0 ;
294+ m_volume = m_defaultVolume;
295+ m_volumeEnabled = false ;
288296
289297 setMidiCcSettings ({});
290298
@@ -312,20 +320,29 @@ TrackSettingsModel::InstrumentU TrackSettingsModel::toInstrument() const
312320 m_bankByteOrderSwapped
313321 };
314322 }
323+
324+ settings.transpose = m_transpose;
325+
315326 if (m_cutoffEnabled) {
316- settings.predefinedMidiCcSettings .cutoff = m_cutoff;
327+ settings.standardMidiCcSettings .cutoff = m_cutoff;
317328 }
318329 if (m_panEnabled) {
319- settings.predefinedMidiCcSettings .pan = m_pan;
330+ settings.standardMidiCcSettings .pan = m_pan;
320331 }
321332 if (m_volumeEnabled) {
322- settings.predefinedMidiCcSettings .volume = m_volume;
333+ settings.standardMidiCcSettings .volume = m_volume;
323334 }
324- settings.sendMidiClock = m_sendMidiClock;
325- settings.sendTransport = m_sendTransport;
326- settings.delay = std::chrono::milliseconds { m_delay };
327- settings.transpose = m_transpose;
328- settings.velocityJitter = m_velocityJitter;
335+
336+ settings.timing .sendMidiClock = m_sendMidiClock;
337+ settings.timing .sendTransport = m_sendTransport;
338+ settings.timing .delay = std::chrono::milliseconds { m_delay };
339+
340+ if (m_autoNoteOffOffsetEnabled) {
341+ settings.timing .autoNoteOffOffset = std::chrono::milliseconds { m_autoNoteOffOffset };
342+ }
343+
344+ settings.midiEffects .velocityJitter = m_velocityJitter;
345+
329346 settings.midiCcSettings = midiCcSettings ();
330347 instrument->setSettings (settings);
331348
@@ -521,6 +538,37 @@ void TrackSettingsModel::setVelocityJitter(int velocityJitter)
521538 }
522539}
523540
541+ int TrackSettingsModel::autoNoteOffOffset () const
542+ {
543+ return m_autoNoteOffOffset;
544+ }
545+
546+ void TrackSettingsModel::setAutoNoteOffOffset (int autoNoteOffOffset)
547+ {
548+ juzzlin::L (TAG).debug () << " Setting auto note-off offset to " << autoNoteOffOffset;
549+
550+ if (m_autoNoteOffOffset != autoNoteOffOffset) {
551+ m_autoNoteOffOffset = autoNoteOffOffset;
552+ emit autoNoteOffOffsetChanged ();
553+ }
554+ }
555+
556+ bool TrackSettingsModel::autoNoteOffOffsetEnabled () const
557+ {
558+ return m_autoNoteOffOffsetEnabled;
559+ }
560+
561+ void TrackSettingsModel::setAutoNoteOffOffsetEnabled (bool enabled)
562+ {
563+ juzzlin::L (TAG).debug () << " Enabling auto note-off offset: " << static_cast <int >(enabled);
564+
565+ if (m_autoNoteOffOffsetEnabled != enabled) {
566+ m_autoNoteOffOffsetEnabled = enabled;
567+ emit autoNoteOffOffsetEnabledChanged ();
568+ applyAll ();
569+ }
570+ }
571+
524572void TrackSettingsModel::pushApplyDisabled ()
525573{
526574 m_applyDisabledStack.push_back (m_applyDisabled);
0 commit comments