MRuby-Zest - A new GUI toolkit for audio programs Mark McCurry - - PowerPoint PPT Presentation

mruby zest a new gui toolkit for audio programs
SMART_READER_LITE
LIVE PREVIEW

MRuby-Zest - A new GUI toolkit for audio programs Mark McCurry - - PowerPoint PPT Presentation

MRuby-Zest - A new GUI toolkit for audio programs MRuby-Zest - A new GUI toolkit for audio programs Mark McCurry June 5th, 2018 MRuby-Zest - A new GUI toolkit for audio programs Zyn-Fusion MRuby-Zest - A new GUI toolkit for audio programs


slide-1
SLIDE 1

MRuby-Zest - A new GUI toolkit for audio programs

MRuby-Zest - A new GUI toolkit for audio programs

Mark McCurry June 5th, 2018

slide-2
SLIDE 2

MRuby-Zest - A new GUI toolkit for audio programs

Zyn-Fusion

slide-3
SLIDE 3

MRuby-Zest - A new GUI toolkit for audio programs Motivation

Another GUI Toolkit? Why?

slide-4
SLIDE 4

MRuby-Zest - A new GUI toolkit for audio programs Motivation

Another GUI Toolkit? Why?

◮ Qt ◮ GTK ◮ AVTK ◮ robtk ◮ DPF ◮ JUCE ◮ fltk

slide-5
SLIDE 5

MRuby-Zest - A new GUI toolkit for audio programs Motivation

Challenges

Toolkit’s:

◮ Maturity ◮ Suitability for use in plugins ◮ Development speed

slide-6
SLIDE 6

MRuby-Zest - A new GUI toolkit for audio programs Zyn

Zyn Timeline

◮ ≈ 3 months of time ◮ ≈ 30 views to implement

slide-7
SLIDE 7

MRuby-Zest - A new GUI toolkit for audio programs Zyn

Zyn Timeline

◮ ≈ 3 months of time ◮ ≈ 30 views to implement ◮ Not a lot of time

slide-8
SLIDE 8

MRuby-Zest - A new GUI toolkit for audio programs Zyn

Zyn Timeline

◮ I’m bad at GUI Programming

slide-9
SLIDE 9

MRuby-Zest - A new GUI toolkit for audio programs Zyn

Zyn Timeline

◮ I’m bad at GUI Programming ◮ (and I hope I’m not alone)

slide-10
SLIDE 10

MRuby-Zest - A new GUI toolkit for audio programs Zyn

Zyn Timeline

◮ Target DRY ◮ Target fast feedback loop ◮ Target long term maintainiability

slide-11
SLIDE 11

MRuby-Zest - A new GUI toolkit for audio programs Zyn

Zyn Timeline

New framework is a reasonable investment

◮ From scratch look and feel ◮ Take advantage of Zyn metadata model ◮ Provide something that can be enhanced long term

slide-12
SLIDE 12

MRuby-Zest - A new GUI toolkit for audio programs Zyn

Borrowing Ideas

◮ Qt’s QML ◮ QML’s built in hotloading ◮ rtosc’s metadata system

slide-13
SLIDE 13

MRuby-Zest - A new GUI toolkit for audio programs QML

Qt’s QML

Provides easy way to:

◮ Build widget trees ◮ Define custom behavior for edge cases ◮ Constrain how you expect widgets to be extended

slide-14
SLIDE 14

MRuby-Zest - A new GUI toolkit for audio programs QML

Qt’s QML

◮ QML’s organization is great, but javascript is not-fun ◮ Provides a means for organizing widgets ◮ Makes widget extension easy

slide-15
SLIDE 15

MRuby-Zest - A new GUI toolkit for audio programs QML

MRuby - Not Just Ruby

slide-16
SLIDE 16

MRuby-Zest - A new GUI toolkit for audio programs QML

QML before - a parsing standpoint

