我正在尝试开发一个类似于C#中tonematrix的应用程序。我首先尝试使用.net和NAudio库,现在我正在尝试使用XNA,但似乎所有我能得到的都是一种杂音。
使用 NAudio ,我将生成8个不同频率的简单正弦波,从(440hz * 1)到(440hz * 8)不等。
使用 XNA ,我正在使用相同音频文件的多个SoundEffectInstance(如钢琴的D4音符),每个音调具有不同的音高值;音高值可以上升或下降最大八度。
在这两种情况下,当声音重叠时,我会得到噪音而不是音乐。也许我弄错了,这不是混合不同音高/频率的声音的问题。
我发现很难相信音频矩阵只使用“简单的正弦波合成器”,因为声音非常丰富,当它们混合在一起时,它们总是产生谐波调谐,而简单的正弦波总是听起来很丑陋对我来说是人为的。
我创造和声的方法不好吗?您是否知道tonematrix使用的正弦波究竟发生了什么?
答案 0 :(得分:2)
我碰巧能够回答你的音乐问题,但https://music.stackexchange.com/可能会更好地提出这些问题。
首先是规模。这些东西通常使用pentatonic scales(来自维基百科:“任何这样的音阶可以以任何顺序或组合播放而不会发生冲突”)。根据评论,您链接的示例使用从A到A的D Major Pentatonic。
你会发现它没有使用直线正弦波,但事实上正在使用ADSR envelope在开始时给它带来令人愉悦的“冲击”,并在最后使用(假)“回声”。这很容易实现,因为您只需要调制振幅。
据我所知,将波形混合在一起时没有做任何特别的事情。有可能是简单的添加。
至于实施方式,如果您有一种生成正弦波的方法,而不是尝试对样本进行俯仰移位,为什么不使用DynamicSoundEffectInstance
并将其输入正弦波?
XNA的内置音高变换并不适合这项任务。你确定你正在使用正确的值进行调整吗?
答案 1 :(得分:1)
如果您使用与输入相同频率的倍数,则每个正弦波将比其他正弦波高一个八度。将这样的8个正弦波加在一起会在混合波形中产生一些非常高的峰值,因此您需要确保应用限制或减小整体音量以免引起失真。没有看到你的代码,很难肯定,但这可能是你的噪音的一部分原因。