音の変調

私が音について知っている少しの理論-音は:
波、振動、減衰振動、波は物理学の観点から記述することができ、波は数学の観点から記述することができます。

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


コンピューターでモデリングしているため、ウェーブ(-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:プログラムが更新され、ウェーブをサウンドとミックスできるようになりました。

Source: https://habr.com/ru/post/J431488/


All Articles