标签: c# algorithm audio stretching soundtouch
我正在开发一个项目,包括使用SoundTouch和C#进行声音拉伸。
作为停止音乐播放时的一种效果,我想实现拉伸算法,例如当DJ关闭Vinyl时,但是Vinyl停止旋转需要几秒钟,同时音乐仍在播放,声音延伸降低速度直到它变为零。
我的问题是我不知道应该从哪里开始。我想过使用某种迭代来减少音乐样本块的速度,但是对我来说似乎有点复杂,我在解决算法时遇到了问题。
非常感谢任何建议,起点,示例或帮助。
感谢。
答案 0 :(得分:1)
唱机放慢速度的效果不需要时间延长,因为你不会独立改变速度和音高。您只需通过重新采样音频来降低播放速率。
在下图中,绿点代表输入音频样本,网格是输出样本时钟,橙色点是结果输出音频样本。
为了生成输出音频样本,您需要在输入样本值之间进行插值。在图中,我使用了线性插值,这是最简单的方法。要提高音频质量,您可以使用数学上更精确的插值方法,如差分插值(搜索样条绘制技术以获取更多信息),但对于快速减速效果的特定情况,线性插值可能足够好。 / p>