サクラトップ > 掲示板トップ > 投稿フォーム
曲の投稿にはユーザー登録が必要です。 曲 名 作 者 名前: パスワード: 転 載 全て許可 全て許可 メール連絡すれば可 許可しない (ゲームのBGMなど使いたい場合、許可するかどうかを指定。 サクラ本体への収録はあらかじめご承諾ください。) ゲーム制作サイト「Rmake」への転載(およびMP3変換)を許可する ジャンル ロック ポップス ハードロック・ヘヴィーメタル ヒップホップ クラシック 歌謡曲・演歌 J-POP ロック ブルース・カントリー ダンス・エレクトロニカ ワールド アニメ・ゲーム 日本の伝統音楽・芸能 オルタナティヴロック ソウル・R&B ジャズ・フュージョン ヒーリング・ニューエイジ キッズ・ファミリー 音 源 (パソコン内蔵音源、GS音源、GM音源など) 公開 公開する 削除する (公開を中止して削除するときには、この項目を変更します。) コメント 関数作りすぎていつの間にやらMMLですらなくなっている不思議。 曲データ(サクラから貼り付けます。) /** * 楽曲情報を定義した関数。 * 関数を定義化していないので楽曲情報をコード上部に記載するための記法。 */ Function Main() { TR=00; Copyright={"卯津田 篠岡"}; TrackName={"ギター, リズムボックス関数テスト"}; TimeBase = 96; KeyFlag+(); Tempo(176); SetTimeSignature(4, 4); /* 8分音符で分割されたリズムボックスを作成する */ CreateRithmBox(StandardSet, ConvertTimeStep(8)); [ [7 WriteRithmWithoutShift(OpenHiHat, {□□□■□□□■}, 000, 000, 000, 127, 000, 000, 000, 127); WriteRithmWithoutShift(ClosedHiHat, {■■■□■■■□}, 100, 090, 110, 000, 100, 090, 110, 000); WriteRithmWithoutShift(Snare1, {□□■□□□■□}, 000, 000, 100, 000, 000, 000, 110, 000); WriteRithmWithoutShift(Kick1, {■□□□■□□□}, 100, 000, 000, 000, 100, 000, 000, 000); RithmTimeShift(); ] WriteRithmWithoutShift(OpenHiHat, {□□□■□□■■}, 000, 000, 000, 127, 000, 000, 127, 127); WriteRithmWithoutShift(ClosedHiHat, {■■■□■■□□}, 100, 090, 110, 000, 100, 090, 110, 000); WriteRithmWithoutShift(Snare1, {□□■□□□■■}, 000, 000, 100, 000, 000, 000, 110, 000); WriteRithmWithoutShift(Kick1, {■□□□■■□□}, 100, 000, 000, 000, 100, 000, 000, 000); RithmTimeShift(); ] [3 WriteRithmWithoutShift(OpenHiHat, {□□□■□□□■}, 000, 000, 000, 127, 000, 000, 000, 127); WriteRithmWithoutShift(ClosedHiHat, {■■■□■■■□}, 100, 090, 110, 000, 100, 090, 110, 000); WriteRithmWithoutShift(Snare1, {□□■□□□■□}, 000, 000, 100, 000, 000, 000, 110, 000); WriteRithmWithoutShift(Kick1, {■□□□■□□□}, 100, 000, 000, 000, 100, 000, 000, 000); RithmTimeShift(); ] WriteRithmWithoutShift(OpenHiHat, {□□□■□□■■}, 000, 000, 000, 127, 000, 000, 127, 127); WriteRithmWithoutShift(ClosedHiHat, {■■■□■■□□}, 100, 090, 110, 000, 100, 090, 110, 000); WriteRithmWithoutShift(Snare1, {□□■□□□■■}, 000, 000, 100, 000, 000, 000, 110, 000); WriteRithmWithoutShift(Kick1, {■□□□■■□□}, 100, 000, 000, 000, 100, 000, 000, 000); RithmTimeShift(); [ [3 WriteRithmWithoutShift(OpenHiHat, {□□□■□□□■}, 000, 000, 000, 127, 000, 000, 000, 127); WriteRithmWithoutShift(ClosedHiHat, {■■■□■■■□}, 100, 090, 110, 000, 100, 090, 110, 000); WriteRithmWithoutShift(Snare1, {□□■□□□■□}, 000, 000, 100, 000, 000, 000, 110, 000); WriteRithmWithoutShift(Kick1, {■□□□■□□□}, 100, 000, 000, 000, 100, 000, 000, 000); RithmTimeShift(); ] WriteRithmWithoutShift(OpenHiHat, {□□□■□□■■}, 000, 000, 000, 127, 000, 000, 127, 127); WriteRithmWithoutShift(ClosedHiHat, {■■■□■■□□}, 100, 090, 110, 000, 100, 090, 110, 000); WriteRithmWithoutShift(Snare1, {□□■□□□■■}, 000, 000, 100, 000, 000, 000, 110, 000); WriteRithmWithoutShift(Kick1, {■□□□■■□□}, 100, 000, 000, 000, 100, 000, 000, 000); RithmTimeShift(); ] /* TRACK 2:GUITAR[I] *************************************************** */ /* ギターをトラック2, チャンネル2でディストーションギターで作成 */ CreateGuitar(2, 2, DistortionGuitar); P(47); CHO(20); REV(80); /* ギターのディレイを設定 */ SetGuitarDelay(TRUE, ConvertTimeStep(8), 3, 20); [4r1] [4 /* 3弦 5フレットを押さえる */ GuitarPutFingar(3, 5); /* 3弦を8分音符で強さ90で引く */ GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPutFingar(3, 3); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPutFingar(3, 0); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); ] [4 GuitarPutFingar(4, 5); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 70); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPutFingar(4, 3); /* 4弦の3フレットを押さえて110の強さで引き、0だけ待った後、5フレットまで16分音符分の時間でスライドして8分音符+16分音符分の長さまでそのまま */ GuitarSlide(4, 110, 3, 0, ConvertTimeStep(16), 5, ConvertTimeStep(8) + ConvertTimeStep(16)); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 70); GuitarPutFingar(3, 3); GuitarPicking(3, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPutFingar(3, 5); GuitarPicking(3, ConvertTimeStep(8), 80); GuitarPutFingar(4, 0); GuitarPicking(4, ConvertTimeStep(8), 90); ] [ GuitarPutFingar(3, 5); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); r8 GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); r8 GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); r8 GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); r8 GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); r4 GuitarPutFingar(3, 5); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); r8 GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); r8 GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); r8 GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); r8 GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPutFingar(3, 7); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPutFingar(3, 9); GuitarSlide(3, 80, 9, ConvertTimeStep(32), ConvertTimeStep(16), 5, ConvertTimeStep(32)); ] /* TRACK 2:GUITAR[I] *************************************************** */ CreateGuitar(3, 3, OverdrivenGuitar); P(89); CHO(110); REV(110); SetGuitarDelay(TRUE, ConvertTimeStep(8), 2, 10); [10 GuitarPutFingar(4, 5); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 70); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPutFingar(4, 3); GuitarSlide(4, 110, 3, 0, ConvertTimeStep(16), 5, ConvertTimeStep(8) + ConvertTimeStep(16)); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 70); GuitarPutFingar(3, 3); GuitarPicking(3, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPutFingar(3, 5); GuitarPicking(3, ConvertTimeStep(8), 80); GuitarPutFingar(4, 0); GuitarPicking(4, ConvertTimeStep(8), 90); ] [ GuitarPutFingar(3, 5); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPutFingar(3, 7); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPutFingar(3, 9); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPutFingar(3,11); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPutFingar(3,13); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); : GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); ] GuitarPutFingar(3,15); GuitarPicking(3, ConvertTimeStep(8), 90); GuitarPicking(3, ConvertTimeStep(8), 90); [ GuitarPutFingar(4, 5); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 70); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPutFingar(4, 3); GuitarSlide(4, 110, 3, 0, ConvertTimeStep(16), 5, ConvertTimeStep(8) + ConvertTimeStep(16)); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 70); GuitarPutFingar(3, 3); GuitarPicking(3, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPutFingar(3, 5); GuitarPicking(3, ConvertTimeStep(8), 80); : GuitarPutFingar(4, 0); GuitarPicking(4, ConvertTimeStep(8), 90); ] GuitarPutFingar(4, 0); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 60); /* TRACK 2:GUITAR[I] *************************************************** */ CreateBase(4, 4, SlapBass1); SetGuitarDelay(TRUE, ConvertTimeStep(8), 3, 20); [10 GuitarPutFingar(4, 5); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 70); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPutFingar(4, 3); GuitarSlide(4, 110, 3, 0, ConvertTimeStep(8), 5, ConvertTimeStep(8)); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 70); GuitarPutFingar(3, 3); GuitarPicking(3, ConvertTimeStep(8), 70); GuitarPicking(4, ConvertTimeStep(8), 70); GuitarPutFingar(3, 5); GuitarPicking(3, ConvertTimeStep(8), 70); GuitarPutFingar(4, 0); GuitarPicking(4, ConvertTimeStep(8), 90); ] [ GuitarPutFingar(4, 5); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPutFingar(4, 7); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPutFingar(4, 9); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPutFingar(4,11); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPutFingar(4,14); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); : GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); ] GuitarPutFingar(4,0); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPutFingar(4, 5); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 70); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPutFingar(4, 5); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 70); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPutFingar(4, 3); GuitarSlide(4, 110, 3, 0, ConvertTimeStep(8), 5, ConvertTimeStep(8)); GuitarPicking(4, ConvertTimeStep(8), 80); GuitarPicking(4, ConvertTimeStep(8), 90); GuitarPicking(4, ConvertTimeStep(8), 70); GuitarPutFingar(3, 3); GuitarPicking(3, ConvertTimeStep(8), 70); GuitarPicking(4, ConvertTimeStep(8), 70); GuitarPutFingar(3, 5); GuitarPicking(3, ConvertTimeStep(8), 70); GuitarPutFingar(4, 0); GuitarPicking(4, ConvertTimeStep(8), 90); } /* -------------------------------------------------------------------------- */ // 基礎関数群(システム関連) /* -------------------------------------------------------------------------- */ /** Boolean値が存在しない為、定義:Fale=0なのは存在しない場合の初期値=0の為。 */ Int FALSE = 0; /** Boolean値が存在しない為、定義 */ Int TRUE = 1; /** TimeSignatureを参照できないため別変数として保持する */ Int SYSTEM_TIME_SIGNATURE_COMMON_TIME = 4; /** TimeSignatureを参照できないため別変数として保持する */ Int SYSTEM_TIME_SIGNATURE_TIME = 4; /** スクリプトのメッセージ出力モード:エラー */ Int MODE_ERROR = 3; /** スクリプトのメッセージ出力モード:ワーニング */ Int MODE_WARNING = 2; /** スクリプトのメッセージ出力モード:インフォメーション */ Int MODE_INFO = 1; /** スクリプトのメッセージ出力モード:デバッグ */ Int MODE_DEBUG = 0; /** スクリプトのモード */ Int ScriptMode = MODE_DEBUG; /** * TimeSignatureをScript側が参照できないため * 関数を通して設定する * @V_CommonTime V_CommonTime/V_Time * @V_Time V_CommonTime/V_Time */ Function SetTimeSignature(Int V_CommonTime, Int V_Time) { SYSTEM_TIME_SIGNATURE_COMMON_TIME = V_CommonTime; SYSTEM_TIME_SIGNATURE_TIME = V_Time; TimeSignature = SYSTEM_TIME_SIGNATURE_COMMON_TIME, SYSTEM_TIME_SIGNATURE_TIME; } /** * TimeBaseの値を取得する。 * @Signature 拍数(4分音符なら4) * @ApplyingPointBool 付点有りの場合にTRUE */ Function ConvertTimeStep(Int Signature, Int ApplyingPointBool) { Int Length = ((TimeBase * SYSTEM_TIME_SIGNATURE_COMMON_TIME) / Signature); If (ApplyingPointBool == TRUE) { Length = Length + (((TimeBase * SYSTEM_TIME_SIGNATURE_COMMON_TIME) / Signature) / 2); } Result = Length; } /** * エラーメッセージを出力する * @Message 出力を行うメッセージ */ Function Error(Str Message) { If (ScriptMode <= MODE_INFO) { Print({ERROR:} + Message); } } /** * ワーニングメッセージを出力する * @Message 出力を行うメッセージ */ Function Warning(Str Message) { If (ScriptMode <= MODE_INFO) { Print({WARNING:} + Message); } } /** * インフォメーションメッセージを出力する * @Message 出力を行うメッセージ */ Function Info(Str Message) { If (ScriptMode <= MODE_INFO) { Print({INFO:} + Message); } } /** * デバッグメッセージを出力する * @Message 出力を行うメッセージ */ Function Debug(Str Message) { If (ScriptMode <= MODE_INFO) { Print({DEBUG:} + Message); } } /* -------------------------------------------------------------------------- */ // RithmData関数群 /* -------------------------------------------------------------------------- */ /* * 本来下記のようになれば見やすいのだが、SAKURAが引数の間の改行を誤認識してしまっている。 * [3 * WriteRithm( * CLOSE_HIHAT, "■■■■■■■■", 120,120,120,120,120,120,120,120, * SNARE1, "□□■□□□■□", 120,120,120,120,120,120,120,120, * KICK, "■□□□■■□□", 120,120,120,120,120,120,120,120 * ); * ] * WriteRithm( * CLOSE_HIHAT, "■■■■■■■■", 120,120,120,120,120,120,120,120, * SNARE1, "□□■■□□■■", 120,120,120,120,120,120,120,120, * KICK, "■□□□■■□□", 120,120,120,120,120,120,120,120 * ); * 上記だと引数は開業後の為、渡されない。 * * 注意: * 関数MID の Indexは(1)Origin */ /* リズムボックスで使用するトラック */ Int RithmTrackTrack = 10; /* リズムボックス用タイムシグネィチャー */ Int RithmSignatureTimeBase = 48; /* リズムボックス用タイムシグネィチャー */ Int RithmSignatureCount = 8; /** * リズムボックスを作成する * @DrumSetNumber ドラムセット番号 * @SignatureTimeBase 1小節を分割するStep数 */ Function CreateRithmBox(Int DrumSetNumber, Int SignatureTimeBase) { Int PreTrackNumber = Track; RithmSignatureTimeBase = SignatureTimeBase; RithmSignatureCount = (ConvertTimeStep(SYSTEM_TIME_SIGNATURE_COMMON_TIME) * SYSTEM_TIME_SIGNATURE_TIME) / SignatureTimeBase; Track(10); Channel(10); Voice(DrumSetNumber); Track(PreTrackNumber); } /** * リズムを書き込む * @RithmData リズムデータ(ノート番号, 文字列データ, ベロシティ値....) */ Function WriteRithm(Array RithmData) { WriteRithmWithoutShift(RithmData); RithmTimeShift(); } /** * リズムを書き込む。ただしTimeはずらさない * @RithmData リズムデータ(ノート番号, 文字列データ, ベロシティ値....) */ Function WriteRithmWithoutShift(Array RithmData) { Int PreTrackNumber = Track; Track(10); Int StartTime = Time; Int BlockCount = SizeOf(RithmData) / (1 + 1 + RithmSignatureCount); Int RithmItemNoteNumber = 0; Str RithmItem = {}; For (Int I = 0; I < BlockCount; I++) { Time(StartTime); For (Int J = 0; J < RithmSignatureCount; J++) { Time(StartTime + (RithmSignatureTimeBase * J)); RithmItem = MID(RithmData((I * BlockCount) + 1), J + 1, 1); If (RithmItem == {■}) { NoteOn(RithmData(I * BlockCount), RithmData((I * BlockCount) + 2 + J)); } Time(StartTime + (RithmSignatureTimeBase * (J + 1))); NoteOff(RithmData(I * BlockCount), 0); } } Time(StartTime); Track(PreTrackNumber); } /** * 1小節分時間をずらす */ Function RithmTimeShift() { Int PreTrackNumber = Track; Track(10); Time(Time + (TimeBase * SYSTEM_TIME_SIGNATURE_TIME)); Track(PreTrackNumber); } /* -------------------------------------------------------------------------- */ // Guitar関数群 /* -------------------------------------------------------------------------- */ /** 値:ギター奏法 アップストローク */ Int GUITAR_UP_STROKE = 1; /** 値:ギター奏法 ダウンストローク */ Int GUITAR_DOWN_STROKE = 0; /** 音を出さない値 */ Int GUITAR_SOUND_NONE = -1; /** * ギター情報 ギター(ベース)の数分だけ下記値を繰り返す(最大12弦) * 0:MasterTrackNumber 基礎となるトラック番号 * 1:HoldStatus ホールド設定(TRUE, FALSE) デフォルト:FALSE * 2:DelayStatus ディレイ設定(TRUE, FALSE) デフォルト:FALSE * 3:DelayInfo.DelayStep ディレイで使用する遅延ステップ値 * 4:DelayInfo.DelayMaxCount ディレイで使用する遅延ステップ値 * 5:DelayInfo.DelayVelosity ディレイで使用する遅延ステップ値 * 6:StringthInfo[ 0].OpenNoteNumber 構えたときに一番上に来るストリングスの開放時のノート番号 * 7:StringthInfo[ 0].SelectedFletNumber 構えたときに一番上に来るストリングスの押さえているフレットの値 * 8:StringthInfo[ 1].OpenNoteNumber * 9:StringthInfo[ 1].SelectedFletNumber * 10:StringthInfo[ 2].OpenNoteNumber * 11:StringthInfo[ 2].SelectedFletNumber * 12:StringthInfo[ 3].OpenNoteNumber * 13:StringthInfo[ 3].SelectedFletNumber * 14:StringthInfo[ 4].OpenNoteNumber * 15:StringthInfo[ 4].SelectedFletNumber * 16:StringthInfo[ 5].OpenNoteNumber * 17:StringthInfo[ 5].SelectedFletNumber * 18:StringthInfo[ 6].OpenNoteNumber * 19:StringthInfo[ 6].SelectedFletNumber * 20:StringthInfo[ 7].OpenNoteNumber * 21:StringthInfo[ 7].SelectedFletNumber * 22:StringthInfo[ 8].OpenNoteNumber * 23:StringthInfo[ 8].SelectedFletNumber * 24:StringthInfo[ 9].OpenNoteNumber * 25:StringthInfo[ 9].SelectedFletNumber * 26:StringthInfo[10].OpenNoteNumber * 27:StringthInfo[10].SelectedFletNumber * 28:StringthInfo[11].OpenNoteNumber * 29:StringthInfo[11].SelectedFletNumber */ Array GuitarInfo = (); /** ギター1つ分の情報量 */ Int GUITAR_PACKAGE_DATA_COUNT = 30; /** ギター情報セット 6弦 低音側(6弦)の弦から「E-A-D-G-B-E 」とする「スタンダード・チューニング」 */ Array GUITAR_DEFAULT_GUITAR_OFFSET = (FALSE, FALSE, 0, 0, 0,40, 0,45, 0,50, 0,55, 0,59, 0,64, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1); /** ベース情報セット 4弦基本チューニング */ Array GUITAR_DEFAULT_BASE_OFFSET = (FALSE, FALSE,-1, 0, 0,38, 0,43, 0,47, 0,52, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1); /** 現在選択中のギター番号 */ Int SelectionGuitarNumber = 0; /** * ギター情報を作成する 低音側(6弦)の弦から「E-A-D-G-B-E 」とする「スタンダード・チューニング」 * @TrackNumber 使用するTrack番号 * @Return ギター番号 */ Function CreateGuitar(Int TrackNumber, Int ChannelNumber, Int VoiceNumber) { GuitarInfo = (GuitarInfo, TrackNumber, GUITAR_DEFAULT_GUITAR_OFFSET); Track(TrackNumber); Channel(ChannelNumber); Voice(VoiceNumber); SetSelectionGuitarNumber(SizeOf(GuitarInfo) / GUITAR_PACKAGE_DATA_COUNT); Result = GuitarNumber; } /** * ベース情報を作成する * @TrackNumber 使用するTrack番号 * @Return ギター番号 */ Function CreateBase(Int TrackNumber, Int ChannelNumber, Int VoiceNumber) { GuitarInfo = (GuitarInfo, TrackNumber, GUITAR_DEFAULT_BASE_OFFSET); Track(TrackNumber); Channel(ChannelNumber); Voice(VoiceNumber); SetSelectionGuitarNumber(SizeOf(GuitarInfo) / GUITAR_PACKAGE_DATA_COUNT); Result = GuitarNumber; } /** * 指定されたギターの弦数を返却する * @GuitarNumber ギター番号 */ Function GetStringthLength(Int GuitarNumber) { Int N = 0; For (Int I = GetGuitarDataPositionDelayVelosity(GuitarNumber) + 1; I < GetGuitarDataPositionTrack(GuitarNumber + 1); I += 2) { If (GuitarInfo(I) != -1) { N++; } Else { Exit; } } Result = N; } /** * ギターの押さえるフレットを指定する * -1は音を鳴らさない指定 * @FNums フレット番号(構えた場合に上になる弦から、弦の本数分指定) */ Function GuitarPutHand(Array FNums) { For (Int I = GetStringthLength(GetSelectionGuitarNumber()); I > 0; I--) { GuitarPutFingar(I, FNums(SizeOf(FNums) - I)); } } /** * ギターの押さえるフレットを指定する * -1は音を鳴らさない指定 * @SNum ストリングス番号 * @FNum フレット番号 */ Function GuitarPutFingar(Int SNum, Int FNum) { SetGuitarStringthFletNumber(GetSelectionGuitarNumber(), SNum, FNum); } /** * 音を出したままフレットを移動するスライド * @SlideData 弦, 強さ, フレット, 待ち時間, 移動時間, フレット, 待ち時間... */ Function GuitarSlide(Array SlideData) { Int PreTime = Time; Int SNum = SlideData(0); Int MaxNote = AnalyzeMaximumNoteNumber(SlideData); Int MinNote = AnalyzeMinimumNoteNumber(SlideData); Int AllStep = AnalyzeAllStep(SlideData); Int StepCursor = Time; Int NotePoint = 0; Int BaseNote = 0; Int SPitch = 0; Int EPitch = 0; GuitarPutFingar(SlideData(0), SlideData(2)); BaseNote = GetGuitarStringthNoteNumber(GetSelectionGuitarNumber(), SNum); BR(MaxNote - MinNote); NoteOn(BaseNote, SlideData(1)); For (Int I1 = 2; I1 + 3 < SizeOf(SlideData); I1 += 3) { StepCursor += SlideData(I1 + 1); Time(StepCursor); // (1) Slide前のPitchPointを求める GuitarPutFingar(SlideData(0), SlideData(I1)); NotePoint = GetGuitarStringthNoteNumber(GetSelectionGuitarNumber(), SNum); SPitch = AnalyzePitchPoint(MinNote, MaxNote, NotePoint); // (2) Slide後のPitchPointを求める GuitarPutFingar(SlideData(0), SlideData(I1 + 3)); NotePoint = GetGuitarStringthNoteNumber(GetSelectionGuitarNumber(), SNum); EPitch = AnalyzePitchPoint(MinNote, MaxNote, NotePoint); For (Int I2 = 0; I2 < SlideData(I1 + 2); I2++) { StepCursor++; Time(StepCursor); PitchBend(((EPitch - SPitch) / SlideData(I1 + 2)) * I2); } } Time(PreTime + AllStep); NoteOff(BaseNote, 0); PitchBend(0); } /** * ピッチの値を判定する */ Function AnalyzePitchPoint(Int Min, Int Max, Int P) { Result = ( 8191 / (Max - Min) ) * (P - Min); } /** * 総ステップ数を判定する */ Function AnalyzeAllStep(Array SlideData) { Int N = 0; For (Int I = 2; I < SizeOf(SlideData); I += 3) { N += SlideData(I + 1); If (I + 2 < SizeOf(SlideData)) { N += SlideData(I + 2); } } Result = N; } /** * 最大Note番号を判定する */ Function AnalyzeMaximumNoteNumber(Array SlideData) { Int N = 0; For (Int I = 2; I < SizeOf(SlideData); I += 3) { GuitarPutFingar(SlideData(0), SlideData(I)); If (N < GetGuitarStringthNoteNumber(GetSelectionGuitarNumber(), SlideData(0))) { N = GetGuitarStringthNoteNumber(GetSelectionGuitarNumber(), SlideData(0)); } } Result = N; } /** * 最小Note番号を判定する */ Function AnalyzeMinimumNoteNumber(Array SlideData) { Int N = 128; For (Int I = 2; I < SizeOf(SlideData); I += 3) { GuitarPutFingar(SlideData(0), SlideData(I)); If (N > GetGuitarStringthNoteNumber(GetSelectionGuitarNumber(), SlideData(0))) { N = GetGuitarStringthNoteNumber(GetSelectionGuitarNumber(), SlideData(0)); } } Result = N; } /** * ストローク奏法 * @Direction 方向(GUITAR_DOWN_STROKE:上から下, GUITAR_UP_STROKE:下から上) * @TimeStep 長さ * @StrokeSpeed 速さ(0:同時) * @VelosityValue 強さ * @Attenuation 強さの減衰値 */ Function GuitarStroke(Int Direction, Int TimeStep, Int StrokeSpeed, Int VelosityValue, Int Attenuation) { Int TempTime = Time; For (Int I = 0; I < 6; I++) { Time(TempTime + (StrokeSpeed * I)); If (Direction == GUITAR_UP_STROKE) { GuitarPickingWithoutTimeShift(I + 1, TimeStep - (StokeSpeed * I), VelosityValue - (Attenuation * I)); } If (Direction == GUITAR_DOWN_STROKE) { GuitarPickingWithoutTimeShift(6 - I, TimeStep - (StokeSpeed * I), VelosityValue - (Attenuation * I)); } } Time(TempTime + TimeStep); } /** * タイムポインタを移動しながら演奏するピッキング奏法 * @StringthNumber 弦番号 * @TimeBaseLength 全体の長さ(TimeBase値) * @VelosityValue 強さ */ Function GuitarPicking(Int StringthNumber, Int TimeBaseLength, Int VelosityValue) { GuitarPickingWithoutTimeShift(StringthNumber, TimeBaseLength, VelosityValue); Time(Time + TimeBaseLength); } /** * タイムポインタを移動せずに演奏するピッキング * @StringthNumber 弦番号 * @TimeBaseLength 全体の長さ(TimeBase値) * @VelosityValue 強さ */ Function GuitarPickingWithoutTimeShift(Int StringthNumber, Int TimeBaseLength, Int VelosityValue) { Int TempTime = Time; Track(GetGuitarTrack(SelectionGuitarNumber)); Int I1 = GetGuitarStringthNoteNumber(SelectionGuitarNumber, StringthNumber); If (I1 >= 0) { If (GetGuitarDelayStatus(SelectionGuitarNumber) == TRUE) { Int TempV = VelosityValue; NoteOn(I1, VelosityValue); v = VelosityValue; For (Int I2 = 0; I2 < GetGuitarDelayMaxCount(SelectionGuitarNumber); I2++) { Time(Time + GetGuitarDelayStep(SelectionGuitarNumber)); If (Time > (TempTime + TimeBaseLength)) { Exit; } v(MML(v) - GetGuitarDelayVelosity(SelectionGuitarNumber)); NoteOff(I1, 0); NoteOn(I1, MML(v)); } If (GetGuitarHoldStatus(SelectionGuitarNumber) == FALSE) { Time(Time + TimeBaseLength); NoteOff(I1, 0); } } Else { If (GetGuitarHoldStatus(SelectionGuitarNumber) == TRUE) { NoteOff(I1, 0); } NoteOn(I1, VelosityValue); If (GetGuitarHoldStatus(SelectionGuitarNumber) == FALSE) { Time(Time + TimeBaseLength); NoteOff(I1, 0); } } } Time(TempTime); } /* データ保存位置取得関数群 */ Function GetGuitarDataPositionTrack(Int GuitarNumber) { Result = (GuitarNumber - 1) * GUITAR_PACKAGE_DATA_COUNT; } Function GetGuitarDataPositionHoldStatus(Int GuitarNumber) { Result = GetGuitarDataPositionTrack(GuitarNumber) + 1; } Function GetGuitarDataPositionDelayStatus(Int GuitarNumber) { Result = GetGuitarDataPositionHoldStatus(GuitarNumber) + 1; } Function GetGuitarDataPositionDelayStep(Int GuitarNumber) { Result = GetGuitarDataPositionDelayStatus(GuitarNumber) + 1; } Function GetGuitarDataPositionDelayMaxCount(Int GuitarNumber) { Result = GetGuitarDataPositionDelayStep(GuitarNumber) + 1; } Function GetGuitarDataPositionDelayVelosity(Int GuitarNumber) { Result = GetGuitarDataPositionDelayMaxCount(GuitarNumber) + 1; } Function GetGuitarDataPositionStringthOpenNoteNumber(Int GuitarNumber, Int StringthNumber) { Result = GetGuitarDataPositionDelayVelosity(GuitarNumber) + 1 + ((GetStringthLength(GuitarNumber) - StringthNumber) * 2); } Function GetGuitarDataPositionStringthFletNumber(Int GuitarNumber, Int StringthNumber) { Result = GetGuitarDataPositionStringthOpenNoteNumber(GuitarNumber, StringthNumber) + 1; } /* Getter関数 */ Function GetGuitarTrack(Int GuitarNumber) { Result = GuitarInfo(GetGuitarDataPositionTrack(GuitarNumber)); } Function GetGuitarHoldStatus(Int GuitarNumber) { Result = GuitarInfo(GetGuitarDataPositionHoldStatus(GuitarNumber)); } Function GetGuitarDelayStatus(Int GuitarNumber) { Result = GuitarInfo(GetGuitarDataPositionDelayStatus(GuitarNumber)); } Function GetGuitarDelayStep(Int GuitarNumber) { Result = GuitarInfo(GetGuitarDataPositionDelayStep(GuitarNumber)); } Function GetGuitarDelayMaxCount(Int GuitarNumber) { Result = GuitarInfo(GetGuitarDataPositionDelayMaxCount(GuitarNumber)); } Function GetGuitarDelayVelosity(Int GuitarNumber) { Result = GuitarInfo(GetGuitarDataPositionDelayVelosity(GuitarNumber)); } Function GetGuitarStringthOpenNoteNumber(Int GuitarNumber, Int StringthNumber) { Result = GuitarInfo(GetGuitarDataPositionStringthOpenNoteNumber(GuitarNumber, StringthNumber)); } Function GetGuitarStringthFletNumber(Int GuitarNumber, Int StringthNumber) { Result = GuitarInfo(GetGuitarDataPositionStringthFletNumber(GuitarNumber, StringthNumber)); } Function GetGuitarStringthNoteNumber(Int GuitarNumber, Int StringthNumber) { Int I1 = GetGuitarStringthOpenNoteNumber(GuitarNumber, StringthNumber); Int I2 = GetGuitarStringthFletNumber(GuitarNumber, StringthNumber); Result = I1 + I2; } Function GetSelectionGuitarNumber() { Result = SelectionGuitarNumber; } /* Setter関数 */ Function SetGuitarTrack(Int GNum, Int TNum) { GuitarInfo(GetGuitarDataPositionTrack(GNum)) = TNum; } Function SetGuitarHoldStatus(Int GNum, Int Status) { GuitarInfo(GetGuitarDataPositionHoldStatus(GNum)) = Status; } Function SetGuitarDelayStatus(Int GNum, Int Status) { GuitarInfo(GetGuitarDataPositionDelayStatus(GNum)) = Status; } Function SetGuitarDelayStep(Int GNum, Int Step) { GuitarInfo(GetGuitarDataPositionDelayStep(GNum)) = Step; } Function SetGuitarDelayMaxCount(Int GNum, Int MCnt) { GuitarInfo(GetGuitarDataPositionDelayMaxCount(GNum)) = MCnt; } Function SetGuitarDelayVelosity(Int GNum, Int VValue) { GuitarInfo(GetGuitarDataPositionDelayVelosity(GNum)) = VValue; } Function SetGuitarStringthOpenNoteNumber(Int GNum, Int SNum, Int NNum) { GuitarInfo(GetGuitarDataPositionStringthOpenNoteNumber(GNum, SNum)) = NNum; } Function SetGuitarStringthFletNumber(Int GNum, Int SNum, Int FNum) { GuitarInfo(GetGuitarDataPositionStringthFletNumber(GNum, SNum)) = FNum; } Function SetSelectionGuitarNumber(Int GNum) { SelectionGuitarNumber = GNum; Track(GetGuitarTrack(GNum)); } Function SetGuitarDelay(Int DelayStatus, Int DelayStep, Int DelayMaxCnt, Int DelayVelosity) { SetGuitarDelayStatus(GetSelectionGuitarNumber(), DelayStatus); SetGuitarDelayStep(GetSelectionGuitarNumber(), DelayStep); SetGuitarDelayMaxCount(GetSelectionGuitarNumber(), DelayMaxCnt); SetGuitarDelayVelosity(GetSelectionGuitarNumber(), DelayVelosity); } /* -------------------------------------------------------------------------- */ /* * ソースコードを全て読み込んでから楽曲の実行を行う * Sakuraは順次実行型。 */ Main(); この曲は自作のオリジナル曲であるか、または、作曲者の死後50年以上経過した著作権に問題がない曲であることを確認しましたか? いいえ。よく分かりません はい。著作権に問題ありません (←選択)