下拉刷新
Repository Details
Shared bynavbar_avatar
repo_avatar
HelloGitHub Rating
0 ratings
基于 Omi 和 Omi Snippets 构建的钢琴应用
Claim
Collect
Share
1.2k
Stars
Yes
Chinese
JavaScript
Language
No
Active
2
Contributors
12
Issues
No
Organization
None
Latest
158
Forks
None
License
More
piano image
基于 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