Skip to content

Commit 803bbbd

Browse files
fix: midi导出时节拍没导出; add: midi节奏导入
1 parent 06bf9d7 commit 803bbbd

4 files changed

Lines changed: 197 additions & 55 deletions

File tree

README.md

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,10 @@
7474
分析-自动填充,原理是将大于阈值的标记出来,效果不堪入目……于是研究并引入了基于神经网络的扒谱(分析-人工智障扒谱),但是效果非常初级。如有想法欢迎call me。
7575

7676
## 关于节奏对齐
77-
我一直以来都是扒数字谱的,所以没关注过节奏。但是只能用于数字谱这个应用也太弱了。所以加入了小节对齐功能。“丑话说在前面”,绘制音符大概是不可能对齐小节线了(但是导出midi的时候会对齐),**需要强迫症忍受一下**。<br>
77+
“丑话说在前面”,绘制音符大概是不可能对齐小节线了(但是导出midi的时候会对齐),**需要强迫症忍受一下**。<br>
7878
乐谱的单位是"x分音符",而音乐的单位是"秒"。如果要实现"小节对齐",单位要换成"x分音符"。整个程序时间轴一定要按照"秒"为单位,这是由频谱分析决定的;如果要实现制谱软件一样的对齐,那么音符绘制需要换成"x分音符"的对齐方式。这意味着在120bpm的小节下的音符,拉到60bpm的小节下,在以秒为尺度的时间轴下,音符会变长。wavetone就是这样处理的。<br>
7979
但是对着原曲扒谱,最好还是根据"秒"来绘制音符。用wavetone扒谱的体验中,我最讨厌的就是被"x分音符"限制。用秒可以保证和原曲完全贴合,使用很灵活。但是这样导出的midi就不能直接制谱。按照"x分音符"来绘制音符还会导致程序很难写。开发者和使用者都不快乐。<br>
80-
扒谱用秒为单位合适,而制谱用x分音符合适。为了跨越这个鸿沟,我决定这样设计程序:使用midi文件作为对外的桥梁,在我的程序内用秒为单位扒谱,导出为midi的时候根据小节进行四舍五入的量化,形成规整的midi用于制谱。具体实现是:在秒轴上加入小节轴,用户可以拖动小节轴的某个小节调节后面紧跟的bpm相同的小节。小节轴只提供视觉上的辅助,对于画音符没一点限制。<br>
80+
扒谱用秒为单位合适,而制谱用x分音符合适。为了跨越这个鸿沟,我这样设计了程序:使用midi文件作为对外的桥梁,在我的程序内用秒为单位扒谱,导出为midi的时候根据小节进行四舍五入的量化,形成规整的midi用于制谱。具体实现是:在秒轴上加入小节轴,用户可以拖动小节轴的某个小节调节后面紧跟的bpm相同的小节。小节轴只提供视觉上的辅助,对于画音符没一点限制。<br>
8181
对齐算法有一定的限制,比如四分音符按照八分音符的划分对齐、八分音符按十六分音符的划分对齐……比如四分音符不可能在第三个16分音符开始,只可能在整数倍个8分音符的时长处开始。所以,绘制音符的时候到底可以偏差小节线多远心里有数了吧?
8282

8383
## 文件结构
@@ -87,6 +87,7 @@
8787
│ app_audioplayer.js: 音频播放
8888
│ app_beatbar.js: 小节轴
8989
│ app_hscrollbar.js: 底部滑动条
90+
│ app_io.js: 管理输入与输出
9091
│ app_keyboard.js: 左侧键盘
9192
│ app_midiaction.js: 与音符的交互
9293
│ app_midiplayer.js: 音符播放
@@ -113,14 +114,19 @@
113114
├─dataProcess
114115
| | aboutANA.md: 自动音符对齐的数学建模
115116
| | ANA.js: 自动音符对齐
117+
│ │ bpmEst.js: 节奏分析
116118
| │ analyser.js: 频域数据分析与简化
117119
| │ fft_real.js: 执行实数FFT获取频域数据
118-
| │ midiExport.js: 对绘制的音符进行近似以导出为足以制谱的midi
120+
| │ stftGPU.js: 使用WebGPU加速STFT
119121
| |
120122
| ├─AI
121-
| │ │ basicamt.js: 开启worker进行后台AMT
122-
| │ │ basicamt_44100.onnx: 神经网络模型
123-
| │ │ basicamt_worker.js: 新线程
123+
│ │ │ AIEntrance.js: 开启AI的worker的入口
124+
│ │ │ basicamt_44100.onnx: 音色无关转录 神经网络模型
125+
│ │ │ basicamt_worker.js: 音色无关转录 新线程
126+
│ │ │ postprocess.js:神经网络结果到音符的后处理
127+
│ │ │ septimbre_44100.onnx: 音色分离转录 神经网络模型
128+
│ │ │ septimbre_worker.js: 音色分离转录 新线程
129+
│ │ │ SpectralClustering.js: 音色分离转录需要的 谱聚类
124130
| │ │
125131
| │ └─dist: onnxruntime打包
126132
| │ bundle.min.js

0 commit comments

Comments
 (0)