2011-06-18 63 views
3

我正在尝试开发类似于C#中的tonematrix的应用程序。我已经先用.net和NAudio库尝试过了,现在我正在尝试使用XNA,但似乎我只能听到一些杂音。音频编程,生成和声


随着n音讯,我生成8个differente频率简单正弦波,从(440Hz的* 1)变化到(440Hz的* 8)。

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

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

我觉得很难相信tonematrix使用的不过是一个“简单的正弦波合成器”,因为声音非常丰富,当它们混合在一起时,它们总是产生一个谐波曲调,而一个简单的正弦波总是发出声音丑陋和虚假给我。

我的创作和谐方法不好吗?你有没有想到tonematrix使用的正弦波到底发生了什么?

+0

您是否将音高设置为12个半音以外的任何音高? –

+0

在** NAudio **频率都是440hz的倍数。 在** XNA **中,音高间隔(-1 1)被分成17个声音,所以应该有正常声音,8个上半音和8个低音,填充上下八度。 – vainheim

回答

2

我碰巧能够回答你的音乐问题,但这些问题可能在https://music.stackexchange.com/上更好。

首先是规模。这些东西通常使用pentatonic scales(来自维基百科:“这种尺度的任何音高可以以任何顺序或组合方式进行演奏而不发生冲突”)。根据评论,你链接的例子使用D大五元音从A到A.

你会发现它并没有使用直线正弦波,而是实际上使用ADSR envelope来给它一个令人愉快的“冲床“在开始和(假)”回声“结束。这很容易实现,因为您只需要调制幅度。

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

至于实现,如果你有一个产生正弦波的方法,而不是尝试移动一个采样点,为什么不使用DynamicSoundEffectInstance并为它提供正弦波?

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

+1

它看起来像XNA SoundEffect不是一个好的选择,即使是原型,因为Play方法似乎非常沉重,而且应该开始播放的声音实际上在它们之间有延迟。我将把所有信息应用于NAudio流或DynamicSoundEffectInstance,感谢您提供各种提示和信息。 – vainheim

1

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