36
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 programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

  • Upload
    others

  • View
    22

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

MRuby-Zest - A new GUI toolkit for audioprograms

Mark McCurry

June 5th, 2018

Page 2: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Zyn-Fusion

Page 3: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Motivation

Another GUI Toolkit? Why?

Page 4: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Motivation

Another GUI Toolkit? Why?

I Qt

I GTK

I AVTK

I robtk

I DPF

I JUCE

I fltk

Page 5: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Motivation

Challenges

Toolkit’s:

I Maturity

I Suitability for use in plugins

I Development speed

Page 6: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Zyn

Zyn Timeline

I ≈ 3 months of time

I ≈ 30 views to implement

I Not a lot of time

Page 7: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Zyn

Zyn Timeline

I ≈ 3 months of time

I ≈ 30 views to implement

I Not a lot of time

Page 8: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Zyn

Zyn Timeline

I I’m bad at GUI Programming

I (and I hope I’m not alone)

Page 9: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Zyn

Zyn Timeline

I I’m bad at GUI Programming

I (and I hope I’m not alone)

Page 10: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Zyn

Zyn Timeline

I Target DRY

I Target fast feedback loop

I Target long term maintainiability

Page 11: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Zyn

Zyn Timeline

New framework is a reasonable investment

I From scratch look and feel

I Take advantage of Zyn metadata model

I Provide something that can be enhanced long term

Page 12: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Zyn

Borrowing Ideas

I Qt’s QML

I QML’s built in hotloading

I rtosc’s metadata system

Page 13: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

QML

Qt’s QML

Provides easy way to:

I Build widget trees

I Define custom behavior for edge cases

I Constrain how you expect widgets to be extended

Page 14: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

QML

Qt’s QML

I QML’s organization is great, but javascript is not-fun

I Provides a means for organizing widgets

I Makes widget extension easy

Page 15: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

QML

MRuby - Not Just Ruby

Page 16: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

QML

QML before - a parsing standpoint

MouseArea {

id: ma

property var styleData

anchors.fill: parent

onPressed: {

//javascript

parent.currentRow = styleData.row

parent.selection.select(styleData.row)

}

onClicked: {

//javascript

console.log(styleData.value)

}

}

Page 17: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

QML

QML after - a parsing standpoint

MouseArea {

id: ma

property var styleData

anchors.fill: parent

onPressed: lambda {

#Ruby

parent.currentRow = styleData.row

parent.selection.select styleData.row

}

onClicked: lambda {

#Ruby

puts styleData.value.inspect

}

}

Page 18: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

High Level View

So What is MRuby-Zest

I Uses QML’s syntax in a MRuby environment

I Builds off of rtosc’s exported metadata for quick dev

I ≈ 1, 000 commits so far

I ≈ 15 kloc of QML (widgets)

I ≈ 6 kloc ruby

I ≈ 7 kloc C

Page 19: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

High Level View

So What is MRuby-Zest

I Uses QML’s syntax in a MRuby environment

I Builds off of rtosc’s exported metadata for quick dev

I ≈ 1, 000 commits so far

I ≈ 15 kloc of QML (widgets)

I ≈ 6 kloc ruby

I ≈ 7 kloc C

Page 20: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

High Level View

Components of the toolkit

I mruby-qml-parse

I mruby-qml-spawn

I mruby-zest

I osc-bridge

I mruby-widget-lib

Page 21: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

High Level View

Components of the toolkit

I mruby-qml-parse

I mruby-qml-spawn

I mruby-zest

I osc-bridge

I mruby-widget-lib

Page 22: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

High Level View

Components of the toolkit

I mruby-qml-parse

I mruby-qml-spawn

I mruby-zest

I osc-bridge

I mruby-widget-lib

Page 23: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

High Level View

Components of the toolkit

I mruby-qml-parse

I mruby-qml-spawn

I mruby-zest

I osc-bridge

I mruby-widget-lib

Page 24: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

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"

},

Page 25: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

High Level View

QML Loading

I Class definitions

I Property definitions

I Method definitions

I Class instance specialization**

Page 26: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

High Level View

QML Loading - Live or at build

I Classes can be parsed and turned into .rb at build

I .qml files can be reloaded and re-instantiated at runtime

Page 27: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

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()

...

...

...

...

}

}

Page 28: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

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()

...

...

...

...

}

}

Page 29: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

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()

...

...

...

...

}

}

Page 30: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Examples

Widgets

Page 31: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Examples

Widgets, Widgets

Page 32: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Examples

Widgets, Widgets, Widgets

Page 33: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Examples

Even more widgets

Page 34: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Conclusion

Future Work

I Translations

I More data visualizations

I Animations

I Automated Screenshot collection

I Exploiting the scripting capiabilities more

I Separation from Zyn

Page 35: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Conclusion

Conclusions

I MRuby-Zest powers Zyn-Fusion

I Adds hotloading and scripting to the plugin level UI design

I Builds off existing tools for streamlined dev

I It’s new and ready to adapt

Page 36: MRuby-Zest - A new GUI toolkit for audio programslac.linuxaudio.org/2018/pdf/38-presentation.pdf · MRuby-Zest - A new GUI toolkit for audio programs High Level View So What is MRuby-Zest

MRuby-Zest - A new GUI toolkit for audio programs

Conclusion

Questions?

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