项目简介 - GitHub
文章推薦指數: 80 %
自由钢琴(AutoPiano)是利用HTML5技术开发的在线钢琴应用,致力于为钢琴爱好者、音乐爱好者以及其他所有的创造者提供一个优雅、简洁的平台,在学习工作之余可以享受 ...
Skiptocontent
{{message}}
AutoPiano
/
AutoPiano
Public
Notifications
Star
5.1k
Fork
862
自由钢琴🎹AutoPiano(https://www.autopiano.cn)Simple&ElegantPianoOnline
GPL-3.0License
5.1k
stars
862
forks
Star
Notifications
Code
Issues
41
Pullrequests
2
Discussions
Actions
Projects
1
Wiki
Security
Insights
More
Code
Issues
Pullrequests
Discussions
Actions
Projects
Wiki
Security
Insights
master
Branches
Tags
Couldnotloadbranches
Nothingtoshow
Loading
{{refName}}
default
Couldnotloadtags
Nothingtoshow
{{refName}}
default
Loading
2
branches
0
tags
Code
Loading
Latestcommit
Gitstats
39
commits
Files
Permalink
Failedtoloadlatestcommitinformation.
Type
Name
Latestcommitmessage
Committime
autopiano_build_demo
feat:addbuilddemo
Jul26,2019
build
feat:update
Jun28,2019
config
feat:addbuilddemo
Jul26,2019
src
fix:updatenpmpackageversion
Sep18,2021
static
feat:update
Aug13,2019
.babelrc
feat:update
Jun18,2019
.editorconfig
feat:update
Jun18,2019
.gitignore
feat:initautopiano;openautopianosourcecode;
Apr1,2019
.npmrc
fix:updatenpmpackageversion
Sep18,2021
.postcssrc.js
feat:update
Jun18,2019
LICENSE
feat:update
Jun18,2019
README.md
UpdateREADME.md
Jul11,2019
favicon.png
feat:initautopiano;openautopianosourcecode;
Apr1,2019
index.html
feat:addbuilddemo
Jul26,2019
package-lock.json
fix:updatenpmpackageversion
Sep18,2021
package.json
fix:updatenpmpackageversion
Sep18,2021
Viewcode
项目简介
DevBuild&run开发构建和运行
开发这样的应用需要乐理知识吗?
钢琴界面效果是怎么写的?
如何实现单个音符的播放?
关于钢琴曲的自动播放
欢迎贡献协作
最后
README.md
Hate996?ComeHere&Relax~
最近用Vue+Tone.js做了一款钢琴类web应用,名字定为自由钢琴(AutoPiano),人生如音乐,欢快且自由。
此文权当作该项目的总结和分享~
项目简介
自由钢琴(AutoPiano)是利用HTML5技术开发的在线钢琴应用,致力于为钢琴爱好者、音乐爱好者以及其他所有的创造者提供一个优雅、简洁的平台,在学习工作之余可以享受钢琴、音乐的美好。
就类似于多年前Flash开发的钢琴游戏,自由钢琴只是换了H5的技术,同时支持了钢琴曲的自动播放功能。
AutoPiano支持键盘按键和鼠标点击播放,同时琴键上会有按键和音名提示。
另外,AutoPiano还有教学的功能,一种方式是快速入门,通过简易的谱子按键进行演奏,另一种是演奏示例,通过钢琴曲的自动播放来达到演示的目的。
目前这两个功能都在持续完善中,如下图所示:
体验地址:http://www.autopiano.cn
项目地址:https://github.com/WarpPrism/AutoPiano
DevBuild&run开发构建和运行
gitclonehttps://github.com/WarpPrism/AutoPiano.git
cdAutoPiano
cnpminstall/npminstall/yarninstall
#developmentmode->http://localhost:5000
cnpmrundev
#productionmode
cnpmrunbuild
#Howtorun
1.buildprojectsuccessfully
2.cddist
3.cnpminstall-ganywhere
4.anywhere(usingstaticservertoservetheassets)
开发这样的应用需要乐理知识吗?
当然。
基本的乐理知识还是要知道的,比如CDEFGAB音名、五线谱、调式、节奏等等还是要懂一点的。
篇幅所限,这里就不展开讨论了,推荐两个网站:
https://www.bilibili.com/video/av12168119/
https://www.cnblogs.com/devymex/p/3385179.html
其他的就是编程知识了,以及如何将乐理知识转化为程序逻辑。
AutoPiano目前采用的技术架构是vue框架+tone.js。
钢琴界面效果是怎么写的?
可以用CSS或贴图。
笔者这里直接用css实现了,考虑到钢琴有黑键和白键,且黑键和白键有序地排列成7:5的模式,所以实现起来并不复杂。
如何实现单个音符的播放?
实现音频播放,最简单的就是利用HTML5中的audio标签,通过触发audio的play和pause方法,实现对音频的控制,笔者一开始就是这么实现的。
//
之后也许是出于好奇,尝试了Tone.js,通过Tone.js+内置采样器实现对音频播放更有效的控制,当然,其提供的很多复杂功能都还没用上。
。
。
//初始化合成器
this.synth=SmapleLibrary.load({
instruments:"piano"
}).toMaster()
//合成器触发音频释放
playNote(notename='C4',duration='2n'){
if(!this.synth)return
this.synth.triggerAttackRelease(notename,duration);
}
嗯,现在的代码就符合音乐美学和代码美学了,美滋滋。
当然笔者也期望Tone.js能快点完善中文文档,不然上手还是很吃力的,感兴趣的小伙伴可以先去其官网研究一番。
关于钢琴曲的自动播放
这一部分应该是开发整个应用最难的地方了,因为音乐或者说乐谱本身是相当复杂的,根据百度百科的描述,五线谱起源于希腊,历经上千年不断完善才成为现在的乐谱标准。
而简谱的出现则要晚的多,但依然五脏俱全,可以说,简谱也不简单。
笔者的实现思路是,以一种乐谱格式为载体,将乐谱转换为一种程序可识别的格式,然后导入到程序中进行播放,这种可识别格式如下所示,也是目前所采用的:
{
name:'小星星',
step:'C',
speed:'100',
playState:'',
mainTrack:['1(1)','1(1)','5(1)','5(1)','6(1)','6(1)','5(2)','4(1)','4(1)','3(1)','3(1)','2(1)','2(1)','1(2)','5(1)','5(1)','4(1)','4(1)','3(1)','3(1)','2(2)','5(1)','5(1)','4(1)','4(1)','3(1)','3(1)','2(2)','1(1)','1(1)','5(1)','5(1)','6(1)','6(1)','5(2)','4(1)','4(1)','3(1)','3(1)','2(1)','2(1)','1(2)',
'1(0.5)','5>(0.5)','3>(0.5)','5>(0.5)','1>(0.5)','5>(0.5)','3>(0.5)','5>(0.5)','1>(0.5)','6>(0.5)','4>(0.5)','6>(0.5)','1>(0.5)','5>(0.5)','3>(0.5)','5>(0.5)','1>(0.5)','6>(0.5)','4>(0.5)','6>(0.5)','1>(0.5)','5>(0.5)','3>(0.5)','5>(0.5)','7>>(0.5)','5>(0.5)','2>(0.5)','5>(0.5)','1>(0.5)','5>(0.5)','3>(0.5)','5>(0.5)','1>(0.5)','3>(0.5)','5>(0.5)','1(0.5)','1>(0.5)','4>(0.5)','6>(0.5)','1(0.5)','1>(0.5)','3>(0.5)','5>(0.5)','1(0.5)','5>>(0.5)','7>>(0.5)','2>(0.5)','5>(0.5)',
'1>(0.5)','3>(0.5)','5>(0.5)','1(0.5)','1>(0.5)','4>(0.5)','6>(0.5)','1(0.5)','1>(0.5)','3>(0.5)','5>(0.5)','1(0.5)','5>>(0.5)','7>>(0.5)','2>(0.5)','5>(0.5)','1>(0.5)','5>(0.5)','3>(0.5)','5>(0.5)','1>(0.5)','5>(0.5)','3>(0.5)','5>(0.5)','1>(0.5)','6>(0.5)','4>(0.5)','6>(0.5)','1>(0.5)','5>(0.5)','3>(0.5)','5>(0.5)','1>(0.5)','6>(0.5)','4>(0.5)','6>(0.5)','1>(0.5)','5>(0.5)','3>(0.5)','5>(0.5)','7>>(0.5)','5>(0.5)','2>(0.5)','5>(0.5)','1>(0.5)','5>(0.5)','3>(0.5)','5>(0.5)',
'1(0.75)','5(0.25)','3(0.5)','5(0.5)','1(0.75)','5(0.25)','3(0.5)','5(0.5)','1(0.75)','6(0.25)','4(0.5)','6(0.5)','1(0.75)','5(0.25)','3(0.5)','5(0.5)','1(0.75)','6(0.25)','4(0.5)','6(0.5)','1(0.75)','5(0.25)','3(0.5)','5(0.5)','7>(0.75)','5(0.25)','2(0.5)','5(0.5)','1(0.75)','5(0.25)','3(0.5)','5(0.5)','1(0.75)','3(0.25)','5(0.5)','1(0.75)','7>(0.25)','2(0.5)','5(0.5)',
'1(0.75)','3(0.25)','5(0.5)','1(0.75)','7>(0.25)','2(0.5)','5(0.5)','1(0.75)','5(0.25)','3(0.5)','5(0.5)','1(0.75)','5(0.25)','3(0.5)','5(0.5)','1(0.75)','6(0.25)','4(0.5)','6(0.5)','1(0.75)','5(0.25)','3(0.5)','5(0.5)','1(0.75)','6(0.25)','4(0.5)','6(0.5)','1(0.75)','5(0.25)','3(0.5)','5(0.5)','7>(0.75)','5(0.25)','2(0.5)','5(0.5)','1>(2)']
}
额,是不是很复杂,很臃肿。
。
。
它以简谱为载体,通过特殊符号来标记音高和时长,从而产生mainTrack和backingTrack两个音轨,然后同步播放即可。
这种实现虽然简单,但有很多致命缺点:
不兼容通用的计算机乐谱格式,如musicxml
不能完全表示音乐的所有维度,比如很多钢琴谱不止有两个音轨
过于抽象和复杂,不实用,很难制作这种识别格式
音乐专业人士:whatareyou弄啥嘞?
所以笔者转向另一种实现思路,解析musicxml,但奈何这个过程耗时耗力,目前只完成了一半,部分细节还没有完全解析正确,如果读者有好的想法,可以在评论区留言探讨。
欢迎贡献协作
贡献代码,直接PR
贡献首页展示的随机歌词:https://github.com/WarpPrism/AutoPiano/issues/12
贡献快速入门的弹奏方法:https://github.com/WarpPrism/AutoPiano/issues/9
没想到短时间内能有这么多star(`・ω・´),吓得晚上下班回去又继续码代码。
。
。
不过此项目仍不完善,还在不断更新中,特别是入门弹奏谱子比较少,目前只有:
小星星
新年好
因为爱情
隐形的翅膀
蒲公英的约定
纸短情长
同桌的你
晴天
千与千寻主题曲
明天你好
青花瓷
...
都是笔者一个一个手打出来的T_T,能力有限,会的就这么多,所以是时候见证社区的力量了。
FORK时,请遵循GPL开源协议。
最后
最后再贴一下体验地址:>体验地址:http://www.autopiano.cn
欢迎体验,分享。
解析musicxml的过程仍在进行中,如果某一天成功了,那么示例演奏里面就会加入海量的歌曲,以供学习,如果失败了,额,那就是因为生活阻挡了我奋进的脚步。
。
。
原创不易,转载分享时请注明出处~
About
自由钢琴🎹AutoPiano(https://www.autopiano.cn)Simple&ElegantPianoOnline
Topics
music
audio-player
relax
instruments
piano
entertainment
anti-996
Resources
Readme
License
GPL-3.0License
Releases
Noreleasespublished
Packages0
Nopackagespublished
Contributors2
WarpPrism
棱镜_JH
p1uxtar
YuanchenXie
Languages
JavaScript
65.5%
Vue
31.7%
HTML
2.0%
Less
0.8%
Youcan’tperformthatactionatthistime.
Yousignedinwithanothertaborwindow.Reloadtorefreshyoursession.
Yousignedoutinanothertaborwindow.Reloadtorefreshyoursession.
延伸文章資訊
- 1線上鋼琴模擬演奏網– 自由鋼琴 - WWW網站導航
自由鋼琴(AutoPiano)是利用HTML5技術開發的線上鋼琴應用,致力於為鋼琴愛好者、音樂愛好者提供一個優雅、簡潔的平臺,在學習工作之餘可以線上彈鋼琴, ...
- 2虛擬鋼琴| 你的線上鋼琴模擬器 - Skoove
- 3自由钢琴- AutoPiano | 在线弹钢琴,听钢琴曲,超好听,超好玩 ...
自由钢琴(AutoPiano)是利用HTML5技术开发的在线钢琴应用,致力于为钢琴爱好者、音乐爱好者提供一个优雅、简洁的平台,在学习工作之余可以在线弹钢琴,享受音乐、生活的 ...
- 4项目简介 - GitHub
自由钢琴(AutoPiano)是利用HTML5技术开发的在线钢琴应用,致力于为钢琴爱好者、音乐爱好者以及其他所有的创造者提供一个优雅、简洁的平台,在学习工作之余可以享受 ...
- 5自由钢琴- AutoPiano | 在线弹钢琴,听钢琴曲,超好听 - 12K导航
自由钢琴(AutoPiano)是利用HTML5技术开发的在线钢琴应用,致力于为钢琴爱好者、音乐爱好者提供一个优雅、简洁的平台,在学习工作之余可以在线弹钢琴,享受音乐、生活的 ...