私が音について知っている少しの理論-音は:
波、振動、減衰振動、波は物理学の観点から記述することができ、波は数学の観点から記述することができます。
プログラムをダウンロードしてテストする
コンピューターでモデリングしているため、ウェーブ(-128から127までの数字とゼロ)のシーケンス(フーリエ級数)、つまりバイトの配列を使用してウェーブが記述されます。
振動方程式は、SIN関数によって最もよく説明されます。
同意します。配列にSIN関数を実行しただけでは簡単すぎます。
そのため、ヤマハシンセサイザーデバイスの説明に関する記事を参考に、次のアルゴリズムを作成しました。
1. SIN関数を使用して、メインウェーブまたはモデリングウェーブが作成されます。他の開発者に役立つ可能性のある式は次のとおりです。
for(int k = 0; k < SoundLabVisual.player.data.length;k++){ double sinusoid = amplitude1 * Math.sin(2 * (3.14/1 ) * k * frequency1 + faza); }
どこで:
振幅1-振幅
frequency1-発振周波数
faza-振動の初期段階
2. 2番目のSIN関数を使用して、振幅が最初の波の値であるメイン波が作成されます。
プログラムのスクリーンショット
テストサウンドをlmmsプログラムにロードしました。
mp3を聴くチャネルを介して機能する別のアルゴリズムが実装されます。可能であれば、2番目の記事でそれについて説明します。
更新:
コメンテーターのコメントによると、アルゴリズムはそれ自体で、またアルゴリズム間で乗算できるようになりました。
if(jCheckBox8.isSelected()){ sinusoid = (a1 + (sinusoid * Math.sin( (c1 * (double)k) * frequency2Double + d1 ))) * (a1 + (sinusoid * Math.sin( (c1 * (double)k) * frequency2Double + d1 ))); }else{ sinusoid = a1 + (sinusoid * Math.sin( (c1 * (double)k) * frequency2Double + d1 )); }
更新2:プログラムが更新され、ウェーブをサウンドとミックスできるようになりました。