更新:基本的なアイデアは依然として保持されているものの、フェードアウトを適用するソリューションには同意するので、答えを残しておきます。でも倍音を加えることなく、これは純粋な正弦波を行いますADSR包絡線を、適用に向けた最初のステップは、より多くの面白さもクリックの問題を解決するだけでなく..
問題ビープ音でありますクラス。ゼロクロス、すなわち完全な正弦波で終わるように気を付けることはありません。
これを修正する最も自然な方法は、作成するサンプルの数を制御することです。
この計算のわからない:
double xx = 2 * Math.PI/Frequency;
Samples = (int)((int)(Samples * xx)/xx);
または彼らが作成された後は、データを切り捨てることができます。 4.
の倍数で開始(またはむしろ終了)最後の連続した4ゼロ、すなわち、これは、ストリームの最後のゼロ交差を見つけ
..
MS.Seek(0, SeekOrigin.Begin);
byte[] bytes = MS.ToArray();
Array.Reverse(bytes);
int z = 0;
for (int i = 0; i < bytes.Length; i+=4)
{
int v = bytes[i] + bytes[i+1] + bytes[i+2] + bytes[i+3];
if (v == 0) { z = i; break; }
}
MS.SetLength(bytes.Length - z);
..
:
あなたはこれではなく、粗方法を試すことができます
私は、これはあまりハックになりますが、それは初心者のために働く必要があります修正することを確認他の方法だ。..
出典
2017-07-25 21:06:42
TaW
いい話です。あなたの質問は何ですか?;) –
明快に編集されました@TotumusMaximus – epicbob57
このクラスを使用すると、フェードアウト振幅を追加できますか?振幅は最後の50ミリ秒にわたって徐々にゼロになりますか?最後の50分間に10ミリ秒ごとに振幅の20%を取るとしますか? – AgapwIesu