サクラトップ > 掲示板トップ > 投稿フォーム
曲の投稿にはユーザー登録が必要です。 曲 名 作 者 名前: パスワード: 転 載 許可しない 全て許可 メール連絡すれば可 許可しない (ゲームのBGMなど使いたい場合、許可するかどうかを指定。 サクラ本体への収録はあらかじめご承諾ください。) ゲーム制作サイト「Rmake」への転載(およびMP3変換)を許可する ジャンル ポップス ポップス ハードロック・ヘヴィーメタル ヒップホップ クラシック 歌謡曲・演歌 J-POP ロック ブルース・カントリー ダンス・エレクトロニカ ワールド アニメ・ゲーム 日本の伝統音楽・芸能 オルタナティヴロック ソウル・R&B ジャズ・フュージョン ヒーリング・ニューエイジ キッズ・ファミリー 音 源 (パソコン内蔵音源、GS音源、GM音源など) 公開 公開する 削除する (公開を中止して削除するときには、この項目を変更します。) コメント またしてもアルゴリズム作曲の練習用に、曲らしからぬものを作りました。曲より関数メインです。アルペジエーターを作りました。かなり汚いので、良い案があれば教えてください! 曲データ(サクラから貼り付けます。) /* Arpeggiator *** 使いたい人がいたら、勝手に持って行ってくれてOKです。 またしても、まともな曲ではありません。 サクラでのアルゴリズム作曲練習用。 アルペジエーターを作ってみました。 ただし、使い勝手はしらない! 和音を分解するのをどうやれば良いか思いつかなかったので Arrayで無理やり和音を指定しています。 しかもArrayの仕様がよくわからず、汚い感じに。。。""で囲むでいいのかな? その代わり、^とかrとかも入れられる。 多分、もっとスマートにできるはず・・・ 説明がかなり適当だから、何かわからないことあればコメントください^^; サンプル曲は適当です。 いちおう、ドラム意外は全部アルペジエーター! ****************************************************** 使い方 ****************************************************** * 使用するには、基礎的なmmlの知識を必要とします。(使い方を読むのに) ラシドレミファソ = abcdefg くらいわかれば他はカバーしているはず。 @--------------------------------- このソース内の //ここから 〜 //ここまで の間をコピーして、アルペジエーターを使いたいサクラソース内の、 上のほう(使いたい箇所より前)に貼り付けます。 A--------------------------------- 使いたい和音パターンを使う箇所より上でに書きます (一応、直で関数にぶち込めるけど、宣言したほうがいいと思う) 例 Array Sample = ("c","e","g","b"); ""で囲ってカンマで区切りましょう。 オクターブ下とかの場合、"を使うと変になるから、<>等で区切ってね。 Arrayの意味がわからない人はとりあえず上の例をコピってね。 B--------------------------------- アルペジエーターを使います。 使いたい場所で、 Arpeggiator(A,B,C,D,E,F) という感じのものをぶちこみましょう。 ただし、A~Fは以下の決まりに従っていれます。 A: アルペジオのタイプ ARP_UPかARP_DOWNかARP_RANDOMというのを入れます。 * ARP_UP...Arrayで指定した音を左から順に演奏する ARP_DOWN...Arrayで指定した音を右から順に演奏する ARP_RANDOM...Arrayで指定した音をランダムに演奏する B:繰り返し回数 繰り返し回数を指定します。アルペジオの繰り返し回数ではなく、音を何回発音するか。 例えば、("a","b",">c<")という宣言のARP_UPで、繰り返し回数が5の場合、 ab>cceg< ceg >ceg< ceg ... オクターブ幅3の場合 ceg >ceg > ceg << ceg >ceg > ceg << ceg... という感じ。 ARP_RANDOMでオクターブ幅2の場合、 , , , c, e, g, >c<, >e<, >g< の中からランダムで選ばれる。 * オクターブ変化なし=1なので注意。 F: 和音 AのArrayで指定した奴をぶち込みましょう。 Array Sample = (ほにゃらら) だったら、Sampleを、 Array ArpeggioDazeeeeeeee = (ほにゃらら) だったら、ArpeggioDazeeeeeeeeをぶちこみます。 C--------------------------------- ABの例 Array SampleDayo = ("c","e","g","b"); Arpeggiator(ARP_UP,32,16,5,2,SampleDayo); */ //ここから /*------------------------------------------- 定数定義 ---------------------------------------------*/ Int ARP_UP = 0; Int ARP_DOWN = 1; Int ARP_RANDOM = 2; Int DVS = 0; Int RES = 1; /* 割り算の余りを算出する関数 @param Int Child 分子 @param Int Mother 分母 @return Int 割り算の余り */ Function GetDivision(Int Type, Int Child,Int Mother) { Int Pointer = 0; Int Div; Int Res; While( Mother * Pointer <= Child ) { Pointer = Pointer + 1; } Div = Pointer - 1; Res = Child - (Div * Mother); Switch(Type){ Case(DVS){Result = Div;} Case(RES){Result = Res;} } } /* Arrayの要素数を取得する関数 @param Array Ara 用素数を測るArray @return Int Arrayの要素数 */ Function GetArraySize(Array Ara) { Int Pointer = 0; Ara = (Ara, BAMPEI); While(Ara(Pointer) != BAMPEI) { Pointer = Pointer + 1; } Result = Pointer; } /* アルペジオを表現する関数 @param Int ArpeggioType 和音の分解タイプ @param Int Count 繰り返し回数 @param Int Length 長さ @param Int Octave 基準となるオクターブ @param Int Level アルペジエーターのレベル @param Array Code 元となる和音 */ Function Arpeggiator (Int ArpeggioType, Int Count, Int Length, Int Octave,Int Level, Array Code) { Str Note; l(Length); o(Octave); Int Elements = GetArraySize(Code); Int Roop = GetDivision(DVS,Count,Elements); Int Rest = GetDivision(RES,Count,Elements); Int I; Int O = Octave; //現在のArray中の位置 Int Pointer; Switch (ArpeggioType) { Case(ARP_UP){ For(I = 0; I < Roop; I = I + 1){ If(GetDivision(RES,I,Level)==0){ O = Octave; o(O); }Else{ O = O + 1; o(O); } For(Pointer = 0; Pointer < Elements; Pointer = Pointer + 1){ Note = Code(Pointer); Note; } } If(GetDivision(RES,I,Level)==0){ O = Octave; o(O); }Else{ O = O + 1; o(O); } For(Pointer = 0; Pointer < Rest; Pointer = Pointer + 1){ Note = Code(Pointer); Note; } } Case(ARP_DOWN){ For(I = 0; I < Roop; I = I + 1){ If(GetDivision(RES,I,Level)==0){ O = Octave; o(O); }Else{ O = O - 1; o(O); } For(Pointer = 0; Pointer < Elements; Pointer = Pointer + 1){ Note = Code(Elements - Pointer); Note; } } If(GetDivision(RES,I,Level)==0){ O = Octave; o(O); }Else{ O = O - 1; o(O); } For(Pointer = 0; Pointer < Rest; Pointer = Pointer + 1){ Note = Code(Elements - Pointer); Note; } } Case(ARP_RANDOM){ For(I = 0; I < Count; I = I + 1){ O = Octave + Random(-Level+1,Level); o(O); Note = Code(Random(Elements)); Note; } } Default{ Print("Error") } } } //ここまで Include(delay.h) Array Sample = ("","e","b"); Array CodeSample = ("","","c","e"); Tempo=157 TR=5 @88 BR=12 o5v90q99 EP(100) Arpeggiator(ARP_UP,32,16,1,8,CodeSample); q30 Arpeggiator(ARP_RANDOM,32,16,4,3,CodeSample); q50 EP.T(100,100,!1+1,100,80,!1,80,30,!1) Arpeggiator(ARP_DOWN,64,16,4,1,CodeSample); TR=6 @82 Str Alp = {Arpeggiator(ARP_RANDOM,100,16,4,2,Sample);} Time(6:4:0) v90q70 EP.T(40,110,!1+1)MidiDelay(Alp,003,!8.,0); TR=10 $x{n(36),}$g{n(42),}$h{n(46),}$n{n(44),}$k{n(49),}$m{n(57),}$j{n(40),}$i{n(38),}$s{n(39),} $a{n(41),}$b{n(43),} Rhythm{ (Time(9:1:0))l4 [4 xxxx] (Time(9:1:0))l16[4 ggh^ggh^ggh^ggh^] } この曲は自作のオリジナル曲であるか、または、作曲者の死後50年以上経過した著作権に問題がない曲であることを確認しましたか? いいえ。よく分かりません はい。著作権に問題ありません (←選択)