Mruby-Zest: a Scriptable Audio GUI Framework

Total Page:16

File Type:pdf, Size:1020Kb

Mruby-Zest: a Scriptable Audio GUI Framework MRuby-Zest: a Scriptable Audio GUI Framework Mark McCurry DSP/ML Researcher United States of America [email protected] Abstract Figure 1: Zyn-Fusion Add Synth Audio tools face a set of uncommon user interface design and implementation challenges. These con- straints make high quality interfaces within the open source realm particular difficult to execute on vol- unteer time. The challenges include producing a unique identity for the application, providing easy to use controls for the parameters of the application, and providing interesting ways to visualize the data within the application. Additionally, existing toolk- its produce technical issues when embedding within 1.1 History plugin hosts. MRuby-Zest is a new toolkit that was build while the ZynAddSubFX user interface was Historically the ZynAddSubFX interface was rewritten. This toolkit possesses unique character- written in FLTK[2] and the user interface pro- istics within open source toolkits which target the cessed a number of usability issues as well as problems specific to audio applications. look and feel consistency issues. Additionally the multi-window FLTK design ZynAddSubFX Keywords previously used did not embed cleanly into plu- gin hosts. Mid 2014 a series of mockups by Interface Design, LV2, VST, Ruby posted online by Budislav Stepanov1. The 1 Introduction mockups provided an overhaul of the workflow of the GUI, but it was a new design which did MRuby-Zest was created to address long stand- not make use of any of the existing widgets, nor ing issues in the ZynAddSubFX[1] user inter- widgets available in other toolkits. Since the face. The MRuby-Zest framework was built new interface was not small some tools would with 5 characteristics in mind. be needed to increase the speed of development. Scriptable: Implementation uses a first class Figure 2: Zyn-Fusion Kit Editor higher level language Dynamically Resizable: Fluid layouts which do not have any fixed sizes Hot Reloadable: Reloads a modified imple- mentation without restarting Embeddable: Can be placed within another UI without conflicts Maintainable: Relatively simple to read and write GUI code The first prototypes were written in the Qt Meta Language (QML)[3; 4] QML is a domain Several examples of the toolkit can be seen in 1http://www.kvraudio.com/forum/viewtopic.php? Fig. 1, 2, 3, and 4. f=47&t=412173 Figure 3: Zyn-Fusion Oscillator need to be tied to Qt and the specific scripting language of Javascript?" QML within Qt was script-able, layout rou- tines were flexible enough that resize-ability wasn’t a major issue, and it was built with hot loading in mind. Per embed-ability, Qt does not embed well; specifically, loading two plugins which use different Qt versions (e.g. Qt4/Qt5) is known to cause issues with symbol name con- flicts and global variable conflicts. When initial prototyping was done with QML it was acknowl- specific language commonly used to describe a edged that eventually the project may need to group of components and properties within a move away from Qt and MRuby-Zest was born. user interface. In addition to purely describing MRuby-Zest took the QML language, replaced components, QML can also define callbacks and the scripting language with Ruby, integrated it new functionality for widgets using a scripting with the nanovg OpenGL rendering library, and language. Within Qt, this scripting language is began to leverage parameter metadata that Zy- javascript. nAddSubFX produces via the rtosc library[5]. While prototyping ZynAddSubFX’s UI, the prototype frequently ended up accessing the 1.2 Prior Art C++ to QML layer of Qt which received much less documentation than the pure QML The problem of creating a good looking embed- layer. Some of the logic/drawing routines for dable GUI isn’t a new task in the open source the program ended up in C++ portion which audio realm. Audio plugins are a challenging couldn’t be effectively hotloaded, which slowed design space. Complex information needs to be development. Additionally the barrier between presented to a reasonably non-technical audi- C++ and Qt’s javascript engine was non-trivial. ence in a way that they can quickly understand Overall, this process highlighted that for the how to manipulate it. To facilitate this, an au- prototype and the version of QML used: dio plugin needs to differentiate itself from other applications and provide a consistent and easy • QML’s javascript was not sufficiently flexi- to understand visual and interactive language ble when extending widgets for the user to tune. • QML’s layout algorithms did not meet the There’s certainly plenty of tools based upon requirements of the new design more standard toolkits like GTK or Qt. A • None of the QML components were heav- few of the open source audio plugin toolkits ily used beyond primitives (rectangles, include: AVTK[6], robtk[7], fffltk[8], DPF[9], component-repeaters, etc) rutabaga[10], JUCE[11], and a few PUGL based non-toolkit options also exist in some smaller applications. Figure 4: Zyn-Fusion Pad Synth Compared to these toolkits, MRuby-Zest de- sires to be generally built for larger more com- plex applications as well as having a distinct look and feel. Additionally the heavy use of Ruby scripting makes MRuby-Zest more geared towards rapid development of a large complex interface. 2 Implementation QML at a high level was useful, concise, The MRuby-Zest framework is implemented and easy to dynamically manipulate. The in- through a combination of different layers. This frastructure around it was limiting for the Zy- includes QML parsing/processing, OSC commu- nAddSubFX use case. So, at this stage of proto- nication, event handling, and the widget classes typing the question was posed: "Why does QML themselves. 2.1 QML Listing 2: QML Widget QML is a domain specific language commonly Rectangle { used to describe a group of components within id: window a user interface. More generally, QML defines a tree of objects, methods on object instances, property String fooVar: "foo" a set of interrelated properties, and bindings property Bool barVar: true for the properties. Within Qt, QML runs on Javascript on top of the normal tools that Qt Structure { id: structure } provides. MRuby-Zest’s QML uses Ruby for Model { id: model } scripting, but otherwise shares most structural similarities. function fn(args) { Through the use of a dynamic language QML puts args gains a number of properties which make inter- structure.method() face development easier. First and foremost is } the conciseness of the language. Using C++ a } simple widget ends up being rather verbose: And translate it to something similar to: Listing 1: C++ Widget Listing 3: Ruby Widget Result class SubWidget: public Rectangle class Instance < Rectangle { attr_reader :structure, :model public: attr_property(:fooVar, String) SubWidget(void){ attr_property(:barVar, Bool) fooVar = "foo"; barVar = true; structure = new Structure; def initialize() model = new Model; add_child(@structure = structure−>add_parent(this); Structure.new) model−>add_parent(this); add_child(@model = } Model.new) set_property(:fooVar, "foo") ~SubWidget(void) set_property(:borVar, true) { end delete structure; delete model; } def fn(args) puts args structure.method string fooVar; end bool barVar; end Structure ∗structure; Model ∗model; While this transformation may seem triv- ial, the organizational structure that QML’s Qt void fn(string args) Modeling Language provides is helpful at under- { standing complex widget hierarchies at a glance. cout << args << endl; structure−>method(); 2.2 Hot-loading } When developing or maintaining a synth a con- }; siderable amount of time is spent on improving the user interface. GUI development can be slow With ruby methods/callbacks QML would going work and compared to other tasks it can look virtually the same. Indeed parsing all of be harder to obtain a fast feedback loop. Gen- the QML I had written thus far didn’t depend erally GUI development in these cases has the upon the scripting language at all. With ruby loop of: it was possible to use QML to create something 1. Build - Compile from source like: 2. Open - Launch the application 3. Navigate - Get to the part of the applica- 2.4 Drawing model & events tion which is modified MRuby-Zest is an OpenGL based toolkit which 4. Observe - See how the application behaves uses PUGL[12] for platform specific event handling and nanovg[13] for a drawing API. 5. Close - Close application OpenGL 2.1 (with the framebuffer extension) 6. Modify - Change behavior was used to simplify embedding and enable com- plex animations in future versions. NanoVG was 7. Repeat - From step 1 repeat used to simplify drawing vector graphics, which MRuby-Zest on the other hand makes it pos- were necessary for simplified fluid resizing of the sible to load code into live instances of the user GUI. interface. Hotloading code in MRuby-Zest is When drawing in the MRuby-Zest toolkit, possible since the vast majority of code can be widgets are drawn depth first for each layer of relatively simply converted to Ruby code and the user interface. These layers are: loaded into the active Ruby VM during execu- • the background - where most widgets are tion. Using hotloading the development loop drawn becomes: • the animation layer - simple drawings ex- 1. Build - Compile from source pected to update many times a second 2. Open - Launch the application • the overlay - drawing on top of the interface 3. Navigate - Get to the part of the applica- (e.g. modals/dropdowns) tion which is modified 4. Observe - See how the application behaves 5. Modify - Change behavior 6. Repeat - From step 4 repeat until done Overlay 7. Close - Exit after desired behavior is ob- Animation tained Background Reducing the feedback loop makes it much easier to tune graphics, layout, and the feel of input handling.
Recommended publications
  • Institut Für Musikinformatik Und Musikwissenschaft
    Institut für Musikinformatik und Musikwissenschaft Leitung: Prof. Dr. Christoph Seibert Veranstaltungsverzeichnis für das Sommersemester 2021 Stand 9.04.2021 Vorbemerkung: Im Sommersemester 2021 werden Lehrveranstaltungen als Präsenzveranstaltungen, online oder in hybrider Form (Präsenzveranstaltung mit der Möglichkeit auch online teilzunehmen) durchgeführt. Die konkrete Durchführung der Lehrveranstaltung hängt ab von der jeweils aktuellen Corona-Verordnung Studienbetrieb. Darüber hinaus ausschlaggebend sind die Anzahl der Teilnehmerinnen und Teilnehmer, die maximal zulässige Personenzahl im zugewiesenen Raum und inhaltliche Erwägungen. Die vorliegenden Angaben hierzu entsprechen dem aktuellen Planungsstand. Für die weitere Planung ist es notwendig, dass alle, die an einer Lehrveranstaltung teilnehmen möchten, sich bis Mittwoch, 07.04. bei der jeweiligen Dozentin / dem jeweiligen Dozenten per E-Mail anmelden. Geben Sie bitte auch an, wenn Sie aufgrund der Pandemie-Situation nicht an Präsenzveranstaltungen teilnehmen können oder möchten, etwa bei Zugehörigkeit zu einer Risikogruppe. Diese Seite wird in regelmäßigen Abständen aktualisiert, um die Angaben den aktuellen Gegebenheiten anzupassen. Änderungen gegenüber früheren Fassungen werden markiert. Musikinformatik Prof. Dr. Marc Bangert ([email protected]) Prof. Dr. Paulo Ferreira-Lopes ([email protected]) Prof. Dr. Eckhard Kahle ([email protected]) Prof. Dr. Christian Langen ([email protected]) Prof. Dr. Damon T. Lee ([email protected]) Prof. Dr. Marlon Schumacher ([email protected]) Prof. Dr. Christoph Seibert ([email protected]) Prof. Dr. Heiko Wandler ([email protected]) Tobias Bachmann ([email protected]) Patrick Borgeat ([email protected]) Anna Czepiel ([email protected]) Dirk Handreke ([email protected]) Daniel Höpfner ([email protected]) Daniel Fütterer ([email protected]) Rainer Lorenz ([email protected]) Nils Lemke ([email protected]) Alexander Lunt ([email protected]) Luís A.
    [Show full text]
  • Graphical Design of Physical Models for Real-Time Sound Synthesis
    peter vasil GRAPHICALDESIGNOFPHYSICALMODELSFOR REAL-TIMESOUNDSYNTHESIS Masterarbeit Audiokommunikation und -technologie GRAPHICALDESIGNOFPHYSICALMODELS FORREAL-TIMESOUNDSYNTHESIS Implementation of a Graphical User Interface for the Synth-A-Modeler compiler vorgelegt von peter vasil Matr.-Nr.: 328493 Technische Universität Berlin Fakultät 1: Fachgebiet Audiokommunikation Abgabe: 25. Juli 2013 Peter Vasil: Graphical Design of Physical Models for Real-Time Sound Synthesis, Implementation of a Graphical User Interface for the Synth- A-Modeler compiler, © July 2013 supervisors: Prof. Dr. Stefan Weinzierl Dr. Edgar Berdahl ABSTRACT The goal of this Master of Science thesis in Audio Communication and Technology at Technical University Berlin, is to develop a Graph- ical User Interface (GUI) for the Synth-A-Modeler compiler, a text-based tool for converting physical model specification files into DSP exter- nal modules. The GUI should enable composers, artists and students to use physical modeling intuitively, without having to employ com- plex mathematical equations normally necessary for physical model- ing. The GUI that will be developed in the course of this thesis allows the creation of physical models with graphical objects for physical masses, links, resonators, waveguides, terminations, and audioout objects. In addition, this tool will be used to create a model for an Arabic oud to demonstrate its functionality. ZUSAMMENFASSUNG Das Ziel dieser Master Arbeit am Fachgebiet Audiokommunikation der TU Berlin, ist die Entwicklung einer graphischen Umgebung für die textbasierte Software, Synth-A-Modeler compiler, welche es erlaubt, ein speziell dafür entwickeltes Datei Format für physikalische Mod- elle, in externe DSP Module umzuwandeln. Die Software macht es Komponisten, Künstlern und Studenten möglich, physikalische Modellierung intuitiv zu anzuwenden, ohne die komplexen mathe- matischen Formeln, welche normalerweise für physikalische Model- lierung nötig sind, anwenden zu müssen.
    [Show full text]
  • Audio Software Developer (F/M/X)
    Impulse Audio Lab is an audio company based in the heart of Munich. We are an interdisciplinary team of experts in interactive sound design and audio software development, working on innovative and pioneering projects focused on sound. We are looking for a Software Developer (f/m/x) for innovative audio projects You are passionate about audio and DSP algorithms and want to work on new products and solutions. The combination of audio processing and e-mobility sounds exciting to you. You want to solve complex problems through state-of-the-art software solutions and apply your knowledge and expertise to all aspects of the software development lifecycle. What are you waiting for? These could be your future responsibilities: • Handling complex audio software projects, from conception and architecture to implementation • Working on both client-oriented projects as well as our own growing product portfolio • Development, implementation and optimization of new algorithms for processing and generating audio • Sharing your experiences and knowledge with your colleagues This should be you: • You are educated to degree level or have equivalent experience in relevant fields such as Electrical Engineering, Media Technology or Computer Science • You have multiple years of experience programming audio software in C/C++, using frameworks such as Qt or JUCE and Audio Plug-in APIs • You are a team player and are also comfortable taking responsibility for your own projects • You are able to work collaboratively, from requirements to acceptance and in the corresponding tool landscape (Git, unit testing, build systems, automation, debugging, etc.) This could be a plus: • You have programming experience on embedded architectures (e.g.
    [Show full text]
  • Cross-Platform 1 Cross-Platform
    Cross-platform 1 Cross-platform In computing, cross-platform, or multi-platform, is an attribute conferred to computer software or computing methods and concepts that are implemented and inter-operate on multiple computer platforms.[1] [2] Cross-platform software may be divided into two types; one requires individual building or compilation for each platform that it supports, and the other one can be directly run on any platform without special preparation, e.g., software written in an interpreted language or pre-compiled portable bytecode for which the interpreters or run-time packages are common or standard components of all platforms. For example, a cross-platform application may run on Microsoft Windows on the x86 architecture, Linux on the x86 architecture and Mac OS X on either the PowerPC or x86 based Apple Macintosh systems. A cross-platform application may run on as many as all existing platforms, or on as few as two platforms. Platforms A platform is a combination of hardware and software used to run software applications. A platform can be described simply as an operating system or computer architecture, or it could be the combination of both. Probably the most familiar platform is Microsoft Windows running on the x86 architecture. Other well-known desktop computer platforms include Linux/Unix and Mac OS X (both of which are themselves cross-platform). There are, however, many devices such as cellular telephones that are also effectively computer platforms but less commonly thought about in that way. Application software can be written to depend on the features of a particular platform—either the hardware, operating system, or virtual machine it runs on.
    [Show full text]
  • Grierson, Mick and Fiebrink, Rebecca. 2018. User-Centred Design Actions for Lightweight Evaluation of an Interactive Machine Learning Toolkit
    Bernardo, Francisco; Grierson, Mick and Fiebrink, Rebecca. 2018. User-Centred Design Actions for Lightweight Evaluation of an Interactive Machine Learning Toolkit. Journal of Science and Technology of the Arts (CITARJ), 10(2), ISSN 1646-9798 [Article] (In Press) http://research.gold.ac.uk/23667/ The version presented here may differ from the published, performed or presented work. Please go to the persistent GRO record above for more information. If you believe that any material held in the repository infringes copyright law, please contact the Repository Team at Goldsmiths, University of London via the following email address: [email protected]. The item will be removed from the repository while any claim is being investigated. For more information, please contact the GRO team: [email protected] Journal of Science and Technology of the Arts, Volume 10, No. 2 – Special Issue eNTERFACE’17 User-Centred Design Actions for Lightweight Evaluation of an Interactive Machine Learning Toolkit Francisco Bernardo Mick Grierson Rebecca Fiebrink Department of Computing Department of Computing Department of Computing Goldsmiths, University of London Goldsmiths, University of London Goldsmiths, University of London London SE14 6NW London SE14 6NW London SE14 6NW ----- ----- ----- [email protected] [email protected] [email protected] ----- ----- ----- ABSTRACT KEYWORDS Machine learning offers great potential to developers User-centred Design; Action Research; Interactive and end users in the creative industries. For Machine Learning; Application Programming example, it can support new sensor-based Interfaces; Toolkits; Creative Technology. interactions, procedural content generation and end- user product customisation. However, designing ARTICLE INFO machine learning toolkits for adoption by creative Received: 03 April 2018 developers is still a nascent effort.
    [Show full text]
  • Structural Equation Modeling Analysis of Etiological Factors in Social Anxiety
    Louisiana State University LSU Digital Commons LSU Historical Dissertations and Theses Graduate School 1997 Structural Equation Modeling Analysis of Etiological Factors in Social Anxiety. Michele E. Mccarthy Louisiana State University and Agricultural & Mechanical College Follow this and additional works at: https://digitalcommons.lsu.edu/gradschool_disstheses Recommended Citation Mccarthy, Michele E., "Structural Equation Modeling Analysis of Etiological Factors in Social Anxiety." (1997). LSU Historical Dissertations and Theses. 6505. https://digitalcommons.lsu.edu/gradschool_disstheses/6505 This Dissertation is brought to you for free and open access by the Graduate School at LSU Digital Commons. It has been accepted for inclusion in LSU Historical Dissertations and Theses by an authorized administrator of LSU Digital Commons. For more information, please contact [email protected]. INFORMATION TO USERS This manuscript has been reproduced from the microfilm master. UMI films the text direct^ from the original or copy submitted. Thus, some thesis and dissotation copies are in ^pewriter fiice; while others may be from aty type o f computer printer. The qnalltyr o f this rqirodnction is dependent npon the quality of the copy submitted. Broken or indistinct print, colored or poor quality illustrations and photogrtqihs, print bleedthrough, substandard margins, and improper alignment can adversely aflfect rq>roduction. In the unlikely event that the author did not send UMI a complete manuscript and there are missing pages, these will be noted. Also, if unauthorized copyright material had to be removed, a note will indicate the deletioiL Oversize materials (e g., maps, drawings, charts) are reproduced by sectioning the original, b%inning at the upper left-hand comer and continuing from left to right in equal sections with small overiaps.
    [Show full text]
  • A Standard Audio API for C++: Motivation, Scope, and Basic Design
    A Standard Audio API for C++: Motivation, Scope, and Basic Design Guy Somberg ([email protected]) ​ Guy Davidson ([email protected]) ​ Timur Doumler ([email protected]) ​ Document #: P1386R2 Date: 2019-06-17 Project: Programming Language C++ Audience: SG13, LEWG “C++ is there to deal with hardware at a low level, and to abstract away from it with zero overhead.” – Bjarne Stroustrup, Cpp.chat Episode #441 Abstract This paper proposes to add a low-level audio API to the C++ standard library. It allows a C++ program to interact with the machine’s sound card, and provides basic data structures for processing audio data. We argue why such an API is important to have in the standard, why existing solutions are insufficient, and the scope and target audience we envision for it. We provide a brief introduction into the basics of digitally representing and processing audio data, and introduce essential concepts such as audio devices, channels, frames, buffers, and samples. We then describe our proposed design for such an API, as well as examples how to use it. An implementation of the API is available online. Finally, we mention some open questions that will need to be resolved, and discuss additional features that are not yet part of the API as presented but will be added in future papers. 1 See [CppChat]. The relevant quote is at approximately 55:20 in the video. 1 Contents 1 Motivation 3 1.1 Why Does C++ Need Audio? 3 1.2 Audio as a Part of Human Computer Interaction 4 1.3 Why What We Have Today is Insufficient 5 1.4 Why not Boost.Audio?
    [Show full text]
  • Программирование На C++ С JUCE 4.2.X: Создание Кроссплатформенных Мультимедийных Приложений С Использованием Библиотеки JUCE На Простых Примерах
    Программирование на C++ с JUCE 4.2.x: Создание кроссплатформенных мультимедийных приложений с использованием библиотеки JUCE на простых примерах Андрей Николаевич Кузнецов Linmedsoft 2016 2 Информация о книге Кузнецов А. Н. Программирование на C++ с JUCE 4.2.x: Создание кроссплатформенных мультимедийных приложений с использованием библиотеки JUCE на простых примерах. − Алматы: Linmedsoft, 2016. − 384 с.: илл. © А. Н. Кузнецов, 2016 Книга посвящена разработке приложений для Linux, Windows, Mac OS X и iOS на языке C++ с использованием кроссплатформенной библиотеки JUCE версии 4.2.x. Подробно рассмотрены возможности, предоставляемые этой библиотекой, а также практическое применение классов, входящих в её состав, на большом количестве простых, подробно прокомментированных примеров. Книга содержит пошаговую исчерпывающую информацию по созданию приложений JUCE различной степени сложности от простейших до мультимедийных. Все права защищены. Вся книга, а также любая её часть не может быть воспроизведена каким-либо способом без предварительного письменного разрешения автора, за исключением кратких цитат, размещённых в учебных пособиях или журналах. Первая публикация: 2011, издательство «Интуит» Linmedsoft, Алматы E-mail: [email protected] 3 Предисловие Со времени публикации моего онлайн курса «Разработка кроссплатформенных приложений с использованием JUCE», где рассматривались версии 1.5 и 2.0 библиотеки, было внесено значительное число изменений как в код её классов и методов, так и в инструменты, используемые для создания проектов. Автор JUCE, Julian Storer, наконец осуществил своё намерение объединить Introjucer и Jucer в единую среду разработки с возможностью визуального проектирования интерфейса. К сожалению, это привело к тому, что код, написанный для второй версии JUCE, не всегда может компилироваться с третьей версией библиотеки. В этой связи в этой книге были переписаны примеры, использованные в курсе-предшественнике, и добавлено описание работы с обновлённой средой Introjucer / Projucer.
    [Show full text]
  • Laboratoire Sciences Et Technologies De La Musique Et Du Son (STMS) UMR 9912 Le Mot De La Direction
    Laboratoire Sciences et technologies de la musique et du son (STMS) UMR 9912 Le mot de la direction Les activités de recherche accueillies à l’Ircam s’inscrivent dans le cadre de l’unité mixte de recherche (UMR 9912) Sciences et techno- logies de la musique et du son (STMS), associant aux côtés de l’Ircam le CNRS, Sorbonne Université et le ministère de la Culture. Le nouveau contrat quinquennal 2019-2023 vise à répondre à plu- sieurs défis : l’intégration de la recherche artistique dans les struc- tures universitaires et la montée en puissance des thématiques art-science (avec, par exemple, la création des doctorats en arts) ; la restructuration du paysage parisien de la recherche ; la lisibilité et l’accroissement de l’attractivité de l’unité ; l’évolution de l’éco- système d’innovation français et le renouvellement apporté par les nouvelles méthodes de l’intelligence artificielle. L’activité de recherche à STMS est portée par sept équipes et se dis- tribue sur trois axes structurants : l’atelier du son, le corps musicien et les dynamiques créatives. L’UMR s’appuie pour les aspects contractuels et d’innovation sur le département IMR de l’Ircam (Innovation et Moyens de la recherche, sous la responsabilité d’Hugues Vinet) avec en particulier la création par l’Ircam d’un nouvel instrument de valorisation, la filiale Ircam Amplify, qui permettra une diffusion plus large des technologies issues du laboratoire. Enfin, j’ai le plaisir de souligner que depuis le début du contrat quin- quennal, STMS a accueilli 4 nouvelles ERC, ainsi que 4 nouveaux projets ANR, un résultat remarquable qui témoigne de la grande dynamique du laboratoire.
    [Show full text]
  • Ultimate++ Forum
    Subject: JUCE (widgets and library) GNU Public Licence Posted by fudadmin on Sat, 10 Dec 2005 16:41:11 GMT View Forum Message <> Reply to Message http://www.rawmaterialsoftware.com/juce/ Subject: Re: JUCE (widgets and library) GNU Public Licence Posted by captainc on Tue, 26 Dec 2006 15:54:02 GMT View Forum Message <> Reply to Message Has anyone had the change to use JUCE? How is it? Any advantages/disadvantages from U++? Subject: Re: JUCE (widgets and library) GNU Public Licence Posted by forlano on Tue, 26 Dec 2006 18:30:02 GMT View Forum Message <> Reply to Message captainc wrote on Tue, 26 December 2006 16:54Has anyone had the change to use JUCE? How is it? Any advantages/disadvantages from U++? Hello, just one disadvantage that I consider very big: if you do not intend to share your source code you need to pay a license. In U++ does not exist such limitation. Luigi Subject: Re: JUCE (widgets and library) GNU Public Licence Posted by gprentice on Tue, 26 Dec 2006 22:40:47 GMT View Forum Message <> Reply to Message Four pages of review here http://www.regdeveloper.com/2006/12/18/juce_cross_platform/ I just tried the demo. Juce doesn't provide native look and feel which I think is a big disadvantage. Juce source code probably has a few more comments in it than U++ though that doesn't seem to bother people here. I bet it doesn't have assist++ though, which is a classy tool. There's probably other important differences like U++ being database oriented and Juce being audio oriented.
    [Show full text]
  • Immediate Mode Graphical User Interfaces in C++
    Immediate Mode Graphical User Interfaces in C++ Stefano Cristiano R&D Director - Recognition Robotics C++ Day 2017 C++ Day 20172 – Dicembre,Un evento dell’Italian Modena C++ Community ImmediateTitle Text Mode? C++ Day 2017 – Un evento dell’Italian C++ Community RetainedTitle Text Mode C++ Day 2017 – Un evento dell’Italian C++ Community Retained Mode • Inheritance or Composition Hierarchy • Object Oriented • Stateful • Handle input using callbacks • Redraw only changed C++ Day 2017 – Un evento dell’Italian C++ Community Retained Mode Hierarchy juce::MouseListener juce::TooltipClient juce::Component juce::SettableToolTipClient juce::ListBox juce::FileListComponent juce::TableListBox C++ Day 2017 – Un evento dell’Italian C++ Community Retained Mode Hierarchy Object QWidget … QAbstractButton QFrame QProgressBar QAbstractScrollArea QLabel QCheckBox QRadioButton … QPushButton C++ Day 2017 – Un evento dell’Italian C++ Community Retained Mode Object Orientation View TextBox Instance X : … Y: … // During window opening TextBox* textBox = new TextBox(); window->addControl(textBox); // ... // During window closing delete textBox; C++ Day 2017 – Un evento dell’Italian C++ Community Retained Mode Statefulness View Model TextBox Instance Model Instance X : … Y: … //... Text: “12345” Text: “12345” textBox->setName(“Text”); textBox->setText(model->text); //... C++ Day 2017 – Un evento dell’Italian C++ Community Retained Mode Toolkits Prefer Inheritance: Prefer Composition: • Qt Widgets • HTML5 DOM • JUCE • Qt Quick (QML) • Windows Forms • WPF • iOS /
    [Show full text]
  • Juce Tutorial
    Juce Programming Tutorial by haydxn Juce Programming Tutorial Table of Contents Introduction...................................................................................................................................... 3 Chapter 1 - The Starting Point................................................................................ 5 Chapter 2 –Component Basics................................................................................ 7 What is a Component?.......................................................................................................... 7 How can I actually ‘do stuff’ with a Component?.....................................7 How do I add a Component?......................................................................................... 8 Chapter 3 – Listening for Messages............................................................ 14 What are these message classes?.........................................................................14 Where does the Listener go?...................................................................................... 15 What about the other message types?............................................................ 20 Chapter 4 – Painting and Decorating........................................................ 23 Where do I paint my Component?........................................................................23 What is a ‘Graphics’?............................................................................................................24 How big is my Component?..........................................................................................24
    [Show full text]