「サクラ」質問掲示板

サクラの質問掲示板です。
[一覧へ] > (@91) [低] [未処理]
@91■ (#301) 配列(array)について - フォルミナ (2014-08-15 17:07) /低 解決
【症状】どのような症状、現象か?

Functionの引数を ヘッダファイルの中で宣言している配列型の変数を入力してその中からランダムに音を鳴らしたいのですが再生するとどうしても低い音になってしまいます。

【再現方法】サンプルソース、再現手順など

FUNCTION Randomusic(Loop,Note,AL, R, C){   
//_宣言値
Int Loop=1000//繰り返し回数
ARRAY N1 = (1, 3, 5, 6, 8, 10, 12) //音階1
ARRAY N2 = (13,  15,  17,  18, 20,  22,  24) //音階2
ARRAY N3 = (25,  27,  29,  30,  32,  34,  36) //音階3
ARRAY N4 = (37,  39,  41,  42,  44,  46,  48) //音階4
ARRAY N5 = (49,  51,  53,  54,  56,  58,  60) //音階5
ARRAY N6 = (61,  63,  65,  66,  68,  70,  72) //音階6
ARRAY N7 = (73,  75,  77,  78,  80,  82,  84) //音階7
ARRAY N8 = (85,  87,  89,  90,  92,  94,  96) //音階8
ARRAY N9 = (97,  99,  101, 102, 104, 106, 108) //音階9
ARRAY N10 = (109, 111, 113, 114, 116,118, 120) //音階10
ARRAY N11 = (121, 123, 125, 126, 128, 130, 132) //音階11
Int AL = 4; //連続音乱回数発音確率
Int R = 5;  //休符発音確率
Int C = 2;   //和音発音確率
Int CR = 20; //和音乱音
//_プログラム
[(Loop) //音楽開始
Int Note = RandomSelect(N6,N7)//音符
Int SoundLength =RandomSelect(1,2,4,8,16,32)//音長
Int ContinuousSound = Random(AL)//連続音乱回数発音確率
Int Rest = Random(R)//休符発音確率
Int Chord = Random(C)//和音発音確率
Int ChordRandom = Random(CR)//3和音発音確率
[(ContinuousSound) 

IF(Rest=1){//休符
IF(SoundLength=1){SoundLength=0} 
IF(SoundLength=2){SoundLength=0} r(SoundLength)}
l(SoundLength) n(Note) //音長・音
IF(Chord=1){r-(SoundLength) n(Note+ChordRandom)} 
IF(ChordRandom>15){ChordRandom = Random(CR) r-(SoundLength) n(Note+ChordRandom)}]
]
}

【要望】どのような解決が望ましいか?

Randomusic()←引数 Noteの部分に N1~N11の中のどれかの配列をいれたい

【バージョン】確認したバージョン
Editor ver2.375
DLL     Ver2.374
【その他】

再生すると非常に不愉快ですw

(#303) 自己解決 - フォルミナ (2014-08-15 17:08) /低 未処理
FUNCTIONの中で宣言されたままではだめっぽかったですw

(#304) すこしだけ、直してみました - 通りがかり (2014-08-15 18:24) /低 確認待ち
Include(gs.h)  ResetGS()r4  CH=10  GS_RHYTHM(1)r8
SysEx$ = F0,41,10,42,12,{40,00,00,00,04,00,00},F7;r48


FUNCTION Randomusic(Int Loop, Int AL, Int R, Int C, Array NotePi){

//_宣言値

// Int Loop=1000 //繰り返し回数
// Int AL = 4; //連続音乱回数発音確率
// Int R = 5;  //休符発音確率
// Int C = 2;   //和音発音確率

 Int CR = 20; //和音乱音

 Int Note;    //音符
 Int SoundLength;  //音長
 Int ContinuousSound;  //連続音乱回数発音確率
 Int Rest;    //休符発音確率
 Int Chord;    //和音発音確率
 Int ChordRandom;  //3和音発音確率

//_プログラム

 [(Loop) //音楽開始

  Note = RandomSelect(NotePi)
  SoundLength =RandomSelect(1,2,4,8,16,32)
  ContinuousSound = Random(AL)
  Rest = Random(R)
  Chord = Random(C)
  ChordRandom = Random(CR)

  [(ContinuousSound)

   IF(Rest=1){            //休符
   IF(SoundLength=1){ SoundLength=0 }
   IF(SoundLength=2){ SoundLength=0 } r(SoundLength) }
   l(SoundLength) n(Note)        //音長・音
   IF(Chord=1){r-(SoundLength) n(Note+ChordRandom) }
   IF(ChordRandom>15){ ChordRandom = Random(CR) r-(SoundLength) n(Note+ChordRandom) }
  ]
 ]
}

 ARRAY N1 = (1, 3, 5, 6, 8, 10, 12 )       //音階1
 ARRAY N2 = (13,  15,  17,  18,  20,  22,  24 )   //音階2
 ARRAY N3 = (25,  27,  29,  30,  32,  34,  36 )   //音階3
 ARRAY N4 = (37,  39,  41,  42,  44,  46,  48 )   //音階4
 ARRAY N5 = (49,  51,  53,  54,  56,  58,  60 )   //音階5
 ARRAY N6 = (61,  63,  65,  66,  68,  70,  72 )   //音階6
 ARRAY N7 = (73,  75,  77,  78,  80,  82,  84 )   //音階7
 ARRAY N8 = (85,  87,  89,  90,  92,  94,  96 )   //音階8
 ARRAY N9 = (97,  99,  101, 102, 104, 106, 108 )   //音階9
 ARRAY N10 =(109, 111, 113, 114, 116, 118, 120 )   //音階10
 ARRAY N11 =(121, 123, 125, 126, 128, 130, 132 )   //音階11

 Array NotePi = (N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11);

TimeBase=96 Tempo=211 Time=(!1) TrackSync

TR=1 @14,0,0
Randomusic(100, 4, 5, 2, NotePi) //  ループ, 連続音, 休符, 和音, 必要なノート
TR=2 @12,0,0
Randomusic(100, 4, 5, 2, NotePi)


(#306) 改善ありです - フォルミナ (2014-08-24 21:53) /低 未処理
おお、ありがとうございます。
暇があるときに使ってみます。
(稀にしかやらないw)

(#301)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を平仮名で記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能