Skip to content

Commit

Permalink
减小CQT频谱的边缘效应的影响
Browse files Browse the repository at this point in the history
  • Loading branch information
madderscientist committed Aug 29, 2024
1 parent 1d4c51f commit bde973a
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 2 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

## 导入导出说明
- 导出进度: 结果是.nd的二进制文件,保存分析结果(频谱图)和音符音轨。导入的时候并不会强制要求匹配原曲!(会根据文件名判断一下,但不强制)
- 导出为midi: 只保证能听,节拍默认4/4,bpm默认60,midi类型默认1(同步多音轨)。第10轨不会分配为鼓点轨(本项目设计并不考虑扒鼓)。
- 导出为midi: 有两个模式。模式一只保证能听,节拍默认4/4,bpm默认60,midi类型默认1(同步多音轨);模式二会根据小节线进行对齐,可以直接用于制谱,算法概述见下面“节奏对齐”。两个模式下第10轨都不会分配为鼓点轨(本项目设计并不考虑扒鼓)。
- 导入midi: 将midi音符导入,只保证音轨、音符、音色能对应,音量默认127。如果导入后没有超过总音轨数,会在后面增加;否则会覆盖后面几轨(有提示)。

## 常规操作
Expand Down Expand Up @@ -141,7 +141,7 @@

### 2024 8 2
完成了issue2:不导入音频的midi编辑器。点击文件菜单下的“MIDI编辑器模式”就可以进入。<br>
视野的宽度取决于最后一个音符,模仿的是https://signal.vercel.app/edit。也尝试过自动增加视野,可以一直往右拉,但是这样在播放的时候,开启“自动翻页”会永远停不下来(翻一页就自动拓展宽度)。<br>
视野的宽度取决于最后一个音符,模仿的是[signal](https://signal.vercel.app/edit)。也尝试过自动增加视野,可以一直往右拉,但是这样在播放的时候,开启“自动翻页”会永远停不下来(翻一页就自动拓展宽度)。<br>
扒谱框架下的midi编辑器还是有些反人类,因为绘制音符时的单位是时间而不是x分音符。不过也能用。<br>
原理是实现了一个空壳的Audio,只有计时功能,没有发声功能。一些做法写在了todo.md上。

Expand Down
1 change: 1 addition & 0 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -1511,6 +1511,7 @@ function App() {
const cqtBins = cqtData[i];
const stftBins = s[i];
for (let j = 0; j < cqtBins.length; j++) {
if(cqtBins[j] == 0) continue; // 0的时候不用管,是低频的边缘效应
// 用非线性混合,当两者极大的时候取最大值,否则相互压制
if(stftBins[j] < cqtBins[j]) stftBins[j] = cqtBins[j];
else stftBins[j] = Math.sqrt(stftBins[j] * cqtBins[j]);
Expand Down

1 comment on commit bde973a

@madderscientist
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

STFT的频谱分析是当前时刻往后数8192点,而CQT的频谱分析是以当前帧的中心为窗的中心,因此前面几帧,在低频部分,会由于窗过长导致能量不够,导致值小。我认为再怎么样也不会是0,所以过滤了CQT中的0值,没想到解决了边缘效应。但是就算是最前面不应该也是有值的吗,为什么会是零呢……

Please sign in to comment.