MouseArea { id: ma property var styleData anchors.fill: parent

  • nPressed: {

//javascript parent.currentRow = styleData.row parent.selection.select(styleData.row) }

  • nClicked: {

//javascript console.log(styleData.value) } }

slide-17
SLIDE 17

MRuby-Zest - A new GUI toolkit for audio programs QML

QML after - a parsing standpoint

MouseArea { id: ma property var styleData anchors.fill: parent

  • nPressed: lambda {

#Ruby parent.currentRow = styleData.row parent.selection.select styleData.row }

  • nClicked: lambda {

#Ruby puts styleData.value.inspect } }

slide-18
SLIDE 18

MRuby-Zest - A new GUI toolkit for audio programs High Level View

So What is MRuby-Zest

◮ Uses QML’s syntax in a MRuby environment ◮ Builds off of rtosc’s exported metadata for quick dev

slide-19
SLIDE 19

MRuby-Zest - A new GUI toolkit for audio programs High Level View

So What is MRuby-Zest

◮ Uses QML’s syntax in a MRuby environment ◮ Builds off of rtosc’s exported metadata for quick dev ◮ ≈ 1, 000 commits so far ◮ ≈ 15 kloc of QML (widgets) ◮ ≈ 6 kloc ruby ◮ ≈ 7 kloc C

slide-20
SLIDE 20

MRuby-Zest - A new GUI toolkit for audio programs High Level View

Components of the toolkit

◮ mruby-qml-parse ◮ mruby-qml-spawn

slide-21
SLIDE 21

MRuby-Zest - A new GUI toolkit for audio programs High Level View

Components of the toolkit

◮ mruby-qml-parse ◮ mruby-qml-spawn ◮ mruby-zest

slide-22
SLIDE 22

MRuby-Zest - A new GUI toolkit for audio programs High Level View

Components of the toolkit

◮ mruby-qml-parse ◮ mruby-qml-spawn ◮ mruby-zest ◮ osc-bridge

slide-23
SLIDE 23

MRuby-Zest - A new GUI toolkit for audio programs High Level View

Components of the toolkit

◮ mruby-qml-parse ◮ mruby-qml-spawn ◮ mruby-zest ◮ osc-bridge ◮ mruby-widget-lib

slide-24
SLIDE 24

MRuby-Zest - A new GUI toolkit for audio programs High Level View

OSC bridge

{ "path" : "/part[0,15]/kit[0,15]/padpars/GlobalFilter/basefreq", "shortname": "cutoff", "name" : "basefreq", "tooltip" : "Base cutoff frequency", "units" : "Hz", "scale" : "logarithmic", "type" : "f", "range" : [31.25,32000] }, { "path" : "/part[0,15]/kit[0,15]/padpars/GlobalFilter/freqtracking", "shortname": "f.track", "name" : "freqtracking", "tooltip" : "Frequency Tracking amount", "units" : "%", "scale" : "linear", "type" : "f", "range" : [-100,100], "default" : "0.0f" },

slide-25
SLIDE 25

MRuby-Zest - A new GUI toolkit for audio programs High Level View

QML Loading

◮ Class definitions ◮ Property definitions ◮ Method definitions ◮ Class instance specialization**

slide-26
SLIDE 26

MRuby-Zest - A new GUI toolkit for audio programs High Level View

QML Loading - Live or at build

◮ Classes can be parsed and turned into .rb at build ◮ .qml files can be reloaded and re-instantiated at runtime

slide-27
SLIDE 27

MRuby-Zest - A new GUI toolkit for audio programs High Level View

Hotloading - setup

Knob { function draw(vg) { active_color = :blue draw_outline() draw_xxx() ... ... ... ... } }

slide-28
SLIDE 28

MRuby-Zest - A new GUI toolkit for audio programs High Level View

Hotloading - making changes

Knob { function draw(vg) { active_color = :red draw_outline() draw_xxx() ... ... ... ... } }

slide-29
SLIDE 29

MRuby-Zest - A new GUI toolkit for audio programs High Level View

Hotloading - update on saving

Knob { function draw(vg) { active_color = :red draw_outline() draw_xxx() ... ... ... ... } }

slide-30
SLIDE 30

MRuby-Zest - A new GUI toolkit for audio programs Examples

Widgets

slide-31
SLIDE 31

MRuby-Zest - A new GUI toolkit for audio programs Examples

Widgets, Widgets

slide-32
SLIDE 32

MRuby-Zest - A new GUI toolkit for audio programs Examples

Widgets, Widgets, Widgets

slide-33
SLIDE 33

MRuby-Zest - A new GUI toolkit for audio programs Examples

Even more widgets

slide-34
SLIDE 34

MRuby-Zest - A new GUI toolkit for audio programs Conclusion

Future Work

◮ Translations ◮ More data visualizations ◮ Animations ◮ Automated Screenshot collection ◮ Exploiting the scripting capiabilities more ◮ Separation from Zyn

slide-35
SLIDE 35

MRuby-Zest - A new GUI toolkit for audio programs Conclusion

Conclusions

◮ MRuby-Zest powers Zyn-Fusion ◮ Adds hotloading and scripting to the plugin level UI design ◮ Builds off existing tools for streamlined dev ◮ It’s new and ready to adapt

slide-36
SLIDE 36

MRuby-Zest - A new GUI toolkit for audio programs Conclusion

Questions?

◮ https://github.com/mruby-zest/