|
74 | 74 | 分析-自动填充,原理是将大于阈值的标记出来,效果不堪入目……于是研究并引入了基于神经网络的扒谱(分析-人工智障扒谱),但是效果非常初级。如有想法欢迎call me。 |
75 | 75 |
|
76 | 76 | ## 关于节奏对齐 |
77 | | -我一直以来都是扒数字谱的,所以没关注过节奏。但是只能用于数字谱这个应用也太弱了。所以加入了小节对齐功能。“丑话说在前面”,绘制音符大概是不可能对齐小节线了(但是导出midi的时候会对齐),**需要强迫症忍受一下**。<br> |
| 77 | +“丑话说在前面”,绘制音符大概是不可能对齐小节线了(但是导出midi的时候会对齐),**需要强迫症忍受一下**。<br> |
78 | 78 | 乐谱的单位是"x分音符",而音乐的单位是"秒"。如果要实现"小节对齐",单位要换成"x分音符"。整个程序时间轴一定要按照"秒"为单位,这是由频谱分析决定的;如果要实现制谱软件一样的对齐,那么音符绘制需要换成"x分音符"的对齐方式。这意味着在120bpm的小节下的音符,拉到60bpm的小节下,在以秒为尺度的时间轴下,音符会变长。wavetone就是这样处理的。<br> |
79 | 79 | 但是对着原曲扒谱,最好还是根据"秒"来绘制音符。用wavetone扒谱的体验中,我最讨厌的就是被"x分音符"限制。用秒可以保证和原曲完全贴合,使用很灵活。但是这样导出的midi就不能直接制谱。按照"x分音符"来绘制音符还会导致程序很难写。开发者和使用者都不快乐。<br> |
80 | | -扒谱用秒为单位合适,而制谱用x分音符合适。为了跨越这个鸿沟,我决定这样设计程序:使用midi文件作为对外的桥梁,在我的程序内用秒为单位扒谱,导出为midi的时候根据小节进行四舍五入的量化,形成规整的midi用于制谱。具体实现是:在秒轴上加入小节轴,用户可以拖动小节轴的某个小节调节后面紧跟的bpm相同的小节。小节轴只提供视觉上的辅助,对于画音符没一点限制。<br> |
| 80 | +扒谱用秒为单位合适,而制谱用x分音符合适。为了跨越这个鸿沟,我这样设计了程序:使用midi文件作为对外的桥梁,在我的程序内用秒为单位扒谱,导出为midi的时候根据小节进行四舍五入的量化,形成规整的midi用于制谱。具体实现是:在秒轴上加入小节轴,用户可以拖动小节轴的某个小节调节后面紧跟的bpm相同的小节。小节轴只提供视觉上的辅助,对于画音符没一点限制。<br> |
81 | 81 | 对齐算法有一定的限制,比如四分音符按照八分音符的划分对齐、八分音符按十六分音符的划分对齐……比如四分音符不可能在第三个16分音符开始,只可能在整数倍个8分音符的时长处开始。所以,绘制音符的时候到底可以偏差小节线多远心里有数了吧? |
82 | 82 |
|
83 | 83 | ## 文件结构 |
|
87 | 87 | │ app_audioplayer.js: 音频播放 |
88 | 88 | │ app_beatbar.js: 小节轴 |
89 | 89 | │ app_hscrollbar.js: 底部滑动条 |
| 90 | +│ app_io.js: 管理输入与输出 |
90 | 91 | │ app_keyboard.js: 左侧键盘 |
91 | 92 | │ app_midiaction.js: 与音符的交互 |
92 | 93 | │ app_midiplayer.js: 音符播放 |
|
113 | 114 | ├─dataProcess |
114 | 115 | | | aboutANA.md: 自动音符对齐的数学建模 |
115 | 116 | | | ANA.js: 自动音符对齐 |
| 117 | +│ │ bpmEst.js: 节奏分析 |
116 | 118 | | │ analyser.js: 频域数据分析与简化 |
117 | 119 | | │ fft_real.js: 执行实数FFT获取频域数据 |
118 | | -| │ midiExport.js: 对绘制的音符进行近似以导出为足以制谱的midi |
| 120 | +| │ stftGPU.js: 使用WebGPU加速STFT |
119 | 121 | | | |
120 | 122 | | ├─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: 音色分离转录需要的 谱聚类 |
124 | 130 | | │ │ |
125 | 131 | | │ └─dist: onnxruntime打包 |
126 | 132 | | │ bundle.min.js |
|
0 commit comments