1

私はランダムなメロディーを生成するための小さなプログラムで働いています。これまでのところ、周波数のある音符の配列がありますが、プログラムは配列からランダムな要素を選び、その周波数を再生します。問題は、メロディーが「悪い音」であるということです。まるでピアノの前に座ってランダムなキーを弾いたかのようです。周波数やタイミングなどを使ってメロディーを生成するアルゴリズムが必要です。手の込んだものは必要ありません。いい音のメロディーを作ってください。

4

6 に答える 6

4

既存の音楽(MIDI?)を使用して、マルコフモデルまたはマルコフ連鎖をトレーニングし ます。入力を同じキー(ハ長調、イ短調など)に移調したい場合があります。ピッチ*持続時間は、おそらく単一の次元(x * 7 * 5、またはx * 12 * 5)にエンコード(列挙)する必要があります。[x:=入力範囲内のオクターブ数、5 =持続時間、1から1/16まで]ループとバリエーションの追加ボーナスですが、それははるかに困難になります...

于 2012-09-23T18:38:51.293 に答える
3

音楽を「風通しの良い」ものにし、不協和音を出さないようにする場合は、ペンタトニックスケールを使用します(つまり、ピアノの黒い鍵盤を弾くように)

例:ピッチの選択:

C#,D#,F#,G# or A#

ピッチ範囲:3〜5オクターブ(オクターブの上下は基本的に基本周波数の周波数を2倍または半分にするため)

注期間:

16thからの範囲Whole Note

于 2012-09-23T18:31:39.540 に答える
1

他の人はこれを試しました。リチャード・マクダフの「音楽とフラクタル地形」の記事をお読みください。

于 2012-09-23T22:46:54.957 に答える
0

同じ音階の音階で演奏してみてください:)ハ長調、ニ短調など;)またはペンタトニックですら。

于 2012-09-23T18:31:31.280 に答える
0

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(); }
     }
}

于 2018-01-19T18:13:09.097 に答える
-1

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

于 2018-01-19T17:33:50.367 に答える