Example #1
0
    void Start()
    {
        //Setting up the references
        if (audioSource == null)
        {
            audioSource = GetComponent <AudioSource>();
        }

        if (soundLevelSlider == null)
        {
            soundLevelSlider = GameObject.FindGameObjectWithTag("SoundLevelSlider").GetComponent <Slider>();
        }

        if (musicSlider == null)
        {
            musicSlider = GameObject.FindGameObjectWithTag("MusicSlider").GetComponent <Slider>();
        }

        if (musicTime == null)
        {
            musicTime = GameObject.FindGameObjectWithTag("MusicTime").GetComponent <MusicTime>();
        }


        //Set sound level slider boundary
        soundLevelSlider.minValue = 0;
        soundLevelSlider.maxValue = 1;

        //Set the initial audio clip
        SetUpAudioClip(0, playOnStart);
        audioSource.clip = currentAudioClip;
    }
Example #2
0
    /// <summary>
    /// Set up the audio clip for the audio source.
    /// </summary>
    /// <param name="index">Index.</param>
    /// <param name="playClip">If set to true , play the clip.</param>
    private void SetUpAudioClip(int index, bool playClip)
    {
        if (!(index >= 0 && index < L_AudioClip.Count))
        {
            return;
        }

        currentClipIndex = index;
        currentAudioClip = L_AudioClip[index];
        if (currentAudioClip != null)
        {
            musicSlider.minValue = 0;
            musicSlider.maxValue = currentAudioClip.length;
            totalTime            = MusicTime.TimeToString(currentAudioClip.length);
        }
        else
        {
            Debug.Log("AudioClip is undefined");
        }
        audioSource.clip = currentAudioClip;
        StopAudioClip();
        if (playClip)
        {
            PlayAudioClip();
        }
    }
Example #3
0
 /// <summary>
 /// ユーザ指定したRangeにコードを転回してPivotRangeを移動する
 /// </summary>
 public void SetRange(int Range, MusicTime time, int mode)
 {
     // 小節のコードのPivotRangeとユーザが指定したRangeとの差分だけ転回
     for (int measure = time.Measure; measure < chordProgList[mode].Count; measure++)
     {
         //ユーザが指定したRangeとの差分だけ転回
         Turn(Range - chordProgList[mode][measure].PivotRange, measure, chordProgList[mode][measure]);
     }
 }
Example #4
0
 /// <summary>
 /// 自由なタイミングに和音
 /// </summary>
 public void SetOnNote(MusicTime time)
 {
     //タップタイミングの1ms後のタイミングに演奏音を書き換え
     if (time.Measure < inputedChord.Length)
     {
         foreach (var note in chordProgList[MODE_FREE][time.Measure].NoteList)
         {
             note.Tick     = TICK_UNIT * time.Measure + time.Tick + 1;
             note.Velocity = 80;
             note.Gate     = 240;
             note.Speed    = 120;
         }
     }
 }
Example #5
0
 /// <summary>
 /// コードを短調(暗い)に書き換える
 /// </summary>
 public void TurnMinor(MusicTime time, int mode)
 {
     for (int i = 0; i < 5; i++) // 1小節内で複数回の音を鳴らす場合があるためループ(最大がDelayモードの5回)
     {
         // 以降のコードをマイナーに書き換える
         for (int measure = time.Measure; measure < chordProgList[mode].Count; measure++)
         {
             if (chordProgList[mode][measure].NoteList[0].Note % 12 == KeyNoteNumber % 12) //1→1m
             {
                 chordProgList[mode][measure].NoteList[1 + (3 * i)].Note -= 1;
             }
             else if (chordProgList[mode][measure].NoteList[0].Note % 12 == KeyNoteNumber % 12 + 2) //2m→2m(-5)
             {
                 chordProgList[mode][measure].NoteList[2 + (3 * i)].Note -= 1;
             }
             else if (chordProgList[mode][measure].NoteList[0].Note % 12 == KeyNoteNumber % 12 + 4) //3m→3m
             {
             }
             else if (chordProgList[mode][measure].NoteList[0].Note % 12 == KeyNoteNumber % 12 + 5) //4→4m
             {
                 chordProgList[mode][measure].NoteList[1 + (3 * i)].Note -= 1;
             }
             else if (chordProgList[mode][measure].NoteList[0].Note % 12 == KeyNoteNumber % 12 + 7) //5→5
             {
             }
             else if (chordProgList[mode][measure].NoteList[0].Note % 12 == KeyNoteNumber % 12 + 9) //6m→6m(-5)
             {
                 chordProgList[mode][measure].NoteList[2 + (3 * i)].Note -= 1;
             }
             else if (chordProgList[mode][measure].NoteList[0].Note % 12 == KeyNoteNumber % 12 + 11) //7m(-5)→7m(-5)
             {
             }
         }
         if (mode == 0 || mode == 2 || mode == 4)
         {
             break;                                      //Whole, Arpeggio, Free なら1ループで抜け出す.
         }
         if (mode == 1 && i == 3)
         {
             break;                      //Quarterは4回音が鳴るので,4ループで抜け出す.
         }
     }
 }
