私はランダムなメロディーを生成するための小さなプログラムで働いています。これまでのところ、周波数のある音符の配列がありますが、プログラムは配列からランダムな要素を選び、その周波数を再生します。問題は、メロディーが「悪い音」であるということです。まるでピアノの前に座ってランダムなキーを弾いたかのようです。周波数やタイミングなどを使ってメロディーを生成するアルゴリズムが必要です。手の込んだものは必要ありません。いい音のメロディーを作ってください。
6 に答える
既存の音楽(MIDI?)を使用して、マルコフモデルまたはマルコフ連鎖をトレーニングし ます。入力を同じキー(ハ長調、イ短調など)に移調したい場合があります。ピッチ*持続時間は、おそらく単一の次元(x * 7 * 5、またはx * 12 * 5)にエンコード(列挙)する必要があります。[x:=入力範囲内のオクターブ数、5 =持続時間、1から1/16まで]ループとバリエーションの追加ボーナスですが、それははるかに困難になります...
音楽を「風通しの良い」ものにし、不協和音を出さないようにする場合は、ペンタトニックスケールを使用します(つまり、ピアノの黒い鍵盤を弾くように)
例:ピッチの選択:
C#,D#,F#,G# or A#
ピッチ範囲:3〜5オクターブ(オクターブの上下は基本的に基本周波数の周波数を2倍または半分にするため)
注期間:
16th
からの範囲Whole Note
他の人はこれを試しました。リチャード・マクダフの「音楽とフラクタル地形」の記事をお読みください。
同じ音階の音階で演奏してみてください:)ハ長調、ニ短調など;)またはペンタトニックですら。
java.ioをインポートします。;
javax.sound.sampledをインポートします。;
class Me {
public static void main(String [] args){
int fij = 128; int tw = 64; int fd = 2048;
int secs = 128; 文字列fo="Me.wav"; int ho = 8;
if(args.length == 5){fij = 4 * Integer.parseInt(args [0]);
tw = 4 * Integer.parseInt(args [1]); fd = 4 * Integer.parseInt(args [2]);
ho = 4 + Integer.parseInt(args [3]); fo = args [4];
}
double [] pcm_datadrd = new double [44100 * secs];
double [] pcm_datadr = new double [44100];
for(int i = 0; i <pcm_datadr.length; i ++){
pcm_datadr [i] =(64 * Math.sin((i / 1837.5 *(i * i / 128))* Math.PI * 2)/( 1+(Math.cos((4096)+64))+(i / 256)));
}
for(int x = 0; x <(secs-1); x ++){
for(int i = 0; i <pcm_datadr.length; i ++){
pcm_datadrd [((int)(44100 * x)+ i)] =(double)
(128 * Math.sin((i / 1837.5 *(i * i / 256))* Math.PI * 2)/(1+(Math.cos((4096)+64))+(( double)i / 256)));
}
}
byte [] pcm_data = new byte [44100 * secs];
for(int i = 0; i <pcm_data.length; i ++){
double fup = 1 +(fij * i / pcm_data.length);
pcm_data [i] =(byte)(pcm_datadrd [i] +(64 * Math.sin((i / tw fup Math.cos(3+(i / fd))))+
32 * Math.sin(5+( i / ho * fd)* Math.cos(i /(fd + tw)))));
}
AudioFormat frmt = new AudioFormat(44100、8、1、true、true);
AudioInputStream ais = new AudioInputStream(
new ByteArrayInputStream(pcm_data)、frmt、pcm_data.length / frmt.getFrameSize()
);
{
AudioSystem.write(ais、AudioFileFormat.Type.WAVE、new File(fo));を試してください。
} catch(Exception e){e.printStackTrace(); }
}
}
ABBA'k vind't voor de kleintjes zielig die me laten MMA je、je vergeetk wat en huilt ook weet ik tranen
ランダムノートのブロックAとランダムノートBをランダムに作成し、(ABBA)+または(AB)AB *を実行するのではなく、量子論の概念を適用することをお勧めします(ここで見られるハウスルールが適用されるように、自然界のすべてが相互作用しますあなたが今理解しているように、世界のすべての家で)。
セルオートマトンのように、「ライフゲーム」では、ステップごとに「真の」ノートを再生し、「y軸」にノート番号と(カウントしてください)ノートの長さ(真に隣接する'x軸')
ランダム性のためのこのサウンドの例: 生成 されたソースからの http://simple.ogena.net/Steel_Drum-Slap_Bas.mp3:http://simple.ogena.net/Steel_Drum-Slap_Bas.mid