音の変調

私が音について知っている少しの理論-音は:

波、振動、減衰振動、波は物理学の観点から記述することができ、波は数学の観点から記述することができます。



プログラムをダウンロードしてテストする





コンピューターでモデリングしているため、ウェーブ(-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関数を使用して、振幅が最初の波の値であるメイン波が作成されます。



 //c   double a1 = 0.1f; //c   double c1 = 0.1f; //c   double d1 = 0.1f; sinusoid = a1 + (sinusoid * Math.sin( (c1 * (double)k) * frequency2Double + d1 ));
      
      







プログラムのスクリーンショット



画像



テストサウンドを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:プログラムが更新され、ウェーブをサウンドとミックスできるようになりました。



All Articles