您的方法不适用于任何一般的音乐示例,原因如下:
音乐本质上是动态的。这意味着音乐中存在的每个声音都由不同的静音、起音、延音、衰减和再次静音的时期调制,也称为声音的包络。
乐器音符和人声音符不能通过单一音调正确合成。这些音符必须由基音和许多谐波合成。
但是,仅合成乐器音符或人声音符的基音和谐波是不够的,还必须合成音符的包络,如上文 1 所述。
此外,要合成音乐中的旋律段落,无论是器乐还是声乐,都必须为段落中的每个音符合成上面的 1-3 项,并且还必须合成每个音符相对于段落开头的时间。
从最终混音录音中分析提取单个乐器或人声是一个非常困难的问题,您的方法没有解决该问题,因此您的方法无法正确解决问题 1-4。
简而言之,任何试图通过使用严格的分析方法从音乐录音的最终混音中提取近乎完美的音乐转录的方法,在最坏的情况下几乎肯定注定要失败,而在最好的情况下属于高级研究领域。
如何摆脱这种僵局取决于工作的目的是什么,这是 OP 没有提到的。
这项工作将用于商业产品,还是一个爱好项目?
如果是商业作品,则需要各种进一步的方法(昂贵或非常昂贵的方法),但这些方法的细节取决于工作的目标是什么。
最后,您的合成听起来像随机的哔哔声,原因如下:
您的基音检测器与滚动 FFT 帧的时间相关联,这实际上会在每个滚动 FFT 帧的开始时间生成一个可能是假的基音。
为什么检测到的基音可能是假的?因为您将音乐样本任意剪辑到 (FFT) 帧中,因此可能会在音符中间某处截断许多同时发声的音符,从而扭曲音符的频谱特征。
您不会尝试合成检测到的音符的包络,也不能,因为无法根据您的分析获取包络信息。
因此,合成结果可能是一系列纯正弦啁啾,时间间隔为滚动 FFT 帧的 delta-t。每个啁啾可能具有不同的频率,具有不同的包络幅度,并且具有可能是矩形的包络。
要了解音符的复杂性,请查看以下参考资料:
乐器频谱到 102.4 KHz
乐器音符谱及其时域包络
特别注意构成每个音符的许多纯音,以及每个音符时域包络的复杂形状。多个音符相对于彼此的可变时间是音乐的另一个重要方面,就像典型音乐中的复音(多个声音同时发声)一样。
所有这些音乐元素共同使得对自主音乐转录的严格分析方法极具挑战性。