2011-06-18 4 views
3

私はtonematrixと同じようなアプリケーションをC#で開発しようとしています。私は最初に.netとNAudioライブラリを試しましたが、今はXNAで試していますが、私が得ることができるのは不協和音です。 オーディオプログラミングとハーモニーの生成


NAudio で、私は(* 1 440Hzの)への変化、differente周波数の8つの簡単な正弦波を生成しています(440Hzの* 8)。

XNAで、同じオーディオファイル(ピアノのD4音符のような)の複数のSoundEffectInstanceを使用しています。それぞれ、異なるPitch値を使用しています。ピッチ値は最大で1オクターブ上または下になることがあります。

どちらの場合でも、音が重なると音楽の代わりにノイズが発生します。たぶん私はそれがすべて間違っているとそれはピッチ/周波数の変化の音をミックスの質問ではありません。

音が非常に豊かで、一緒に混合されたときには常に高調波が生成されるため、tonematrixは「シンプルな正弦波シンセサイザ」を使用しているとは信じがたく、単純な正弦波が常に鳴っています醜い人工物です。

ハーモニーを作成するのに悪い方法がありますか? tonematrixが使用している正弦波に正確に何が起こっているのか考えていますか?

+0

ピッチを12半音以外に設定していますか? –

+0

** NAudio **の周波数はすべて440hzの倍数です。 ** XNA **では、ピッチ間隔(-1 1)が17の音に分かれているので、上下のオクターブを満たしている8つの上半音と8つの下半分の音があります。 – vainheim

答えて

2

私はあなたの音楽の質問に答えることができるようになりましたが、これらの種類の質問は恐らくhttps://music.stackexchange.com/でよく聞かれます。

まずはスケール。これらのものは一般的にpentatonic scalesを使用しています(Wikipediaから:「このようなスケールのピッチは、どんな順序でも組み合わせても衝突なしに再生できます)。コメントによると、あなたがリンクした例では、AからAへのD Major Pentatonicが使用されます。

まっすぐな正弦波は使用されていませんが、実際にはADSR envelopeを使用して、 "と"(エコー) "が最後に表示されます。振幅を調整するだけでよいので、実装が簡単です。

私が知る限り、波形を一緒に混合するときは特別なことはしません。簡単な追加をしている可能性があります。

実装に関しては、サンプルをピッチシフトするのではなく、正弦波を生成する方法がある場合、DynamicSoundEffectInstanceを使用してサイン波を供給してみませんか?

XNAの組み込みピッチシフトは、この作業にはあまり適していません。あなたはそれを調整するために正しい値を使用していますか?

+1

XNA SoundEffectは、Playメソッドが非常に重く見え、一緒に再生を開始するはずのサウンドが実際には遅れているため、プロトタイプでさえも良い選択ではないようです。すべての情報をNAudioストリームまたはDynamicSoundEffectInstanceに適用します。さまざまなヒントと情報をありがとうございます。 – vainheim

1

入力と同じ周波数の倍数を使用している場合、各正弦波は他の正弦波より正確に1オクターブ上になります。このような8つの正弦波を一緒に加えると、混合波形には非常に高いピークが生じるため、歪みが生じないように全体の音量を制限または減少させる必要があります。あなたのコードを見ることなく、確かに言うのは難しいですが、それはあなたの騒音の原因の一部かもしれません。