Example #6
0
 /* MEMO
  *
  * 将来的にユーザがコード進行を作っていく場合に、
  * 曲内で使われるコードはダイアトニックコード内から選択されることを想定している。
  * その場合、システムがダイアトニックコードを決定するためにユーザは最初に曲のKey(調)を指定することになる。
  * その入力をKeyNoteとする。
  * (参考)ダイアトニックコードについて:https://www.studiorag.com/blog/fushimiten/diatonic-chord?disp=more
  *
  * ただしメジャーダイアトニックコード⇔マイナーダイアトニックコードの変換だと不自然に聞こえたため、今回は以下の変換を行った。
  * Ⅰ, Ⅱm, Ⅲm, Ⅳ, Ⅴ, Ⅵm, Ⅶm-5
  * ↓
  * Ⅰm, Ⅱm-5, Ⅲm, Ⅳm, Ⅴ, Ⅵm-5, Ⅶm-5
  *
  */
 /// <summary>
 /// コードを長調(明るい)に書き換える
 /// </summary>
 public void TurnMajor(MusicTime time, int mode)
 {
     for (int i = 0; i < 5; i++)
     {
         // 以降のコードをメジャーに書き換える
         for (int measure = time.Measure; measure < chordProgList[mode].Count; measure++)
         {
             if (chordProgList[mode][measure].NoteList[0].Note % 12 == KeyNoteNumber % 12) //1
             {
                 chordProgList[mode][measure].NoteList[1 + (3 * i)].Note += 1;
             }
             else if (chordProgList[mode][measure].NoteList[0].Note % 12 == KeyNoteNumber % 12 + 2) //2
             {
                 chordProgList[mode][measure].NoteList[2 + (3 * i)].Note += 1;
             }
             else if (chordProgList[mode][measure].NoteList[0].Note % 12 == KeyNoteNumber % 12 + 4) //3
             {
             }
             else if (chordProgList[mode][measure].NoteList[0].Note % 12 == KeyNoteNumber % 12 + 5) //4
             {
                 chordProgList[mode][measure].NoteList[1 + (3 * i)].Note += 1;
             }
             else if (chordProgList[mode][measure].NoteList[0].Note % 12 == KeyNoteNumber % 12 + 7) //5
             {
             }
             else if (chordProgList[mode][measure].NoteList[0].Note % 12 == KeyNoteNumber % 12 + 9) //6
             {
                 chordProgList[mode][measure].NoteList[2 + (3 * i)].Note += 1;
             }
             else if (chordProgList[mode][measure].NoteList[0].Note % 12 == KeyNoteNumber % 12 + 11) //7
             {
             }
         }
         if (mode == 0 || mode == 2 || mode == 4)
         {
             break;                                      //Whole, Arpeggio, Free なら1ループで抜け出す.
         }
         if (mode == 1 && i == 3)
         {
             break;                      //Quarterは4回音が鳴るので,4ループで抜け出す.
         }
     }
 }
Example #7
0
 public static float MusicTimeInFractions(MusicTime time)
 {
     if (MusicTime.FULL == time)
         return 1.0f;
     else if (MusicTime.HALF == time)
         return .5f;
     else if (MusicTime.HALF_DOTTED == time)
         return .75f;
     else if (MusicTime.QUARTER == time)
         return .25f;
     else if (MusicTime.QUARTER_DOTTED == time)
         return .375f;
     else if (MusicTime.EIGTH == time)
         return .125f;
     else if (MusicTime.EIGTH_DOTTED == time)
         return .1875f;
     else if (MusicTime.SIXTEENTH == time)
         return .0625f;
     else if (MusicTime.SIXTEENTH_DOTTED == time)
         return .09375f;
     return 0;
 }
Example #8
0
 public static float MusicTimeInFractions(MusicTime time, Boolean asPartOfTriole)
 {
     float t = Song.MusicTimeInFractions(time);
     if (asPartOfTriole) {
         t = 2f / 3f * t;
     }
     return t;
 }
Example #9
0
 // Start is called before the first frame update
 void Start()
 {
     music    = GetComponent <AudioSource>();
     instance = this;
     DontDestroyOnLoad(this.gameObject);
 }