C# 音频编程,产生和谐

C# 音频编程,产生和谐,c#,xna,audio,frequency,synthesizer,C#,Xna,Audio,Frequency,Synthesizer,我正在尝试开发一个类似于C#中的应用程序。我首先尝试使用.net和NAudio库,现在我尝试使用XNA,但似乎我能得到的只是一种杂音 通过NAudio,我产生了8个不同频率的简单正弦波,从(440hz*1)到(440hz*8)不等 使用XNA,我使用同一音频文件的多个SoundEffectInstance(如钢琴的D4音符),每个声音都有不同的音高值;音高值可以上升或下降一个最大八度 在这两种情况下,当声音重叠时,我得到的是噪音而不是音乐。也许我完全弄错了,这不是混合不同音调/频率的声音的问题

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


通过NAudio,我产生了8个不同频率的简单正弦波,从(440hz*1)到(440hz*8)不等

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

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

我发现很难相信tonematrix只使用了一个“简单正弦波合成器”,因为声音非常丰富,当它们混合在一起时,总是产生一个和谐的曲调,而简单正弦波在我看来总是难听和人造的


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

我正好能够回答你的音乐问题,但这些问题可能最好还是继续问下去

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

你会发现,它不是使用一个直接向上的正弦波,而是实际上使用一个在开始时给它一个令人愉快的“拳”,在结束时给它一个(假)“回声”。这很容易实现,因为您只需要调节振幅

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

至于实现,如果您有一种生成正弦波的方法,而不是尝试对样本进行俯仰移位,那么为什么不使用
DynamicSoundEffectInstance
并将正弦波馈送给它呢


XNA内置的音高变换并不十分适合这项任务。您确定使用了正确的值来调整它吗?

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

您是否将音高设置为12个半音以外的任何音高?在NAudio中,频率都是440hz的倍数。在XNA中,音高间隔(-1 1)被划分为17个声音,因此应该有正常声音、8个上半音和8个下半音,填充上下八度。看起来XNA SoundEffect不是一个好选择,即使是原型,因为播放方法似乎非常沉重,而且应该一起播放的声音之间实际上有一个延迟。我将把所有信息应用到NAudio流或DynamicSoundEffect实例,感谢您提供的各种提示和信息。