Post-GCI Release
This release reflects the contributions made during Google Code-in 2019-2020. It is being designated as a major release since there are numerous changes to the user experience (e.g., Widget UX) and many underlying structural changes (e.g., the new Block API and storage mechanism) that impact developers. An overhaul of the graphics update mechanism has lead to a major reduction in CPU usage. As far as I know, there is only one "incompatibility" with previous versions; it is in regard to synchronization: there are some projects that worked previously that may now require the use of either the Sync block or the No-clock block. (Details are outlined below.)
A tip of the hat to some of the GCI participants who worked so hard to make this release possible: Bottersnike, AndreaGon, Pidddgy and Nepaltechguy2. They not only contributed code, but also insights into the design and implementation. Also, thanks to the community members who provided them with code reviews and feedback (notably @eohomegrownapps, @fakela, and @pikurasa). It is also important to acknowledge some of our users, Teddy Dildine and Henry Rico, who have been inspiring much of the recent developments and bug fixes. Look for some of their work on the Planet. Karin Kinoshita at Gakken has also done testing and translation work.
The biggest change in terms of look and feel in this release is in regards to the widgets. Bottersnike, in working on #1544 came up with a new layout mechanism that is much more robust, yet also more flexible and responsive than the original design. Widgets are put into windows and the layout is responsive to screen size. AndreaGon enhanced the widgets further by ensuring that any changes to the blocks inside a widget clamp made while the widget was open would result in the widget itself being updated.
The new widget design
The widget adapts to small screens.
And it scales appropriately to its content.
Under the hood, Nepaltechguy2 updated the local storage mechanism in addressing #1852 to use localforage. Bottersnike did a major overhaul of the Block API in an initial stab at making Music Blocks more compliant with a "Model–View–Controller" approach to programming. Previously the definition of a block was spread across a half-dozen files. Now it is defined within a single class. The new code is much easier to read and maintain. Pidddgy reworked the interaction with the CreateJS updater to eliminate unnecessary screen refreshes that were needlessly consuming CPU cycles. The result is a 90% reduction in CPU usage when Music Blocks is idle.
Regarding the incompatibility, it is perhaps best explained with an example. If you use a "click" event to play some music, the timing of the event is not likely to be synced to the master clock. Music Blocks uses a strategy of trying to "catch up" when notes are falling behind, so without a Sync or No-clock Block, the playback will be truncated. In previous releases of Music Blocks, this synchronization strategy was sometimes bypassed. Now it is more rigorously enforced.
This will no longer work as expected: all three notes in the action block will be truncated.
A No-clock Block to the rescue.
Or, better yet, a Sync block.
New Features:
The Distance Block calculates the distance between two points.
The Synth Volume Block returns the current volume setting of a synth.
The MusicXML export option will save your project in this popular format. (See https://www.musicxml.com/)
A link to https://hacklily.org is provided when Save as Lilypond. From that link you can paste your Lilypond output into window and see your sheet music rendered.
Issues closed:
- Help div not getting centered on first time use #2121
- Improve Readability of Lilypond Slur output in MB #1449
- Volume up/down in FF stops performance #1162
- Ignoring negative note value. #1967
- keyboard in mode widget should be animated #2090
- Planet is not documented #2108
- Grid Lines for Phrase Maker #2098
- Merge two notes on phrase maker #2097
- Fibonacci (Nautilus) Example is not working (on recent rawgit) #2103
- clean/clear button does not reset mouse heading #2092
- Message for "Action Block Generated" displayed over full screen widget? #2018
- Print
Beat Count
prints a beat ahead #1890 - Add a keyboard representation under
custom mode
#1856 - Path to Save Artwork from Beginner Mode #1948
- Ignore keyboard/mouse input until MB is fully initialized #800
- Explicitly imply that the loading screen is a loading screen #1735
- migrate help/beginner mode from turtledefs to new block API #2082
- Time period of notification bar. #1993
- Do we need Play for separate voices in Rhythm Maker? #2019
- Occasional race condition on load #2076
- Redesign Widgets Component-Widget #1544
- Update documentation on how to add a new block #2075
- Rotating Mouse (or Avatar) image is cropped at points during rotation #2047
- Browser shows audio play symbol even after hitting the stop button #2077
- rawgithub Links not working in documentation/README.md #2072
- No graphic available for set instrument block #2024
- Make block from Search #2066
- Display statistics goes into infinite loading animation #2067
- Drag and Drop image file causes MB to infinitely spin #2049
- Images not shown in Phrase Maker widget dialog box. #2062
- Add Chart to guide for how the different systems of pitch and pitch movement work #846
- Regression on Widget Windows' Full screen Button #2057
- Change "Copy" AND "Paste" to just "Duplicate" #1984
- Display project title and description when loading from the Planet Component-Planet #1976
- Problems (visual) when decreasing block size #1139
- CPU cycles consumed even when idle #1247
- Support single note inside a slur? WF1-Need more info #1453
- Top Menu Disappears #1936
- preview sound when using hertz block pie menu #1939
- Stuck at landing/ homepage WF1-Need more info #2012
- Change "Add" to "Duplicate" for Note Value in Phrase Maker #1933
- Possible Choices for Search no longer display #1782
- pitch-time matrix doesn't properly restore state when using repeat Component-Widget #1156
- Meta issue for some UX ideas from Devin #1232
- Scrambled block connections #1030
- More Extensive User Testing of Rhythm Ruler Needed #870
- Sound can be "crackly" (perhaps performance related) #811
- Sample sounds on Safari Browser-Safari #264
- drum/lilypond output Component-Lilypond #258
- Change toolbar options icons no longer shown #2008
- Increase/Decrease Octave Value in Scale Degree Pie Menu #1902
- Overlapping Status Widget #1985
- Audio Playback for
Pitch Number
#1903 - distance block #1906
- Pressing "cancel" on the "are you sure to leave" dialog should not trigger saving the project locally #1344
- Alert user when
note value
is greater than 2 #1905 - New icon image for "ornament" palette Good first issue #1426
- Viola Synth #1920
- pie menu for right and left blocks (degrees) #1945
- Music XML export #1545
- No playback on project #1935
- Cannot Open Projects from Shared Links #1931
- Open with lilybin option? Component-Lilypond Component-Planet server #745
- Local Storage runs out of space #1852
- Location of each Block not specified in Guide #1956
- Audio playback needs user interaction #1938
- Save File option suggested on switching modes #1969
- Enable Horizontal Scrolling does not work #1974
- Overly verbose logging #1928
- Making widgets visible. #1964
- Bug with
Make Block
#1946 npm run serve
fails if only python 3 is installed #1924- Neighbor Block seems to escape Transposition Transformation #1943
- Pie menu for Hertz (pitch) block? #1904
As always, thanks to the Music Blocks and Sugar Labs communities for their patches, bug reports, support, and encouragement.