All Projects → isaaclyman → Viano

isaaclyman / Viano

Licence: mit
A toy that lets you write songs using Vue components.

Projects that are alternatives of or similar to Viano

Alda
A music programming language for musicians. 🎶
Stars: ✭ 4,808 (+2943.04%)
Mutual labels:  music, music-composition
Webaudiofont
Use full GM set of musical instruments to play MIDI and single sounds or effects. Support for reverberation and equaliser. No plugins, no Flash. Pure HTML5 implementation compatible with desktop and mobile browser. See live examples.
Stars: ✭ 600 (+279.75%)
Mutual labels:  music, music-composition
Powertabeditor
A cross-platform guitar tablature editor.
Stars: ✭ 334 (+111.39%)
Mutual labels:  music, music-composition
Javascriptmusic
Live coding music and synthesis in Javascript / AssemblyScript (WebAssembly)
Stars: ✭ 193 (+22.15%)
Mutual labels:  music, music-composition
Vue Aplayer
🍰 Easy-to-use music player for Vue 2.x
Stars: ✭ 1,087 (+587.97%)
Mutual labels:  music, vue-components
Zrythm
a highly automated and intuitive digital audio workstation - official mirror
Stars: ✭ 703 (+344.94%)
Mutual labels:  music, music-composition
Jetpack Musicplayer
即使不用云音乐听曲儿,也请务必收藏好该库!🔥 一行代码即可接入,音乐播放控制组件 - Even if you don't listen to the music by Spotify, be sure to collect this library, please! 🔥 This music player component can be accessed by only one line of code. Supporting by LiveData & AndroidX.
Stars: ✭ 577 (+265.19%)
Mutual labels:  music, music-composition
Mellite
An environment for creating experimental computer-based music and sound art. Mirror of https://git.iem.at/sciss/Mellite
Stars: ✭ 76 (-51.9%)
Mutual labels:  music, music-composition
Musicode
🎶 Markup language for music creation and analysis! -- https://hlorenzi.github.io/musicode/
Stars: ✭ 34 (-78.48%)
Mutual labels:  music, music-composition
Giada
Your Hardcore Loop Machine.
Stars: ✭ 903 (+471.52%)
Mutual labels:  music, music-composition
Theorytracker
🎼 HTML5/WebAudio multi-track functional harmony analysis and songwriting app! -- https://hlorenzi.github.io/theorytracker/
Stars: ✭ 62 (-60.76%)
Mutual labels:  music, music-composition
Miti
miti is a musical instrument textual interface. Basically, its MIDI, but with human-readable text. 🎵
Stars: ✭ 103 (-34.81%)
Mutual labels:  music, music-composition
Openwebscrobbler
🎧 An open source web scrobbler for Last.fm
Stars: ✭ 148 (-6.33%)
Mutual labels:  music
Bravura
Bravura music font, reference font for SMuFL (Standard Music Font Layout)
Stars: ✭ 155 (-1.9%)
Mutual labels:  music
Vue Wait
Complex Loader and Progress Management for Vue/Vuex and Nuxt Applications
Stars: ✭ 1,869 (+1082.91%)
Mutual labels:  vue-components
Vuejs Datatable
A Vue.js component for filterable and paginated tables.
Stars: ✭ 148 (-6.33%)
Mutual labels:  vue-components
Music
音乐搜索器 - 多站合一音乐搜索解决方案
Stars: ✭ 1,923 (+1117.09%)
Mutual labels:  music
Nsfplay
Nintendo NES sound file NSF music player
Stars: ✭ 155 (-1.9%)
Mutual labels:  music
Babe Qt
This version is unmantained. The new version is now named VVAVE
Stars: ✭ 147 (-6.96%)
Mutual labels:  music
Netease Music Spider
netease-music-spider is a sipder that you can find beautiful girlfriend or handsome boyfriend.
Stars: ✭ 147 (-6.96%)
Mutual labels:  music

Viano

A toy that lets you write songs using Vue components.

Targets the Web Audio API. Most compatible with up-to-date Chrome.

Uses blackswan.js.

Overview

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.

This is also a proof-of-concept for using Vue component markup as a tool for writing declarative code in a domain-specific language.

Probably don't use this in production code.

Installation

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

Usage

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").

The first line of "La Cucaracha" in Viano looks like this:

<Song title="La cucaracha" :tempo="200" :time-signature="[4, 4]">
  <Part :measure="0">
    <Sequence>
      <Note name="c4" value="1/8" :repeat="3">          La cuca-
      </Note><Note name="f4" value="3/8">               ra-
      </Note><Note name="a4" value="1/4">               cha
      </Note><Note name="c4" value="1/8" :repeat="3">   La cuca-
      </Note><Note name="f4" value="3/8">               ra-
      </Note><Note name="a4" value="1/4">               cha
      </Note><Rest value="3/8"></Rest>
      <Note name="f4" value="1/4">                      ya
      </Note><Note name="f4" value="1/8">               no
      </Note><Note name="e4" value="1/8" :repeat="2">   puede
      </Note><Note name="d4" value="1/8" :repeat="2">   cami-
      </Note><Note name="c4" value="3/8">               nar
      </Note>
    </Sequence>
  </Part>
</Song>

<Song>

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.

Attributes:

  • title: (optional: default 'Untitled') a string. Will be displayed next to the play/stop control.
  • tempo: (optional: default 120) a number. The beats per minute for this song.
  • 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.

<Part>

This is the only element that can be inside of a <Song>. It indicates the measure at which the music it contains should start. It can contain a <Sequence>, <Note>, <Chord>, or <Rest>.

Attributes:

  • measure: (optional: default 0) a number. The measure where the music should start. 0 corresponds to the beginning of the first measure.

<Sequence>

This element contains a series of <Note>, <Chord>, and <Rest> which will be played in order.

Attributes:

  • repeat: (optional) a number. If present, indicates the number of times in a row that the sequence should be repeated.

<Note>

This element represents a single note played for a certain amount of time.

Attributes:

  • name: (required) a string. The note between a0 and c8 which should be played.
  • value: (required) a string ("1/4") or number (0.25). The note value, where "1/4" is a quarter note.
  • repeat: (optional) a number. See the attribute of the same name on <Sequence>.
  • styles: (optional) an array of blackswan-js style values. See the blackswan-js docs for a full list.

<Rest>

This element represents a rest (a gap between notes played) for a certain amount of time.

Attributes:

  • value: (required) a string or number. See the attribute of the same name on <Note>.

<Chord>

This element represents one or more notes played simultaneously for a certain amount of time.

Attributes:

  • notes: (required) a string ("c4 e4 g4") or array (['c4', 'e4', 'g4']).
  • repeat, styles, and value: see the attributes of the same name on <Note>.

Contributing

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.

If this is your first open-source PR, let me know and I'll try to be extra helpful.

If you know your way around the Web Audio API or synthesizers in general, you're invited to contribute to blackswan.js.

Thanks to Mirza Zulfan for creating the project logo.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].