Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
920 commits
Select commit Hold shift + click to select a range
0829d9e
Remove generated turtles
meganindya Aug 17, 2020
bcf7eec
Print input pitch arguments and output notes
meganindya Aug 17, 2020
eccac1d
conditional re-initialization (#2509)
sksum Aug 18, 2020
8993b13
Merge branch 'multiple-mouse-bug' of https://github.com/meganindya/mu…
walterbender Aug 18, 2020
3d5788c
remove console spam
walterbender Aug 18, 2020
9e2fe88
Merge branch 'meganindya-multiple-mouse-bug'
walterbender Aug 18, 2020
9e4edc5
bug fix
sksum Aug 18, 2020
9a0ebb0
Merge branch 'sksum-pir-2495'
walterbender Aug 18, 2020
6fb0081
change slider thumb style
sksum Aug 18, 2020
9ddab0f
preview quarter notes
sksum Aug 18, 2020
84bbd96
Merge branch 'reworkPitchSlider' of https://github.com/sksum/musicblo…
walterbender Aug 18, 2020
42d98b2
Merge branch 'sksum-reworkPitchSlider'
walterbender Aug 18, 2020
584ec5f
pie-menu svg
aviral243 Aug 18, 2020
250ba12
use images in search
sksum Aug 18, 2020
a59d0e1
fix 2521
sksum Aug 19, 2020
e48db3c
Octave calc. fix for scale degree (#2519)
aviral243 Aug 19, 2020
7ac6af3
Merge branch 'pir-2521' of https://github.com/sksum/musicblocks into …
walterbender Aug 19, 2020
30bb23d
Merge branch 'sksum-pir-2521'
walterbender Aug 19, 2020
4c6d51c
Merge branch 'documentationConverters' of https://github.com/aviral24…
walterbender Aug 19, 2020
3582796
Merge branch 'aviral243-documentationConverters'
walterbender Aug 19, 2020
9462ea6
fix regression in startblock decoration
walterbender Aug 20, 2020
de0fb1d
format search
sksum Aug 20, 2020
c7e3ca6
Merge branch 'pir-2420' of https://github.com/sksum/musicblocks into …
walterbender Aug 20, 2020
7697f80
clean up formatting
walterbender Aug 20, 2020
40ad04e
Merge branch 'sksum-pir-2420'
walterbender Aug 20, 2020
5b76a80
plugin bug fix (#2524)
sksum Aug 20, 2020
436736c
extra space to grab
sksum Aug 20, 2020
6b36774
Merge branch 'sksum-pir-2527'
walterbender Aug 21, 2020
99f0911
added optional tick button
sksum Aug 21, 2020
c7c01d0
bug fix
sksum Aug 21, 2020
7a4042e
scroll fix
sksum Aug 21, 2020
13f4575
meter Widget features
sksum Aug 21, 2020
b54b951
remove Save alert
sksum Aug 22, 2020
0aaf312
Merge branch 'sksum-saveDialog'
walterbender Aug 22, 2020
40b0f89
Merge branch 'pir-1767' of https://github.com/sksum/musicblocks into …
walterbender Aug 22, 2020
65cb1db
formatting
walterbender Aug 22, 2020
f21f591
add icon to button, fix bpm calc
walterbender Aug 22, 2020
9ad8cb9
new artwork
walterbender Aug 22, 2020
7e2f3ca
Merge branch 'sksum-pir-1767'
walterbender Aug 22, 2020
5f07075
heavier stroke
walterbender Aug 22, 2020
04a0aa5
Create file for tone blocks API
meganindya Aug 23, 2020
f827cb1
Add API methods
meganindya Aug 23, 2020
35f8057
Create file for meter actions
meganindya Aug 14, 2020
d18c07f
Add set meter action
meganindya Aug 14, 2020
b8f85a0
Add pickup action
meganindya Aug 14, 2020
6326fb5
Add set bpm action
meganindya Aug 14, 2020
d52358d
Add set master bpm action
meganindya Aug 14, 2020
e1ec096
Create meter blocks API
meganindya Aug 23, 2020
3448696
Add on every note do action
meganindya Aug 23, 2020
78a7d9e
Add on every beat do action
meganindya Aug 23, 2020
f65cf7e
Add on strong beat do action
meganindya Aug 23, 2020
1935088
Add on weak beat do action
meganindya Aug 23, 2020
adc11d6
Add no clock action
meganindya Aug 23, 2020
1e7477c
Add notes played action
meganindya Aug 23, 2020
f2e9cb8
Add whole notes played action
meganindya Aug 23, 2020
f791f1c
Add beat count action
meganindya Aug 23, 2020
f14e4ae
Add get measure count action
meganindya Aug 23, 2020
65d3def
Add get bpm action
meganindya Aug 23, 2020
a503447
Add get beat factor action
meganindya Aug 23, 2020
6c92899
Add get current meter action
meganindya Aug 23, 2020
ea3f72e
Add getters in API for meter values
meganindya Aug 23, 2020
465b2ea
Add get notes played in API
meganindya Aug 23, 2020
ffffb3f
Merge branch 'meganindya-meter-actions-port'
walterbender Aug 23, 2020
7a33709
Reorganize files
meganindya Aug 17, 2020
25daea5
Add astring library
meganindya Aug 18, 2020
4ed78a7
Add generate tree function
meganindya Aug 20, 2020
7a59966
Reorganize
meganindya Aug 20, 2020
82b99e7
Generate AST for all mice
meganindya Aug 20, 2020
83a2662
Create file for managing AST utilities
meganindya Aug 20, 2020
8b33d47
Create method call AST
meganindya Aug 20, 2020
4ea6f50
Initialize variables before generating trees
meganindya Aug 20, 2020
9a3dd32
Generate block AST for method calls
meganindya Aug 20, 2020
7966d69
Generate arguments AST
meganindya Aug 20, 2020
14c347b
Generate method defs for actions
meganindya Aug 21, 2020
81760fc
Add action name to repective tree entry name
meganindya Aug 21, 2020
fa8fed1
Generate if else blocks AST
meganindya Aug 21, 2020
78f5f95
Generate for-loop AST
meganindya Aug 21, 2020
d6b65f2
Generate while based loops AST
meganindya Aug 21, 2020
732c258
Generate break AST
meganindya Aug 21, 2020
c441697
Generate switch, case, defaultcase ASTs
meganindya Aug 21, 2020
0d782f1
Fix boolean argument type (string to boolean)
meganindya Aug 21, 2020
ed4c28a
Generate box store and retrieve AST
meganindya Aug 21, 2020
d857406
Generate all increment ASTs
meganindya Aug 21, 2020
bb32b78
Fix AST for action calls
meganindya Aug 21, 2020
566b158
Create API methodNameLookup and add crash fail safe in code generation
meganindya Aug 21, 2020
366d8fa
Add code generation mechanism to the JS Editor
meganindya Aug 21, 2020
0fa93df
Add list of clamp blocks for check
meganindya Aug 21, 2020
b6126fb
Fix action call (missing mouse argument)
meganindya Aug 22, 2020
86c7836
Move meter and tone API to API directory
meganindya Aug 23, 2020
731f1e6
Add meter and tone clamp blocks to list
meganindya Aug 23, 2020
2b50736
Add music block names to method lookup
meganindya Aug 23, 2020
8c6d913
Add remaining block names to lookup
meganindya Aug 23, 2020
01373f5
Add listener for js based musicblocks in actions
meganindya Aug 23, 2020
a4846ae
Fix broken play drum thorugh js
meganindya Aug 23, 2020
978639f
additional stats
sksum Aug 24, 2020
501a973
fix Bug
sksum Aug 24, 2020
28106b6
use meter in keyboard
sksum Aug 24, 2020
98d3ce5
Remove unnecessary blk argument in API
meganindya Aug 25, 2020
b01d78a
use widget for stats
sksum Aug 25, 2020
fb033bc
highest/lowest notes in stats
sksum Aug 25, 2020
75c9ab0
add Message when recording
sksum Aug 25, 2020
2baab57
Implement ES6 getter setter syntax
meganindya Aug 25, 2020
b513b7d
Move code editor related library files to lib/codejar/
meganindya Aug 25, 2020
0472755
Replace theme CDNs with local files
meganindya Aug 25, 2020
3afc62b
fix reference error (#2534)
sksum Aug 25, 2020
586303c
Merge branch 'master' into keyboardTest2.1
sksum Aug 25, 2020
205464d
add bpm support
sksum Aug 25, 2020
498a879
Merge branch 'code-generate' of https://github.com/meganindya/musicbl…
walterbender Aug 26, 2020
ce9f617
Merge branch 'meganindya-code-generate'
walterbender Aug 26, 2020
8f2c684
Bug fix (#2541)
sksum Aug 26, 2020
1e9f486
Merge branch 'wav' of https://github.com/sksum/musicblocks into sksum…
walterbender Aug 26, 2020
d86fb4b
add period to message
walterbender Aug 26, 2020
ca30c10
Merge branch 'sksum-wav'
walterbender Aug 26, 2020
ffdcc83
Fix function names (#2544)
meganindya Aug 26, 2020
30477c0
tick icon
walterbender Aug 26, 2020
8e922e9
rerun flowBLock functions
sksum Aug 26, 2020
1ec18ed
fix reference error (#2534)
sksum Aug 25, 2020
2150d5f
bug fix
sksum Aug 27, 2020
d8b9bcb
Update MeterBlocks.js
sksum Aug 27, 2020
cc2b78e
format stats
sksum Aug 27, 2020
f75ff68
remove chartBitmap
sksum Aug 27, 2020
5de2dcb
rearrange rubrics
sksum Aug 27, 2020
4ea47c2
Merge branch 'stats' of https://github.com/sksum/musicblocks into sks…
walterbender Aug 27, 2020
f630f0d
formatting improvements
walterbender Aug 27, 2020
cd1fae9
Merge branch 'sksum-stats'
walterbender Aug 27, 2020
7465cd2
Reworked process of accidental selection (#2498)
aviral243 Aug 27, 2020
297e992
Fix Cb scale in _buildScale (#2517)
athenajq Aug 27, 2020
14d16b5
Move lists and lookups to JSInterface
meganindya Aug 26, 2020
ec4303e
Encapsulate ASTutils' contents in ASTUtils class
meganindya Aug 26, 2020
df57d2a
Fix for loop variable identifier index
meganindya Aug 26, 2020
021c07f
Create validation utilities
meganindya Aug 26, 2020
f37a7c8
Add validation to API
meganindya Aug 26, 2020
a24d9fb
Add argument validation constraints
meganindya Aug 27, 2020
8610160
Add argument validation logic
meganindya Aug 27, 2020
fa71692
Add console to editor
meganindya Aug 27, 2020
9d1a995
Fix synthname validation
meganindya Aug 27, 2020
ce472fa
Add on maximize behavior for js editor
meganindya Aug 27, 2020
21b4385
Add line numbers
meganindya Aug 27, 2020
bbe2016
Merge branch 'meganindya-js-export-enhancements'
walterbender Aug 27, 2020
f4b81a4
use metronome icon for beat turtle; don't add decoration to beat block
walterbender Aug 27, 2020
4d38ba3
fixes #2548 -- don't count companion turtle
walterbender Aug 28, 2020
d4f6348
fix problem witrh extra arg blocks on palette
walterbender Aug 28, 2020
6cab7bf
use turtle color for metronome icon
walterbender Aug 28, 2020
447a417
use companion turtle color for metronome
walterbender Aug 28, 2020
0a7fa05
Update musickeyboard.js
sksum Aug 29, 2020
ac14bc7
add default bpm and meter
sksum Aug 29, 2020
88d484b
Merge branch 'keyboardTest2.1' of https://github.com/sksum/musicblock…
walterbender Aug 29, 2020
966fb4a
update button labels
walterbender Aug 29, 2020
e8f50d3
Merge branch 'sksum-keyboardTest2.1'
walterbender Aug 29, 2020
e49bef6
Merge branch 'currentPitch' of https://github.com/sksum/musicblocks i…
walterbender Aug 29, 2020
771646e
we only need current pitch
walterbender Aug 29, 2020
a659f08
Merge branch 'sksum-currentPitch'
walterbender Aug 29, 2020
bb486d7
fix regression in octave selection
walterbender Aug 29, 2020
a51b50e
remove some console spam
walterbender Aug 29, 2020
5217512
set default synths for companion turtle
walterbender Aug 29, 2020
e3bdd90
companion turtle should be used for graphics
walterbender Aug 29, 2020
dca31cb
more cases where we want to access the companion turtle
walterbender Aug 29, 2020
9cb554b
partial fix to #2550
walterbender Aug 29, 2020
f5a567c
Add documentation to jseditor.js
meganindya Aug 28, 2020
0834eee
Add README for export
meganindya Aug 28, 2020
31d69d3
Update js-export README
meganindya Aug 29, 2020
c8241fa
Complete API help
meganindya Aug 30, 2020
333c46f
add JS widget to the Guide
walterbender Aug 30, 2020
f3fe1a9
Merge branch 'meganindya-js-export-doc'
walterbender Aug 30, 2020
077d981
fix path
walterbender Aug 30, 2020
9d076a8
new strings
walterbender Aug 30, 2020
f76a320
new strings
walterbender Aug 30, 2020
50497c4
new ES strings
walterbender Aug 30, 2020
da4cbbe
no need to search for the blockId
sksum Aug 31, 2020
b954332
setup BlockNo
sksum Aug 31, 2020
e2b2d58
3 decimal places for matrix
sksum Aug 31, 2020
75090cc
Merge branch 'sksum-toFixed'
walterbender Aug 31, 2020
649fa51
Plus block with SD (#2539)
aviral243 Sep 2, 2020
756d7b3
add 2020 contributions
walterbender Sep 2, 2020
dfe9f74
Merge branch 'master' of github.com:sugarlabs/musicblocks
walterbender Sep 2, 2020
eaba5a4
bump to v3.3
walterbender Sep 2, 2020
f198991
Fix regression due to improper clamp end signal dispatch
meganindya Sep 4, 2020
7fc1501
Fix names
meganindya Sep 4, 2020
c61b9a9
Merge branch 'meganindya-master'
walterbender Sep 4, 2020
6cc4a00
fixes #2533
walterbender Sep 4, 2020
55312ab
no decimal places for hertz in PTM
walterbender Sep 4, 2020
d855b38
Updates to Japanese
Sep 5, 2020
47f8b12
fix regression in pitch conversion
walterbender Sep 5, 2020
bd25c83
Merge branch '2020-09-04-po-updates' of https://github.com/pikurasa/m…
walterbender Sep 7, 2020
705f11c
Merge branch 'pikurasa-2020-09-04-po-updates'
walterbender Sep 7, 2020
7ad5e0a
update JA strings
walterbender Sep 7, 2020
fe73b11
possible fix to #2560
walterbender Sep 9, 2020
fd68507
Merge branch 'master' of github.com:sugarlabs/musicblocks
walterbender Sep 9, 2020
55f1db9
formatting
walterbender Sep 12, 2020
5662e04
sort blocks to expand
walterbender Sep 12, 2020
c9131f3
Merge branch 'master' of github.com:sugarlabs/musicblocks
walterbender Sep 12, 2020
459d561
mostly fixes #2299
walterbender Sep 13, 2020
57df5bd
check for planet when running offline
walterbender Sep 13, 2020
47259c2
fixes #2561
walterbender Sep 13, 2020
44ecf2d
fixes #2559
walterbender Sep 13, 2020
b104c36
fixes #1145 -- always sort to remove repeated blocks
walterbender Sep 13, 2020
3d9ab52
fixes #2562
walterbender Sep 13, 2020
95da17f
enable stand-alone scalar step
walterbender Sep 13, 2020
6d218f4
check for oscilloscope widget when editing blocks
walterbender Sep 13, 2020
18a7607
check for oscilloscope widget when editing blocks
walterbender Sep 13, 2020
a61edf1
more descriptive method name
walterbender Sep 13, 2020
7d9d3e7
add missing args
walterbender Sep 13, 2020
2d06792
fixes #2532
walterbender Sep 15, 2020
34f70ba
calculate beat factor based on current note value -- See #2371
walterbender Sep 20, 2020
721b25f
don't collide note value names -- See #2516
walterbender Sep 20, 2020
818f429
add help for beat factor block
walterbender Sep 21, 2020
ac6490f
more missing artwork
walterbender Sep 21, 2020
0138226
don't strip accidental from solfege when converting note
walterbender Sep 21, 2020
b1ef49c
add solfege class; clean up pitch to color; pitch to octave; pitch to…
walterbender Sep 22, 2020
1d15a79
add piemenu info to search -- see #2395
walterbender Sep 23, 2020
97fa177
add python3 note
walterbender Sep 28, 2020
7c915b2
progress on #2555
walterbender Sep 29, 2020
f87e234
Merge branch 'master' of github.com:sugarlabs/musicblocks
walterbender Sep 29, 2020
88a7c18
fix issue with grid display of notes w/o blocks
walterbender Sep 30, 2020
4b874b0
fix typo preventing 'play back' accepting 'load file' block (#2565)
liamnorm Oct 2, 2020
2c661d8
some cleanup of the widget positions
walterbender Oct 3, 2020
678d630
add drums to keyboard; fix add menu
walterbender Oct 4, 2020
6625a99
fixes issue one of 2568
ricknjacky Oct 5, 2020
f9c9c46
fixes the second issue in 2568
ricknjacky Oct 5, 2020
793607a
Merge branch '2568' of https://github.com/ricknjacky/musicblocks into…
walterbender Oct 5, 2020
d222ee5
fixes the bugs
ricknjacky Oct 5, 2020
caf93d7
Merge branch '2568' of https://github.com/ricknjacky/musicblocks into…
walterbender Oct 5, 2020
9aadef6
fixing the scroll
ricknjacky Oct 5, 2020
f5b6b03
Merge branch '2568' of https://github.com/ricknjacky/musicblocks into…
walterbender Oct 5, 2020
2d78a80
styles fix not working
ricknjacky Oct 6, 2020
d92f72d
fixes the scrolling issue
ricknjacky Oct 6, 2020
506b9eb
scrolling issue fix
ricknjacky Oct 6, 2020
3b21cfc
Merge branch '2568' of https://github.com/ricknjacky/musicblocks into…
walterbender Oct 6, 2020
8123fa9
vertical scroll fix in the widget
ricknjacky Oct 7, 2020
b0b7b34
horizontal scroll in keyboard
ricknjacky Oct 7, 2020
2c0685b
Merge branch '2568' of https://github.com/ricknjacky/musicblocks into…
walterbender Oct 7, 2020
fac144b
add copyright
walterbender Oct 7, 2020
eb371f9
Merge branch 'ricknjacky-2568'
walterbender Oct 7, 2020
983b276
fix scalar interval measure
walterbender Oct 10, 2020
62839ba
fix semi-tone interval measure
walterbender Oct 10, 2020
0a44ad6
don't display grid name when showing grid
walterbender Oct 10, 2020
fc4659b
fixing the regression with camera block error (#2576)
ricknjacky Oct 17, 2020
67d8a3d
when running from an event, don't flush the event queue
walterbender Oct 20, 2020
429b3b6
fix regression in i18n
walterbender Oct 22, 2020
305f7d0
Merge branch 'master' of github.com:sugarlabs/musicblocks
walterbender Oct 22, 2020
05bd7a4
update background when updating background color
walterbender Oct 24, 2020
8f3c51b
Fixes the readme discrepancy. (#2578)
ricknjacky Oct 25, 2020
24389a2
fixes #2580
walterbender Oct 25, 2020
a287fbb
add erase media block
walterbender Oct 31, 2020
b45cc7b
Add Dictionary blocks -WIP (#2585)
walterbender Nov 2, 2020
12e4897
replace deprecated dot block
walterbender Nov 3, 2020
1e92455
migrate to html
walterbender Nov 3, 2020
e4e50a9
update deprecated setkey block
walterbender Nov 3, 2020
384430a
update ensemble documentation to use dictionary
walterbender Nov 3, 2020
1de0258
typo
walterbender Nov 3, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
35 changes: 35 additions & 0 deletions .eslintrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"parser": "babel-eslint",
"env": {
"es6": true,
"browser": true,
"node": true
},
#"extends": "eslint:recommended",
"rules": {
"indent": ["warn", 4, {
"SwitchCase": 1
}],
"no-mixed-spaces-and-tabs": "warn",
#"no-unused-vars": "warn",
"quotes": ["warn", "double", {
"avoidEscape": true
}],
"semi": ["warn", "always", {
"omitLastInOneLineBlock": true
}],
"max-len": ["warn", {
"code": 100,
"ignoreTrailingComments": true,
"ignoreComments": true,
"ignoreStrings": true,
"ignoreTemplateLiterals": true
}],
"no-trailing-spaces": ["error", {
"skipBlankLines": true,
"ignoreComments": true
}],
"no-duplicate-case": "error",
"no-irregular-whitespace": "error"
}
}
35 changes: 35 additions & 0 deletions .github/linters/.eslintrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"parser": "babel-eslint",
"env": {
"es6": true,
"browser": true,
"node": true
},
#"extends": "eslint:recommended",
"rules": {
"indent": ["warn", 4, {
"SwitchCase": 1
}],
"no-mixed-spaces-and-tabs": "warn",
#"no-unused-vars": "warn",
"quotes": ["warn", "double", {
"avoidEscape": true
}],
"semi": ["warn", "always", {
"omitLastInOneLineBlock": true
}],
"max-len": ["warn", {
"code": 100,
"ignoreTrailingComments": true,
"ignoreComments": true,
"ignoreStrings": true,
"ignoreTemplateLiterals": true
}],
"no-trailing-spaces": ["error", {
"skipBlankLines": true,
"ignoreComments": true
}],
"no-duplicate-case": "error",
"no-irregular-whitespace": "error"
}
}
23 changes: 23 additions & 0 deletions .github/workflows/linter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Linter

# Triggers the workflow on push or pull request events only for the master branch
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]

jobs:
build:
runs-on: ubuntu-latest

steps:
# Checks-out repository under $GITHUB_WORKSPACE, so job can access it
- uses: actions/checkout@v2

# Runs the linter
- name: Super-Linter
uses: docker://github/super-linter:v3.3.0
env:
VALIDATE_ALL_CODEBASE: false
DISABLE_ERRORS: true
29 changes: 29 additions & 0 deletions .github/workflows/node.js.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions

name: Node.js CI

on:
push:
branches: [ master ]
pull_request:
branches: [ master ]

jobs:
build:

runs-on: ubuntu-latest

strategy:
matrix:
node-version: [10.x, 12.x, 14.x]

steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm run build --if-present
- run: npm test
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
node_modules/
package-lock.json
4 changes: 0 additions & 4 deletions .travis.yml

This file was deleted.

31 changes: 19 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Music Blocks is a programming language and collection of manipulative
tools for exploring musical and mathematical concepts in an
integrative and fun way.

**Refer the following sections below to get familiar with this awesome project:**
**Refer the following sections below to get familiar with this project:**

* [Running Music Blocks](#RUNNING_MUSIC_BLOCKS)
* [How to set up a local server](#HOW_TO_SET_UP_A_LOCAL_SERVER)
Expand All @@ -25,6 +25,8 @@ integrative and fun way.

![alt tag](https://raw.githubusercontent.com/sugarlabs/musicblocks/master/screenshots/Screenshot-2.png)

Some background on why music and programming can be found [here](http://github.com/sugarlabs/musicblocks/tree/master/WhyMusicBlocks.md).

## <a name="RUNNING_MUSIC_BLOCKS"></a>Running Music Blocks

Music Blocks is available under the GNU Affero General Public License (AGPL), a free, copyleft license.
Expand Down Expand Up @@ -53,8 +55,9 @@ Blocks (e.g., <code>cd /musicblocks</code>)
(2) If you do not have Python installed, you'll need to install
it. (Get it from https://www.python.org) You can test for Python in a
terminal: <code>python</code>. Type <code>exit()</code> to exit
Python.

Python. (Note that on some older systems, the python3 command is not
bound to python. You may need `sudo apt install python-is-python3`.

(3) After cloning the musicblocks repository, run the command:

```
Expand All @@ -63,7 +66,7 @@ $ npm run serve

This works on all Operating Systems with Python.

On Windows sytems with multiple Python installations, it is
On Windows systems with multiple Python installations, it is
recommended to use this command instead:

```
Expand Down Expand Up @@ -102,7 +105,7 @@ modules are described in more detail in [js
README.md](https://github.com/sugarlabs/musicblocks/blob/master/js/README.md)

Note: As with any change, please make your own copy by cloning this
[respository](https://github.com/sugarlabs/musicblocks.git). Make
[repository](https://github.com/sugarlabs/musicblocks.git). Make
your changes, test them, and then make a pull request.

See [Contributing
Expand All @@ -126,14 +129,18 @@ Associates, LLC, [Center for Music and the Arts in Education
Education](http://music-in-education.org/) Some of the initial graphics
were contributed by [Chie Yasuda](http://www.chieyasuda.com).

Much of the initial coding specific to Music Blocks was done by
Yash Khandelwal as part of Google Summer of Code (GSoC) 2015. Hemant
Kasat contributed to additional widgets as part of GSoC
2016. Additional contributions are being made by Tayba Wasim, Dinuka
Tharangi Jayaweera, Prachi Agrawal, Cristina Del Puerto, and Hrishi
Patel as part of GSoC 2017. During GSoC 2018, Riya Lohia developed a
Much of the initial coding specific to Music Blocks was done by Yash
Khandelwal as part of Google Summer of Code (GSoC) 2015. Hemant Kasat
contributed to additional widgets as part of GSoC 2016. Additional
contributions are being made by Tayba Wasim, Dinuka Tharangi
Jayaweera, Prachi Agrawal, Cristina Del Puerto, and Hrishi Patel as
part of GSoC 2017. During GSoC 2018, Riya Lohia developed a
Temperament Widget. Ritwik Abhishek added a keyboard widget and a
pitch-tracking widget.
pitch-tracking widget. During GSoC 2019, Favor Kelvin refactored much
of the code to use promises. During GSoC 2020, Anindya Kundu did a major
refactoring of the code base to support JavaScript export. Aviral Gangwar
enhanced the internal representation of mode and key. Saksham Mrig fixed 70+
bugs and added support for pitch tracking and MIDI import.

Many students contributed to the project as part of Google Code-in
(2015&ndash;2020). Sam Parkinson built the Planet during GCI. Emily
Expand Down
71 changes: 71 additions & 0 deletions WhyMusicBlocks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
Why the arts and why music?
===========================

Music is the perfect entry point for learning computation. For one, music, like computation, requires a person to think on an abstract level. Another reason is because computation and music share important concepts (detailed below in “Pedagogical Approach”). Moreover, music has some benefits that the traditional computer pedagogy does not, including the potential to improve social-emotional skills.

According to the NEA: Childhood arts education provides important gateway and formative experiences in the arts... School-based arts education is of particular importance because schools are the only institutions that reach vast numbers of children, particularly low-income children, who are unlikely to receive arts education any other way... [A] body of solid research and innovative practice continues to grow and show that arts education has serious benefits to students as students, and that arts learning is strongly associated with higher levels of achievement, positive social and emotional development, and successful transitions into adulthood. (NEA Survey of Public Participation in the Arts, 2010)

In another study, “an analysis of longitudinal data on 25,000 students showed that those with higher levels of involvement with the arts did better across a wide range of outcome variables than those with lower arts involvement, and that low-income students benefited from their involvement in the arts more significantly than did higher-income students” (Catterall et al. 1999).

Pedagogical approach: Computation, not coding
=============================================
While few argue that children should not have access to computing, the role of computation in learning, however, remains open to debate. In a recent article in the New York Times (Singer 2017), Tim Cook, CEO of Apple, representing the point of view of Silicon Valley, said “Coding should be a requirement in every public school.” But to what end? To ensure a “skilled workforce”? Beyond the false promise that by learning Java you will get a job at Google, we take the position that “learning to code” is not the same as becoming competent in “computational thinking”. Computational thinking, rather, is “solving problems using techniques from computing” (Sharples et al. 2015) and it has ramifications far beyond job training; it is about expression of ideas, problem solving, and creativity, all important life skills.

Asserting that computational thinking is about more than learning to program leads to a number of questions: How should we go about leveraging the latent capacity to learn? How can we transform a consumer-oriented culture into a learning-oriented culture? And is it possible to design a learning platform that respects the diversity of educational context found across the diversity of the learning populations?

Firm footing in computation as a “Cognitive Tower”
==================================================
In a 2008 memo (Minsky, 2019) questioning “general” education, Minsky proposed that we “re- aim our schools towards encouraging children to pursue more focused hobbies and specialties —to provide them with more time for (and earlier experience with) developing more powerful sets of mental skills, which they later can extend to more academic activities.”

Minsky argues that the organization of our cognitive resources into towers with different levels of processes is what “enables our minds to generate so many new kinds of things and ideas.” (Minsky, 2019) These levels span agencies, each of which specializes in areas such as gaining knowledge from experience, planning and causal attribution, the construction of models, and identifying values and ideals. A focus on achieving meaningful goals, not just the accumulation of simple knowledge objects, exercises all of the levels in a cognitive tower, helping a child “develop proficiencies that can be used in other domains.”

As a model for learning, the levels within Minsky’s cognitive towers represent skills that can be applied broadly. Minsky argues that we can redesign school with the goal of providing learners with powerful tools: "things to think with." A specific focus is on tools for expression (writing, programming, drawing, composing, etc.), collaboration (sharing and mentoring), and reflection (commentary and critique). These tools encourage open-ended problem-solving and debugging through engagement in authentic projects, during which time they would develop and hone their mental skills, and over, time strengthen their cognitive towers.

A focus on achieving meaningful goals, not just the accumulation of trivial knowledge, exercises all of the levels in a cognitive tower, helping a child “develop proficiencies that can be used in other domains.” A focus on hobbies, where interest is authentic and sustained, as opposed to curricula organized around the sequential achievement of fragmented goals, has the potential for deep engagement across multiple levels. Albert Einstein summed up the focus on hobbies succinctly when he said, “Love is a better master than duty.” It is in this spirit that we are proposing music as a vehicle for deep engagement.

Music Blocks is a “thing to think with” that allows for enough flexibility for young learners to explore math, music, and code—both independently and mutually integrated.

Hard fun: What EdTech of today needs
====================================
There is a strong temptation in today’s EdTech industry to make things as simple as possible so as to reach the broadest possible audience. However some things are inherently complex. Single purpose “Apps”, for example might be fun, but they are simple, lacking complexity. Multi- purpose tools, such as we have created with Music Blocks, is fun and hard—”hard fun”. The hard part of “hard fun” of learning is in reaching towards complexity. Children should not miss out on the learning that takes place when learning to use tools.

Music: A great vehicle for computer science instruction
=======================================================
“All musicians are subconsciously mathematicians” – Thelonius Monk, Jazz Pianist and Composer

Music composition and performance require practitioners to follow basic control flow such as sequences, conditionals and loops, data abstractions such as changes in timbre, tone, and meter, functions and operators such as transpositions, inversions, and retrograde, and debugging (e.g. making corrections to a composition, perfecting a transcription, or working a section of music on an instrument) and through an understanding of music theory (i.e. “Does this have a meaningful musical structure?”).

The social aspect of musical performance also parallels the perspective that computing is both collaborative and creative (Brennan & Resnick, 2012). An analog can be built between the way in which programmers work together, building communities around sharing and remixing code, and the way in which musicians build communities of interest through performance, sharing, and debating best practices. Programmers review code and musicians critique performances. Both musicians and programmers modify, improvise, and take inspiration from the work of peers and mentors.

Shared Concepts – Programming and Music
=======================================

| Programming | Music |
| --- | --- |
| Sequences | A series of notes (or phrases), in order |
| Loops | Repeating phrases, drum loops |
| Conditionals | Using conditionals for 1st and 2nd endings |
| Data | Note structure (note length, pitch name, and pitch octave) and phrase structure |
| Modularity and Abstraction | Actions, transpositions, intervals, ornamentation, inversions, etc. |
| Debugging | 1. Using one’s ear (i.e. does the result sound correct?) and |
| | 2. understanding of music theory (i.e. does the code have a meaningful musical structure?) |

Musical problem solving: A glimpse into our toolbox
===================================================
Music, like computer science, offers a rich environment for exploration and problem solving, of which the intersection of their shared concepts allow for integrative learning. The Music Blocks approach is to take well-established scaffolding in music instruction and build an analogous tool (or “widget”) in our software platform. The software widget is then tied to concepts in computer science. In other words, the widgets don’t just produce music, they output code that is descriptive of concepts found in music.

Music Blocks and Curriculum
===========================
While Music Blocks is largely agnistic about curriculum design, it is inspired by the work of Seymour Papert. Papert used the term “Microworld” to describe the world of geometry explored when children used Logo. A microworld is a “subset of reality or a constructed reality whose structure matches that of a given cognitive mechanism so as to provide an environment where the latter can operate effectively. The concept leads to the project of inventing microworlds so structured as to allow a human learner to exercise particular powerful ideas or intellectual skills.” (Papert 1980)

In a microworld, an individual is able to use a technological tool for thinking and cognitive exploration that would not be possible without the technology. But not just any technology. “The use of the microworld provides a model of a learning theory in which active learning consists of exploration by the learner of a microworld sufficiently bounded and transparent for constructive exploration and yet sufficiently rich for significant discovery.“ (Papert 1980)

Music Blocks is a collection of technological tools specific to a microworld of music, starting with pitch and rhythmic note values, but also providing affordances for repetition, transposition, etc. The tools are more than an interface to a synthesizer and more than a transcription/engraving tool (i.e. Finale, Sibelius, Musescore, etc)—they are scalable and modular collections of essential building blocks that are at the crux of all powerful ideas in music.

As learners engage with Music Blocks, they are introduced to specific concept with parallels in both music and computer science. For example, while exploring rhythm, she may choose to utilize a rhythm making tool that introduces the concept of loops, which are used for drum machines implemented by “while” loops.

We encourage learners to engage in a semi-structured discussion about their goals in terms of music and computing. We use open-ended prompting questions around the topic areas, such as: “What interests you about computer programming? Why?” “What would you expect from a workshop that teaches you how to build a drum machine?” Follow-up questions to these will be improvised and guided by participant discussion, to support a productive conversation where all learners feel included and heard. Finally, we encourage learners to react and reflect.

Beyond Music Blocks
===================
Music Blocks is not a destinations. Rather, it is a waypoint along a road to achieving fluency in both musical comprehension and computational thinking. We want the students to dive deeper into musical representations and programming constructs than they could do in a single session. Therefore we provide mechanism to go beyond tools such as Music Blocks to give the learner both the ability to communicate with the mainstream worlds of music and computer science and access to a rich set of tools that they may use to further augment their explorations. Music Blocks, by design, does not confine a user to its tools—rather it is a tool to propel the ambitious learner to other rich and authentic discoveries. (See Bender, Ulibarri, and Khandelwal 2016 for more details.)
Loading