Repository Details
Shared by


HelloGitHub Rating
0 ratings
Claim
Discuss
Collect
Share
1.2k
Stars
Yes
Chinese
JavaScript
Language
No
Active
2
Contributors
12
Issues
No
Organization
None
Latest
158
Forks
None
License
More

基于 Omi 和 Omi Snippets 构建的钢琴应用。你不需要懂乐理知识,仅用键盘即可弹奏简单而熟悉的音乐,也借此项目感谢音乐和编程的陪伴!也致敬各位奋斗于 996 的代码家和打工人,音乐不曾辜负任何人,正如 Leehom Wang 歌曲中唱到:如果世界太危险,只有音乐最安全,带着我进梦里面,让歌词都实现!上面这段是作者写的推荐语,我本来想从项目的角度再夸下这个项目,但我放弃了。虽然我之前推荐过的那个钢琴项目弹的比这个要好听,但我更喜欢这个项目。因为我从他的项目中感受到满满敬意和“爱”,致敬每一位奋斗的“代码家”,HG 爱你们。[在线尝试](http://wscats.gitee.io/piano/build/),示例代码:
```javascript
playSong(song) {
this.setSong([...song])
let offset = 0
let time = 0
let playSong = async () => {
// 右边是从外部来中断递归
if (offset < song.length && this.store.data.song.length > 0) {
switch (typeof song[offset]) {
// 简谱2演奏方法 根据 ++12345--6. 简单旋律情况
case 'string':
let letters = song[offset].match(/[0-9]/g)
switch (letters.length) {
case 1:
time = this.handleString(song, offset)
break
default:
time = this.handleStrings(song, offset)
break
}
break
// 简谱1演奏方法 根据 CDEFGAB,复杂旋律情况,比如有和弦
case 'object':
console.log(song[offset]['note'])
time = song[offset]['time'];
this.playNote(song[offset]['note'])
break;
case 'number':
// 休止符
switch (song[offset]) {
case 0:
time = 1000
break
}
break
}
await new Promise((resolve) => {
let timer = setTimeout(() => {
clearInterval(timer)
resolve()
}, time)
})
offset++
// 自定义事件,跟下面底部的音符自动跳动结合
this.add()
playSong()
} else {
// 暂停播放
clearTimeout(this.timer)
this.store.data.song = []
this.store.data.count = 0
return
}
}
playSong()
}
```
Included in:
Vol.56
Comments
Rating:
No comments yet