4 |
5 |
6 |
7 |
8 | Viano
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/vue.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | module.exports = {
4 | configureWebpack: config => {
5 | const toMerge = {
6 | entry: {
7 | app: './src/demo.js',
8 | plugin: './src/plugin.js'
9 | }
10 | }
11 |
12 | if (process.env.NODE_ENV === 'production') {
13 | toMerge.output = {
14 | path: path.resolve(__dirname, './docs'),
15 | filename: '[name].js',
16 | publicPath: '/Viano/'
17 | }
18 | } else {
19 | toMerge.output = {
20 | path: path.resolve(__dirname, './docs'),
21 | filename: '[name].js'
22 | }
23 | }
24 |
25 | return toMerge
26 | },
27 | outputDir: 'docs'
28 | }
29 |
--------------------------------------------------------------------------------
/docs/manifest.js:
--------------------------------------------------------------------------------
1 | (function(n){var r=window["webpackJsonp"];window["webpackJsonp"]=function(e,u,c){for(var i,f,p,a=0,l=[];aViano
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "viano",
3 | "main": "docs/plugin.js",
4 | "version": "0.0.3",
5 | "private": true,
6 | "scripts": {
7 | "serve": "vue-cli-service serve",
8 | "build": "vue-cli-service build",
9 | "lint": "vue-cli-service lint"
10 | },
11 | "dependencies": {
12 | "vue": "^2.5.13"
13 | },
14 | "devDependencies": {
15 | "@vue/cli-plugin-babel": "^3.0.0-beta.6",
16 | "@vue/cli-plugin-eslint": "^3.0.0-beta.6",
17 | "@vue/cli-service": "^3.0.0-beta.6",
18 | "blackswan-js": "0.0.12",
19 | "node-sass": "^4.8.3",
20 | "sass-loader": "^6.0.7",
21 | "vue-template-compiler": "^2.5.13"
22 | },
23 | "babel": {
24 | "presets": [
25 | "@vue/app"
26 | ]
27 | },
28 | "eslintConfig": {
29 | "root": true,
30 | "extends": [
31 | "plugin:vue/essential",
32 | "eslint:recommended"
33 | ]
34 | },
35 | "postcss": {
36 | "plugins": {
37 | "autoprefixer": {}
38 | }
39 | },
40 | "browserslist": [
41 | "> 1%",
42 | "last 2 versions",
43 | "not ie <= 8"
44 | ]
45 | }
46 |
--------------------------------------------------------------------------------
/src/components/Rest.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
40 |
41 |
44 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Isaac Lyman
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/src/components/Part.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
50 |
51 |
54 |
--------------------------------------------------------------------------------
/logo/16px.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
21 |
--------------------------------------------------------------------------------
/src/components/Sequence.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
52 |
53 |
56 |
--------------------------------------------------------------------------------
/logo/44px.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
21 |
--------------------------------------------------------------------------------
/logo/72px.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
21 |
--------------------------------------------------------------------------------
/logo/144px.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
21 |
--------------------------------------------------------------------------------
/src/examples/HotCrossBuns.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Hot
6 | cross
7 | buns
8 |
9 |
10 |
11 |
12 |
13 | One a penny
14 | Two a penny
15 | Hot
16 | cross
17 | buns
18 |
19 |
20 |
21 |
22 |
23 |
24 |
41 |
42 |
45 |
--------------------------------------------------------------------------------
/logo/256px.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
21 |
--------------------------------------------------------------------------------
/logo/512px.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
21 |
--------------------------------------------------------------------------------
/src/examples/LaCucaracha.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | La cuca-
6 | ra-
7 | cha
8 | La cuca-
9 | ra-
10 | cha
11 |
12 | ya
13 | no
14 | puede
15 | cami-
16 | nar
17 |
18 |
19 |
20 |
21 |
22 |
23 |
40 |
41 |
44 |
--------------------------------------------------------------------------------
/src/components/Note.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
60 |
61 |
64 |
--------------------------------------------------------------------------------
/src/components/Chord.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
77 |
78 |
81 |
--------------------------------------------------------------------------------
/logo/horizontal.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
25 |
--------------------------------------------------------------------------------
/logo/256 horizontal.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
29 |
--------------------------------------------------------------------------------
/logo/512 horizontal.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
29 |
--------------------------------------------------------------------------------
/src/components/Song.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
77 |
78 |
89 |
90 |
145 |
--------------------------------------------------------------------------------
/docs/manifest.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack:///webpack/bootstrap f9f042694a2b45bdda07"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","3","exports","module","l","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","p","oe","err","console","error"],"mappings":"aACA,IAAAA,EAAAC,OAAA,gBACAA,OAAA,yBAAAC,EAAAC,EAAAC,GAIA,IADA,IAAAC,EAAAC,EAAAC,EAAAC,EAAA,EAAAC,KACQD,EAAAN,EAAAQ,OAAoBF,IAC5BF,EAAAJ,EAAAM,GACAG,EAAAL,IACAG,EAAAG,KAAAD,EAAAL,GAAA,IAEAK,EAAAL,GAAA,EAEA,IAAAD,KAAAF,EACAU,OAAAC,UAAAC,eAAAC,KAAAb,EAAAE,KACAY,EAAAZ,GAAAF,EAAAE,IAGAL,KAAAE,EAAAC,EAAAC,GACA,MAAAK,EAAAC,OACAD,EAAAS,OAAAT,GAEA,GAAAL,EACA,IAAAI,EAAA,EAAYA,EAAAJ,EAAAM,OAA2BF,IACvCD,EAAAY,IAAAC,EAAAhB,EAAAI,IAGA,OAAAD,GAIA,IAAAc,KAGAV,GACAW,EAAA,GAIA,SAAAH,EAAAd,GAGA,GAAAgB,EAAAhB,GACA,OAAAgB,EAAAhB,GAAAkB,QAGA,IAAAC,EAAAH,EAAAhB,IACAG,EAAAH,EACAoB,GAAA,EACAF,YAUA,OANAN,EAAAZ,GAAAW,KAAAQ,EAAAD,QAAAC,IAAAD,QAAAJ,GAGAK,EAAAC,GAAA,EAGAD,EAAAD,QAKAJ,EAAAO,EAAAT,EAGAE,EAAAQ,EAAAN,EAGAF,EAAAS,EAAA,SAAAL,EAAAM,EAAAC,GACAX,EAAAY,EAAAR,EAAAM,IACAhB,OAAAmB,eAAAT,EAAAM,GACAI,cAAA,EACAC,YAAA,EACAC,IAAAL,KAMAX,EAAAiB,EAAA,SAAAZ,GACA,IAAAM,EAAAN,KAAAa,WACA,WAA2B,OAAAb,EAAA,YAC3B,WAAiC,OAAAA,GAEjC,OADAL,EAAAS,EAAAE,EAAA,IAAAA,GACAA,GAIAX,EAAAY,EAAA,SAAAO,EAAAC,GAAsD,OAAA1B,OAAAC,UAAAC,eAAAC,KAAAsB,EAAAC,IAGtDpB,EAAAqB,EAAA,UAGArB,EAAAsB,GAAA,SAAAC,GAA8D,MAApBC,QAAAC,MAAAF,GAAoBA","file":"manifest.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t3: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/Viano/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap f9f042694a2b45bdda07"],"sourceRoot":""}
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Viano
6 |
7 | A toy that lets you write songs using Vue components.
8 |
9 | Targets the Web Audio API. Most compatible with up-to-date Chrome.
10 |
11 | Uses [blackswan.js](https://github.com/isaaclyman/blackswan-js).
12 |
13 | ## Overview
14 |
15 | This is not a great music composition tool, but it is a fun toy. Your songs will sound like an '80s ringtone played on a miscellaneous woodwind. Oh well.
16 |
17 | This is also a proof-of-concept for using Vue component markup as a tool for writing declarative code in a domain-specific language.
18 |
19 | Probably don't use this in production code.
20 |
21 | ## Installation
22 |
23 | Viano isn't published on NPM and isn't set up for inclusion in other projects. To play with it: clone the repository, `npm install`, `npm run serve`. src/Demo.vue currently includes the "La Cucaracha" player, but you can add other players for your own songs (PRs always welcome).
24 |
25 | ## Usage
26 |
27 | To write a song in Viano you'll need to understand some basic music theory, such as the names of the notes (e.g. "c4") and note values (e.g. "quarter note").
28 |
29 | The first line of "La Cucaracha" in Viano looks like this:
30 |
31 | ```html
32 |
33 |
34 |
35 | La cuca-
36 | ra-
37 | cha
38 | La cuca-
39 | ra-
40 | cha
41 |
42 | ya
43 | no
44 | puede
45 | cami-
46 | nar
47 |
48 |
49 |
50 |
51 | ```
52 |
53 | ### ``
54 |
55 | This element is the root of the Viano code. It is the only Viano element to have visible markup associated with it: a simple play/stop control.
56 |
57 | Attributes:
58 |
59 | - `title`: (optional: default 'Untitled') a string. Will be displayed next to the play/stop control.
60 | - `tempo`: (optional: default 120) a number. The beats per minute for this song.
61 | - `time-signature`: (optional: default [4, 4]) an array of two numbers. The time signature for the song, where [4, 4] is understood as 4/4 time.
62 |
63 | ### ``
64 |
65 | This is the only element that can be inside of a ``. It indicates the measure at which the music it contains should start. It can contain a ``, ``, ``, or ``.
66 |
67 | Attributes:
68 |
69 | - `measure`: (optional: default 0) a number. The measure where the music should start. 0 corresponds to the beginning of the first measure.
70 |
71 | ### ``
72 |
73 | This element contains a series of ``, ``, and `` which will be played in order.
74 |
75 | Attributes:
76 |
77 | - `repeat`: (optional) a number. If present, indicates the number of times in a row that the sequence should be repeated.
78 |
79 | ### ``
80 |
81 | This element represents a single note played for a certain amount of time.
82 |
83 | Attributes:
84 |
85 | - `name`: (required) a string. The note between a0 and c8 which should be played.
86 | - `value`: (required) a string ("1/4") or number (0.25). The note value, where "1/4" is a quarter note.
87 | - `repeat`: (optional) a number. See the attribute of the same name on ``.
88 | - `styles`: (optional) an array of blackswan-js style values. See [the blackswan-js docs](https://github.com/isaaclyman/blackswan-js#styles) for a full list.
89 |
90 | ### ``
91 |
92 | This element represents a rest (a gap between notes played) for a certain amount of time.
93 |
94 | Attributes:
95 |
96 | - `value`: (required) a string or number. See the attribute of the same name on ``.
97 |
98 | ### ``
99 |
100 | This element represents one or more notes played simultaneously for a certain amount of time.
101 |
102 | Attributes:
103 |
104 | - `notes`: (required) a string ("c4 e4 g4") or array (['c4', 'e4', 'g4']).
105 | - `repeat`, `styles`, and `value`: see the attributes of the same name on ``.
106 |
107 | ## Contributing
108 |
109 | There are lots of opportunities to contribute in this repository. You can submit a PR adding a new song to src/Demo.vue, fixing a bug, adding tests, and so forth. There aren't any rules about branch names, commit messages, or PR descriptions. Just describe what you're doing, be nice, and try to follow the project style.
110 |
111 | If this is your first open-source PR, let me know and I'll try to be extra helpful.
112 |
113 | If you know your way around the Web Audio API or synthesizers in general, you're invited to contribute to [blackswan.js](https://github.com/isaaclyman/blackswan-js).
114 |
115 | Thanks to [Mirza Zulfan](https://github.com/mirzazulfan) for creating the project logo.
116 |
--------------------------------------------------------------------------------
/docs/plugin.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([2],{"0gc2":function(e,t){},"25dj":function(e,t){},"B9+v":function(e,t){},G0Av:function(e,t){},Of2q:function(e,t,r){"use strict";r("mJx5");var n=r("8aIh"),i=r.n(n),s=function(e){var t=e.split("/"),r=1===t.length?Number(t[0]):Number(t[0])/Number(t[1]);return r},a={created:function(){if("string"!==typeof this.value||isNaN(s(this.value))){if(!("number"===typeof this.value&&this.value>0))throw new Error('Invalid note value. Expected a value of format "1/4". Instead received: '.concat(this.value));this.noteValue=this.value}else this.noteValue=s(this.value)},data:function(){return{noteValue:null}},inject:["registerRest"],mounted:function(){var e=this;this.registerRest(function(){return i.a.rest(e.noteValue)})},props:{value:{required:!0}}},o=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("span")},u=[],c=r("XyMi");function l(e){r("B9+v")}var h=!1,f=l,d=null,p=null,v=Object(c["a"])(a,o,u,h,f,d,p);t["a"]=v.exports},hbWO:function(e,t,r){"use strict";var n={created:function(){if(this.measure<0)throw new Error("Invalid measure. Expected a measure of 0 or greater. Instead received: ".concat(this.measure))},data:function(){return{toRegister:[]}},inject:["registerMeasure"],methods:{registerNote:function(e){this.toRegister.push(e())},registerSequence:function(e){this.toRegister.push(e())},registerChord:function(e){this.toRegister.push(e())}},mounted:function(){var e=this;this.toRegister.forEach(function(t){return e.registerMeasure(e.measure,t)})},props:{measure:{required:!1,default:0,type:Number}},provide:function(){return{registerChord:this.registerChord,registerNote:this.registerNote,registerSequence:this.registerSequence}}},i=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("span",[e._t("default")],2)},s=[],a=r("XyMi");function o(e){r("25dj")}var u=!1,c=o,l=null,h=null,f=Object(a["a"])(n,i,s,u,c,l,h);t["a"]=f.exports},mgLI:function(e,t){},oU1w:function(e,t,r){"use strict";r("tqSY");var n=r("8aIh"),i=r.n(n),s={data:function(){return{toRegister:[]}},inject:["registerSequence"],methods:{registerChord:function(e){this.toRegister.push(e)},registerNote:function(e){this.toRegister.push(e)},registerRest:function(e){this.toRegister.push(e)}},mounted:function(){var e=this.toRegister.slice();if(this.repeat)for(var t=1;t0))throw new Error('Invalid note value. Expected a value of format "1/4". Instead received: '.concat(this.value));this.noteValue=this.value}else this.noteValue=o(this.value);if(this.repeat<=0)throw new Error("Invalid note repeat value. Expected a value above 0. Instead received: ".concat(this.repeat))},data:function(){return{noteValue:null}},inject:["registerNote"],mounted:function(){for(var e=this,t=0;t0)throw new Error("Invalid notes for chord. An element in the array was not a string. Received: ".concat(this.notes))}if(this.chordNotes=e,"string"!==typeof this.value||isNaN(f(this.value))){if(!("number"===typeof this.value&&this.value>0))throw new Error('Invalid note value. Expected a value of format "1/4". Instead received: '.concat(this.value));this.noteValue=this.value}else this.noteValue=f(this.value);if(this.repeat<=0)throw new Error("Invalid chord repeat value. Expected a value above 0. Instead received: ".concat(this.repeat))},data:function(){return{chordNotes:null,noteValue:null}},inject:["registerChord"],mounted:function(){for(var e=this,t=0;t0))throw new Error('Invalid note value. Expected a value of format "1/4". Instead received: '.concat(this.value));this.noteValue=this.value}else this.noteValue=s(this.value)},data:function(){return{noteValue:null}},inject:["registerRest"],mounted:function(){var e=this;this.registerRest(function(){return a.a.rest(e.noteValue)})},props:{value:{required:!0}}},u=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("span")},o=[],c=r("XyMi");function l(e){r("B9+v")}var v=!1,f=l,p=null,h=null,m=Object(c["a"])(i,u,o,v,f,p,h);t["a"]=m.exports},hbWO:function(e,t,r){"use strict";var n={created:function(){if(this.measure<0)throw new Error("Invalid measure. Expected a measure of 0 or greater. Instead received: ".concat(this.measure))},data:function(){return{toRegister:[]}},inject:["registerMeasure"],methods:{registerNote:function(e){this.toRegister.push(e())},registerSequence:function(e){this.toRegister.push(e())},registerChord:function(e){this.toRegister.push(e())}},mounted:function(){var e=this;this.toRegister.forEach(function(t){return e.registerMeasure(e.measure,t)})},props:{measure:{required:!1,default:0,type:Number}},provide:function(){return{registerChord:this.registerChord,registerNote:this.registerNote,registerSequence:this.registerSequence}}},a=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("span",[e._t("default")],2)},s=[],i=r("XyMi");function u(e){r("25dj")}var o=!1,c=u,l=null,v=null,f=Object(i["a"])(n,a,s,o,c,l,v);t["a"]=f.exports},mgLI:function(e,t){},oU1w:function(e,t,r){"use strict";r("tqSY");var n=r("8aIh"),a=r.n(n),s={data:function(){return{toRegister:[]}},inject:["registerSequence"],methods:{registerChord:function(e){this.toRegister.push(e)},registerNote:function(e){this.toRegister.push(e)},registerRest:function(e){this.toRegister.push(e)}},mounted:function(){var e=this.toRegister.slice();if(this.repeat)for(var t=1;t0))throw new Error('Invalid note value. Expected a value of format "1/4". Instead received: '.concat(this.value));this.noteValue=this.value}else this.noteValue=u(this.value);if(this.repeat<=0)throw new Error("Invalid note repeat value. Expected a value above 0. Instead received: ".concat(this.repeat))},data:function(){return{noteValue:null}},inject:["registerNote"],mounted:function(){for(var e=this,t=0;t\r\n \r\n\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/Rest.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span')}\nvar staticRenderFns = []\nexport { render, staticRenderFns }\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-19518650\",\"hasScoped\":false,\"optionsId\":\"0\",\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Rest.vue\n// module id = null\n// module chunks = ","function injectStyle (context) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":false,\\\"minimize\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Rest.vue\")\n}\n/* script */\nexport * from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Rest.vue\"\nimport __vue_script__ from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Rest.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-19518650\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Rest.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Rest.vue\n// module id = null\n// module chunks = ","\r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/Part.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-48d3b934\",\"hasScoped\":false,\"optionsId\":\"0\",\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Part.vue\n// module id = null\n// module chunks = ","function injectStyle (context) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":false,\\\"minimize\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Part.vue\")\n}\n/* script */\nexport * from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Part.vue\"\nimport __vue_script__ from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Part.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-48d3b934\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Part.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Part.vue\n// module id = null\n// module chunks = ","\r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/Sequence.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-672afb6f\",\"hasScoped\":false,\"optionsId\":\"0\",\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Sequence.vue\n// module id = null\n// module chunks = ","function injectStyle (context) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":false,\\\"minimize\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Sequence.vue\")\n}\n/* script */\nexport * from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Sequence.vue\"\nimport __vue_script__ from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Sequence.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-672afb6f\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Sequence.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Sequence.vue\n// module id = null\n// module chunks = ","\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/Song.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"player\"},[_c('div',{staticClass:\"controls\"},[_c('div',{staticClass:\"play-control\",class:{ 'stop': _vm.playing },on:{\"click\":function($event){_vm.togglePlay()}}})]),_c('div',{staticClass:\"title\",domProps:{\"textContent\":_vm._s(_vm.title)}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(false),expression:\"false\"}]},[_vm._t(\"default\")],2)])}\nvar staticRenderFns = []\nexport { render, staticRenderFns }\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-52cf5904\",\"hasScoped\":true,\"optionsId\":\"0\",\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Song.vue\n// module id = null\n// module chunks = ","function injectStyle (context) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":false,\\\"minimize\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Song.vue\")\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":false,\\\"minimize\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"id\\\":\\\"data-v-52cf5904\\\",\\\"scoped\\\":true,\\\"sourceMap\\\":false}!sass-loader?{\\\"sourceMap\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=1!./Song.vue\")\n}\n/* script */\nexport * from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Song.vue\"\nimport __vue_script__ from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Song.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-52cf5904\\\",\\\"hasScoped\\\":true,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Song.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-52cf5904\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Song.vue\n// module id = null\n// module chunks = ","\r\n \r\n\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/Note.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span')}\nvar staticRenderFns = []\nexport { render, staticRenderFns }\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-930cbaf2\",\"hasScoped\":false,\"optionsId\":\"0\",\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Note.vue\n// module id = null\n// module chunks = ","function injectStyle (context) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":false,\\\"minimize\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Note.vue\")\n}\n/* script */\nexport * from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Note.vue\"\nimport __vue_script__ from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Note.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-930cbaf2\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Note.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Note.vue\n// module id = null\n// module chunks = ","\r\n \r\n\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/Chord.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span')}\nvar staticRenderFns = []\nexport { render, staticRenderFns }\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-0c31c252\",\"hasScoped\":false,\"optionsId\":\"0\",\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Chord.vue\n// module id = null\n// module chunks = ","function injectStyle (context) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":false,\\\"minimize\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Chord.vue\")\n}\n/* script */\nexport * from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Chord.vue\"\nimport __vue_script__ from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Chord.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-0c31c252\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Chord.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Chord.vue\n// module id = null\n// module chunks = ","import Song from './components/Song.vue'\r\nimport Part from './components/Part.vue'\r\nimport Sequence from './components/Sequence.vue'\r\nimport Note from './components/Note.vue'\r\nimport Rest from './components/Rest.vue'\r\nimport Chord from './components/Chord.vue'\r\n\r\nconst components = {\r\n Song, Part, Sequence, Note, Rest, Chord\r\n}\r\n\r\nconst viano = {\r\n install (Vue) {\r\n for (const comp in components) {\r\n Vue.component(comp, components[comp])\r\n }\r\n }\r\n}\r\n\r\nexport default viano\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugin.js"],"sourceRoot":""}
--------------------------------------------------------------------------------
/docs/app.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack:///src/examples/LaCucaracha.vue","webpack:///./src/examples/LaCucaracha.vue?47f2","webpack:///./src/examples/LaCucaracha.vue","webpack:///src/examples/HotCrossBuns.vue","webpack:///./src/examples/HotCrossBuns.vue?3bdf","webpack:///./src/examples/HotCrossBuns.vue","webpack:///src/Demo.vue","webpack:///./src/Demo.vue?6364","webpack:///./src/Demo.vue","webpack:///./src/demo.js","webpack:///src/components/Rest.vue","webpack:///./src/components/Rest.vue?da4c","webpack:///./src/components/Rest.vue","webpack:///src/components/Part.vue","webpack:///./src/components/Part.vue?eb06","webpack:///./src/components/Part.vue","webpack:///src/components/Sequence.vue","webpack:///./src/components/Sequence.vue?bf65","webpack:///./src/components/Sequence.vue","webpack:///src/components/Song.vue","webpack:///./src/components/Song.vue?fe1a","webpack:///./src/components/Song.vue","webpack:///src/components/Note.vue","webpack:///./src/components/Note.vue?9b91","webpack:///./src/components/Note.vue"],"names":["Song","Part","Sequence","Note","Rest","LaCucaracha_render","_vm","this","_h","$createElement","_c","_self","attrs","title","tempo","time-signature","measure","name","value","repeat","_v","staticRenderFns","injectStyle","context","__webpack_require__","__vue_template_functional__","__vue_styles__","__vue_scopeId__","__vue_module_identifier__","Component","Object","component_normalizer","LaCucaracha","examples_LaCucaracha","HotCrossBuns_render","HotCrossBuns_staticRenderFns","HotCrossBuns_injectStyle","HotCrossBuns___vue_template_functional__","HotCrossBuns___vue_styles__","HotCrossBuns___vue_scopeId__","HotCrossBuns___vue_module_identifier__","HotCrossBuns_Component","HotCrossBuns","examples_HotCrossBuns","Demo","Demo_render","id","Demo_staticRenderFns","Demo_injectStyle","Demo___vue_template_functional__","Demo___vue_styles__","Demo___vue_scopeId__","Demo___vue_module_identifier__","Demo_Component","src_Demo","vue_runtime_esm","config","productionTip","render","h","$mount","fractionStringToNum","str","result","_this","noteValue","__webpack_exports__","noteFn","sequenceFn","chordFn","content","Number","registerChord","registerNote","registerSequence","_t","restFn","slice","toRegister","fn","registerRest","_song","timeSignature","length","filter","num","Error","concat","stop","play","playing","Array","String","registerMeasure","staticClass","class","on","click","$event","togglePlay","domProps","textContent","_s","directives","rawName","expression","styles"],"mappings":"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","file":"app.js","sourcesContent":["\r\n \r\n \r\n \r\n La cuca-\r\n ra-\r\n cha\r\n La cuca-\r\n ra-\r\n cha\r\n \r\n ya\r\n no\r\n puede\r\n cami-\r\n nar\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/examples/LaCucaracha.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Song',{attrs:{\"title\":\"La cucaracha\",\"tempo\":200,\"time-signature\":[4, 4]}},[_c('Part',{attrs:{\"measure\":0}},[_c('Sequence',[_c('Note',{attrs:{\"name\":\"c4\",\"value\":\"1/8\",\"repeat\":3}},[_vm._v(\" La cuca-\\n \")]),_c('Note',{attrs:{\"name\":\"f4\",\"value\":\"3/8\"}},[_vm._v(\" ra-\\n \")]),_c('Note',{attrs:{\"name\":\"a4\",\"value\":\"1/4\"}},[_vm._v(\" cha\\n \")]),_c('Note',{attrs:{\"name\":\"c4\",\"value\":\"1/8\",\"repeat\":3}},[_vm._v(\" La cuca-\\n \")]),_c('Note',{attrs:{\"name\":\"f4\",\"value\":\"3/8\"}},[_vm._v(\" ra-\\n \")]),_c('Note',{attrs:{\"name\":\"a4\",\"value\":\"1/4\"}},[_vm._v(\" cha\\n \")]),_c('Rest',{attrs:{\"value\":\"3/8\"}}),_c('Note',{attrs:{\"name\":\"f4\",\"value\":\"1/4\"}},[_vm._v(\" ya\\n \")]),_c('Note',{attrs:{\"name\":\"f4\",\"value\":\"1/8\"}},[_vm._v(\" no\\n \")]),_c('Note',{attrs:{\"name\":\"e4\",\"value\":\"1/8\",\"repeat\":2}},[_vm._v(\" puede\\n \")]),_c('Note',{attrs:{\"name\":\"d4\",\"value\":\"1/8\",\"repeat\":2}},[_vm._v(\" cami-\\n \")]),_c('Note',{attrs:{\"name\":\"c4\",\"value\":\"3/8\"}},[_vm._v(\" nar\\n \")])],1)],1)],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-3d98e5de\",\"hasScoped\":false,\"optionsId\":\"0\",\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/examples/LaCucaracha.vue\n// module id = null\n// module chunks = ","function injectStyle (context) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":false,\\\"minimize\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./LaCucaracha.vue\")\n}\n/* script */\nexport * from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./LaCucaracha.vue\"\nimport __vue_script__ from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./LaCucaracha.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3d98e5de\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./LaCucaracha.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/examples/LaCucaracha.vue\n// module id = null\n// module chunks = ","\r\n \r\n \r\n \r\n Hot\r\n cross\r\n buns\r\n \r\n \r\n \r\n \r\n \r\n One a penny\r\n Two a penny\r\n Hot\r\n cross\r\n buns\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/examples/HotCrossBuns.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Song',{attrs:{\"title\":\"Hot cross buns\",\"tempo\":150,\"time-signature\":[4, 4]}},[_c('Part',{attrs:{\"measure\":0}},[_c('Sequence',{attrs:{\"repeat\":2}},[_c('Note',{attrs:{\"name\":\"e4\",\"value\":\"1/4\"}},[_vm._v(\" Hot\\n \")]),_c('Note',{attrs:{\"name\":\"d4\",\"value\":\"1/4\"}},[_vm._v(\" cross\\n \")]),_c('Note',{attrs:{\"name\":\"c4\",\"value\":\"1/4\"}},[_vm._v(\" buns\\n \")]),_c('Rest',{attrs:{\"value\":\"1/4\"}})],1)],1),_c('Part',{attrs:{\"measure\":2}},[_c('Sequence',[_c('Note',{attrs:{\"name\":\"c4\",\"value\":\"1/8\",\"repeat\":4}},[_vm._v(\" One a penny\\n \")]),_c('Note',{attrs:{\"name\":\"d4\",\"value\":\"1/8\",\"repeat\":4}},[_vm._v(\" Two a penny\\n \")]),_c('Note',{attrs:{\"name\":\"e4\",\"value\":\"1/4\"}},[_vm._v(\" Hot\\n \")]),_c('Note',{attrs:{\"name\":\"d4\",\"value\":\"1/4\"}},[_vm._v(\" cross\\n \")]),_c('Note',{attrs:{\"name\":\"c4\",\"value\":\"1/4\"}},[_vm._v(\" buns\\n \")]),_c('Rest',{attrs:{\"value\":\"1/4\"}})],1)],1)],1)}\nvar staticRenderFns = []\nexport { render, staticRenderFns }\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-55f828b9\",\"hasScoped\":false,\"optionsId\":\"0\",\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/examples/HotCrossBuns.vue\n// module id = null\n// module chunks = ","function injectStyle (context) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":false,\\\"minimize\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"optionsId\\\":\\\"0\\\",\\\"vue\\\":true,\\\"scoped\\\":false,\\\"sourceMap\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./HotCrossBuns.vue\")\n}\n/* script */\nexport * from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./HotCrossBuns.vue\"\nimport __vue_script__ from \"!!cache-loader?{\\\"cacheDirectory\\\":\\\"C:\\\\\\\\code\\\\\\\\Viano\\\\\\\\node_modules\\\\\\\\.cache\\\\\\\\cache-loader\\\"}!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./HotCrossBuns.vue\"\n/* template */\nimport {render as __vue_render__, staticRenderFns as __vue_static_render_fns__} from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-55f828b9\\\",\\\"hasScoped\\\":false,\\\"optionsId\\\":\\\"0\\\",\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./HotCrossBuns.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nimport normalizeComponent from \"!../../node_modules/vue-loader/lib/runtime/component-normalizer\"\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_render__,\n __vue_static_render_fns__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/examples/HotCrossBuns.vue\n// module id = null\n// module chunks = ","\n