3

我正在尝试开发一个类似于C#中的tonematrix的应用程序。我首先尝试使用 .net 和 NAudio 库,现在我正在尝试使用 XNA,但似乎我能得到的只是杂音。


使用NAudio,我生成了 8 个具有不同频率的简单正弦波,从 (440hz * 1) 到 (440hz * 8) 不等。

使用XNA,我使用同一个音频文件的多个 SoundEffectInstance (如钢琴的 D4 音符),每个都有不同的 Pitch 值;音高值最多可以上升或下降一个八度音程。

在这两种情况下,当声音重叠时,我会听到噪音而不是音乐。也许我完全错了,这不是混合不同音高/频率的声音的问题。

我很难相信tonematrix只是使用“简单的正弦波合成器”,因为声音非常丰富,当它们混合在一起时,它们总是会产生谐波,而简单的正弦波总是听起来很丑陋和不自然我。

我有一个不好的方法来创造和声吗?你知道tonematrix使用的正弦波到底发生了什么吗?

4

2 回答 2

2

我碰巧能够回答你的音乐问题,但这类问题最好在https://music.stackexchange.com/上提出。

首先是规模。这些东西通常使用五声音阶(来自维基百科:“这种音阶的任何音高都可以以任何顺序或组合播放而不会发生冲突”)。根据评论,您链接的示例使用从 A 到 A 的 D 大调五声音阶。

你会发现它并没有使用直接的正弦波,而是实际上使用了ADSR 包络,在开始时给它一个令人愉悦的“冲击”,在结尾处给它(假的)“回声”。这很容易实现,因为您只需要调制幅度。

据我所知,将波形混合在一起时并没有做任何特别的事情。很可能它正在做简单的加法。

至于实现,如果您有一种生成正弦波的方法,而不是尝试对样本进行音高转换,为什么不使用DynamicSoundEffectInstance并输入您的正弦波呢?

XNA 的内置音高转换并不是很适合这项任务。你确定你使用正确的值来调整它吗?

于 2011-06-18T14:15:31.773 回答
1

如果您使用与输入相同频率的倍数,则每个正弦波将比其他正弦波高一个八度。像这样将 8 个正弦波加在一起会在混合波形中产生一些非常高的峰值,因此您需要确保应用限制或降低整体音量,以免造成失真。如果没有看到您的代码,很难确定,但这可能是您产生噪音的部分原因。

于 2011-06-19T12:51:18.917 回答