示例#1
0
    //-----------------------------------------------------------------
    //! @summary   再生中の更新処理
    //!
    //! @parameter [elapsedTime] 経過時間
    //! @parameter [noteSpeed] ノーツ速度
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void UpdatePlay(float elapsedTime, float noteSpeed)
    {
        Vector3 position = m_transform.localPosition;

        position.y = -PiarhythmUtility.ConvertTimeToPosition(elapsedTime, noteSpeed * 20.0f);
        m_transform.anchoredPosition = position;
    }
示例#2
0
    //-----------------------------------------------------------------
    //! @summary   指定された時間の位置に座標を移動させる
    //!
    //! @parameter [nowTime] 移動させる時間
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void SetNowTime(float nowTime)
    {
        Vector3 position = m_transform.localPosition;

        position.y = m_transform.sizeDelta.y - PiarhythmUtility.ConvertTimeToPosition(nowTime, NotesManager.NOTES_SPEED);
        m_transform.anchoredPosition = position;
    }
示例#3
0
    //-----------------------------------------------------------------
    //! @summary   背景の生成
    //!
    //! @parameter [startTime] 小節の開始時間
    //! @parameter [endTime] 小節の終了時間
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void CreateMusicScoreBackGround(float startTime, float endTime)
    {
        // オブジェクトを生成する
        GameObject backGround = Instantiate(m_musicScoreBackGroundPrefab);

        // 親子関係を組ませる
        RectTransform rectTransform = backGround.GetComponent <RectTransform>();

        if (m_transform)
        {
            rectTransform.SetParent(m_transform);
        }

        // 生成した背景を常にヒエラルキーの上に設定する
        rectTransform.SetSiblingIndex(1);

        // 親子関係を組んだことで変化した値を修正する
        rectTransform.localScale       = Vector3.one;
        rectTransform.anchoredPosition = new Vector3(0.0f, rectTransform.anchoredPosition.y);
        rectTransform.localPosition    = new Vector3(rectTransform.localPosition.x, rectTransform.localPosition.y, 0.0f);

        // 開始時間と終了時間を座標に変換する
        Vector2 offsetMin = rectTransform.offsetMin;
        Vector2 offsetMax = rectTransform.offsetMax;

        offsetMin.y = PiarhythmUtility.ConvertTimeToPosition(startTime, NotesManager.NOTES_SPEED);
        offsetMax.y = PiarhythmUtility.ConvertTimeToPosition(endTime, NotesManager.NOTES_SPEED);

        // 設定する
        rectTransform.offsetMin = offsetMin;
        rectTransform.offsetMax = offsetMax;
    }
示例#4
0
    //-----------------------------------------------------------------
    //! @summary   更新処理
    //!
    //! @parameter [void] なし
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    private void LoadAudioCrip()
    {
        // ファイルを読み込む
        StartCoroutine(m_coroutine);

        // 読み込みが完了した
        if (m_coroutine.Current.isDone)
        {
            // AudioClipへ変換する
            AudioClip audioClip = PiarhythmUtility.ConvertToAudioClip(m_coroutine.Current.webRequest);

            // 読み込みフラグを倒す
            m_loadFlag = false;

            if (audioClip)
            {
                // コンポーネントの取得
                m_audioSource = GetComponent <AudioSource>();

                // AudioSourceに設定する
                m_audioSource.clip = audioClip;

                // アニメーションを開始する
                m_keyboardController.PlayAnimation();
            }
        }
    }
示例#5
0
    //-----------------------------------------------------------------
    //! @summary   背景の生成処理
    //!
    //! @parameter [startTime] 小節の開始時間
    //! @parameter [endTime] 小節の終了時間
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    private void CreateMusicScoreBackGround(float startTime, float endTime)
    {
        // オブジェクトを生成する
        GameObject backGround = Instantiate(m_musicScoreBackGroundPrefab);

        // 親子関係を組ませる
        RectTransform rectTransform = backGround.GetComponent <RectTransform>();

        if (m_transform)
        {
            rectTransform.SetParent(m_transform);
        }

        // 親子関係を組んだことで変化した値を修正する
        rectTransform.localScale       = Vector3.one;
        rectTransform.anchoredPosition = new Vector3(0.0f, rectTransform.anchoredPosition.y);
        rectTransform.localPosition    = new Vector3(rectTransform.localPosition.x, rectTransform.localPosition.y, 0.0f);

        // 開始時間と終了時間を座標に変換する
        Vector2 offsetMin = rectTransform.offsetMin;
        Vector2 offsetMax = rectTransform.offsetMax;

        offsetMin.y = PiarhythmUtility.ConvertTimeToPosition(startTime, m_settingData.m_noteSpeed * 20.0f);
        offsetMax.y = PiarhythmUtility.ConvertTimeToPosition(endTime, m_settingData.m_noteSpeed * 20.0f);

        // 設定する
        rectTransform.offsetMin = offsetMin;
        rectTransform.offsetMax = offsetMax;
    }
示例#6
0
    //-----------------------------------------------------------------
    //! @summary   設定データを保存する
    //!
    //! @parameter [settingData] 保存する設定データ
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void SaveSettingData(PiarhythmDatas.SettingData settingData)
    {
        // json文字列に変換する
        string jsonString = JsonConvert.SerializeObject(settingData);

        // ファイルに書き込んで保存する
        PiarhythmUtility.WriteFileText(PiarhythmDatas.SETTING_DATA_FILE_PATH, jsonString, false);
    }
示例#7
0
    //-----------------------------------------------------------------
    //! @summary   現在時間の取得
    //!
    //! @parameter [void] なし
    //!
    //! @return    現在時間
    //-----------------------------------------------------------------
    public float GetNowTime()
    {
        // 座標を時間に変換する
        float position = -m_transform.offsetMin.y;
        float nowTime  = PiarhythmUtility.ConvertPositionToTime(position, NotesManager.NOTES_SPEED);

        // 値を返す
        return(nowTime);
    }
示例#8
0
    //-----------------------------------------------------------------
    //! @summary   シーンを遷移させる
    //!
    //! @parameter [sceneID] 遷移させるシーンID
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void LoadScene(PiarhythmDatas.ScenenID scenenID)
    {
        if (scenenID == PiarhythmDatas.ScenenID.SCENE_PLAY)
        {
            // 選択されている曲のファイルパスを保存する
            PlayerPrefs.SetString(PiarhythmDatas.PLAY_MUSIC_PIECE_FILE_PATH, m_musicPathDictionary[m_selectMusic]);
        }

        // シーンを遷移する
        PiarhythmUtility.LoadScene(scenenID);
    }
示例#9
0
    //-----------------------------------------------------------------
    //! @summary   設定シーンを閉じる
    //!
    //! @parameter [void] なし
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void OnRevertButton()
    {
        // json文字列に変換する
        string json = JsonUtility.ToJson(m_systemData);

        // ファイルに書き出し
        string dataFilePath = UnityEngine.Application.dataPath + "/StreamingAssets/Data/System/SystemData.json";

        File.WriteAllText(dataFilePath, json);

        // 前のシーンに戻る
        PiarhythmUtility.LoadScene(PiarhythmDatas.ScenenID.SCENE_SETTING);
    }
示例#10
0
    //-----------------------------------------------------------------
    //! @summary   保存ボタンが押された時の処理
    //!
    //! @parameter [void] なし
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void OnClickSaveButton()
    {
        // ダイアログを開いて、保存するファイルパスを決める
        string filePath = PiarhythmUtility.OpenExistFileDialog(
            PiarhythmDatas.MUSIC_PIECE_DIRECTORY_PATH,
            "JSONファイル(*.json)|*.json");

        // ファイルが選択されていなければ処理を終了する
        if (filePath == "")
        {
            return;
        }

        // 楽曲データの保存処理
        m_editManager.SaveMusicPiece(filePath);
    }
示例#11
0
    //-----------------------------------------------------------------
    //! @summary   BGMデータを設定する(設定引数あり)
    //!
    //! @parameter [BGMData] 設定するBGMData
    //-----------------------------------------------------------------
    public void SetBGMData(PiarhythmDatas.BGMData BGMData)
    {
        // 設定するデータがない場合、処理を終了する
        if (BGMData == null)
        {
            return;
        }

        // 設定する
        m_BGMData = BGMData;

        // 読み込み開始フラグをたてる
        m_loadFlag = true;

        // コルーチンを設定する
        m_coroutine = PiarhythmUtility.LoadAudioFile(m_BGMData.m_path);
    }
示例#12
0
    //-----------------------------------------------------------------
    //! @summary   楽曲データの保存処理
    //!
    //! @parameter [filePath] 保存するファイルパス
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void SaveMusicPiece(string filePath)
    {
        // 音楽ファイルのパスを取得する
        string audioFilePath = m_bgmSheetController.GetAudioFilePath();

        // BGMデータを取得する
        PiarhythmDatas.BGMData bgmData = m_bgmSheetController.GetBGMData();

        if ((audioFilePath == null) && (bgmData != null))
        {
            audioFilePath = bgmData.m_path;
        }

        // BGMをコピーする
        if ((audioFilePath != null) && (bgmData != null))
        {
            PiarhythmUtility.CopyFile(audioFilePath, bgmData.m_path);
        }

        // ノーツデータを取得する
        PiarhythmDatas.NoteData[] notesDatas = m_notesManager.GetNotesDatas();

        // 設定データを取得する
        PiarhythmDatas.OptionData optionData = m_optionSheetController.GetOptionData();

        // 楽曲データを作成する
        PiarhythmDatas.MusicPieceData musicPieceData = ScriptableObject.CreateInstance <PiarhythmDatas.MusicPieceData>();
        musicPieceData.m_bgmData      = bgmData;
        musicPieceData.m_noteDataList = notesDatas;
        musicPieceData.m_optionData   = optionData;

        // json文字列に変換する
        string jsonString = JsonConvert.SerializeObject(musicPieceData, new JsonSerializerSettings {
            ReferenceLoopHandling = ReferenceLoopHandling.Serialize
        });

        // 拡張子があるか調べる
        if (Path.GetExtension(filePath) != ".json")
        {
            filePath += ".json";
        }

        // ファイルに書き込んで保存する
        PiarhythmUtility.WriteFileText(filePath, jsonString);
    }
示例#13
0
    //-----------------------------------------------------------------
    //! @summary   更新処理
    //!
    //! @parameter [void] なし
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            PiarhythmUtility.LoadScene(PiarhythmDatas.ScenenID.SCENE_SELECT);
        }

        if (m_loadFlag)
        {
            // AudioCripの読み込み
            LoadAudioCrip();
        }
        else
        {
            if (m_playedFlag)
            {
                // BGMを再生させる
                if ((m_elapsedTime >= m_bgmStartTime) &&
                    (m_audioSource != null) &&
                    (!m_bgmPlayedFlag))
                {
                    m_audioSource.Play();
                    m_bgmPlayedFlag = true;
                }

                // 再生中の更新処理
                UpdatePlay();
            }
            else
            {
                // アニメーションの終了
                if (!m_keyboardController.GetPlayFlag())
                {
                    // 再生位置を設定する
                    if (m_audioSource != null)
                    {
                        m_audioSource.time = m_musicPieceData.m_bgmData.m_startTime;
                    }

                    m_playedFlag = true;
                }
            }
        }
    }
示例#14
0
    //-----------------------------------------------------------------
    //! @summary   曲選択ボタンが押された時の処理
    //!
    //! @parameter [void] なし
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void OnClickSelectButton()
    {
        // ダイアログを開いて、ファイルパスを取得する
        m_filePath = PiarhythmUtility.OpenExistFileDialog(
            Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
            "WAVファイル(*.wav) | *.wav");

        // ファイルが選択されていなければ処理を終了する
        if (m_filePath == "")
        {
            return;
        }

        // 読み込み開始フラグをたてる
        m_loadFlag = true;

        // コルーチンを設定する
        m_coroutine = PiarhythmUtility.LoadAudioFile(m_filePath);
    }
示例#15
0
    //-----------------------------------------------------------------
    //! @summary   ノーツの開始時間を設定する
    //!
    //! @parameter [startTime] 設定する開始時間
    //-----------------------------------------------------------------
    public void SetNotesStartTime(float startTime)
    {
        // 開始位置がマイナスだった場合は処理を終了する
        if (startTime < 0.0f)
        {
            return;
        }

        // データを更新する
        m_notesData.m_startBeat = PiarhythmUtility.MRound(startTime, 0.25f);

        // 位置の更新
        PiarhythmDatas.PositionData positionData = m_optionSheetController.ConvertToPositionData(m_notesData.m_startBeat, m_notesData.m_noteLength);
        m_transform.offsetMin = new Vector2(m_transform.offsetMin.x, positionData.m_position);
        m_transform.offsetMax = new Vector2(m_transform.offsetMax.x, m_transform.offsetMin.y + positionData.m_lenght);

        // UIを更新
        m_notesSheetController.DisplayNotes(this);
    }
示例#16
0
    //-----------------------------------------------------------------
    //! @summary   楽曲データの読み込み処理
    //!
    //! @parameter [filePath] 読み込むファイルパス
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void LoadMusicPiece(string filePath)
    {
        // ファイルを読み込む
        string jsonString = null;

        PiarhythmUtility.ReadFileText(filePath, ref jsonString);

        // オブジェクトに変換する
        PiarhythmDatas.MusicPieceData musicPieceData = JsonConvert.DeserializeObject <PiarhythmDatas.MusicPieceData>(jsonString);

        // 設定データの設定と初期化
        m_optionSheetController.Start(musicPieceData.m_optionData);

        // BGMデータの設定
        if (musicPieceData.m_bgmData != null)
        {
            if (musicPieceData.m_bgmData.m_path == "")
            {
                m_bgmSheetController.SetBGMData(null);
            }
            else
            {
                m_bgmSheetController.SetBGMData(musicPieceData.m_bgmData);
            }
        }

        // 通常ノーツの生成
        foreach (PiarhythmDatas.NoteData noteData in musicPieceData.m_noteDataList)
        {
            // ノーツの生成
            if (noteData.m_nextNoteData == null)
            {
                m_notesManager.CreateNotes(noteData);
            }
            else
            {
                m_notesManager.CreateConnectNote(noteData);
            }
        }
    }
示例#17
0
    //-----------------------------------------------------------------
    //! @summary   戻るボタンが押された時の処理
    //!
    //! @parameter [void] なし
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void OnClickRevertButton()
    {
        if (PiarhythmUtility.MessegeBoxYesOrNo("セーブをしますか?"))
        {
            // ダイアログを開いて、保存するファイルパスを決める
            string filePath = PiarhythmUtility.OpenExistFileDialog(
                PiarhythmDatas.MUSIC_PIECE_DIRECTORY_PATH,
                "JSONファイル(*.json)|*.json");

            // ファイルが選択されていなければ処理を終了する
            if (filePath == "")
            {
                return;
            }

            // 楽曲データの保存処理
            m_editManager.SaveMusicPiece(filePath);
        }

        // タイトルシーンに遷移する
        PiarhythmUtility.LoadScene(PiarhythmDatas.ScenenID.SCENE_TITLE);
    }
示例#18
0
    // メンバ関数の定義 =====================================================
    #region 更新処理
    //-----------------------------------------------------------------
    //! @summary   更新処理
    //!
    //! @parameter [void] なし
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    private void Update()
    {
        if (m_loadFlag)
        {
            // ファイルを読み込む
            StartCoroutine(m_coroutine);

            // 読み込みが完了した
            if (m_coroutine.Current.isDone)
            {
                // AudioClipへ変換する
                m_audioClip = PiarhythmUtility.ConvertToAudioClip(m_coroutine.Current.webRequest);

                // 読み込みフラグを倒す
                m_loadFlag = false;

                if (m_audioClip)
                {
                    // BGMデータを設定する
                    if (m_BGMData == null)
                    {
                        SetBGMData();
                    }

                    // オーディオクリップを設定し、スクロールバーのテクスチャを更新する
                    m_notesEditScrollbarController.SetAudioClip(m_audioClip);

                    // UIへ反映させる
                    DisplayBGMData();
                    m_musicalScoreController.ChangeScoreLength(m_BGMData.m_endTime);
                    m_menuController.UpdateDisplayWholeTimeText(m_BGMData.m_endTime);
                    m_optionSheetController.SetWholeMeasure(m_BGMData.m_endTime);

                    // AudioSourceに設定する
                    m_editManager.SetAudioClip(m_audioClip);
                }
            }
        }
    }
示例#19
0
    //-----------------------------------------------------------------
    //! @summary   初期化処理
    //!
    //! @parameter [void] なし
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    private void Start()
    {
        // 設定データを読み込む
        string jsonString = null;

        PiarhythmUtility.ReadFileText(PiarhythmDatas.SETTING_DATA_FILE_PATH, ref jsonString);

        // オブジェクトに変換する
        PiarhythmDatas.SettingData settingData = JsonConvert.DeserializeObject <PiarhythmDatas.SettingData>(jsonString);

        // 設定シートの値を渡す
        m_settingSheetController.SetSettingData(settingData);

        // UIに反映させる
        m_settingSheetController.DispleySettingData();



        // 楽曲データのファイルパスを取得する
        m_musicPathDictionary = new Dictionary <string, string>();
        string[] musicPieceArray = Directory.GetFiles(PiarhythmDatas.MUSIC_PIECE_DIRECTORY_PATH, "*.json", SearchOption.AllDirectories);
        foreach (string musicPath in musicPieceArray)
        {
            // ファイル名を取得する
            string fileName = Path.GetFileNameWithoutExtension(musicPath);

            // 登録する
            m_musicPathDictionary[fileName] = musicPath;

            // タイルを作成する
            m_scrollController.CreateSoundTile(fileName);
        }

        // 前回選択された曲を設定する
        string filePath = PlayerPrefs.GetString(PiarhythmDatas.PLAY_MUSIC_PIECE_FILE_PATH, "None");

        m_musicSheetController.DisplaySelectMusicName(m_selectMusic = Path.GetFileNameWithoutExtension(filePath));
    }
示例#20
0
    //-----------------------------------------------------------------
    //! @summary   再生中の更新処理
    //!
    //! @parameter [void] なし
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    private void UpdatePlay()
    {
        // 経過時間を更新する
        m_elapsedTime += Time.deltaTime;

        // 譜面の更新処理
        m_musicController.UpdatePlay(m_elapsedTime, m_settingData.m_noteSpeed);

        // BGMの更新処理
        if (m_audioSource)
        {
            if (m_musicPieceData.m_bgmData.m_endTime <= m_elapsedTime)
            {
                m_audioSource.Stop();
            }
        }

        // 楽曲の終了処理
        if (m_elapsedTime >= m_wholeTime)
        {
            PiarhythmUtility.LoadScene(PiarhythmDatas.ScenenID.SCENE_SELECT);
        }
    }
示例#21
0
    //-----------------------------------------------------------------
    //! @summary   ノーツの開始拍と音符から開始座標と長さに変換する
    //!
    //! @parameter [startBeat] 開始の拍数
    //! @parameter [noteLength] 音符の長さ
    //!
    //! @return    変換された座標
    //-----------------------------------------------------------------
    public PiarhythmDatas.PositionData ConvertToPositionData(float startBeat, int noteLenght)
    {
        PiarhythmDatas.PositionData positionData = new PiarhythmDatas.PositionData();
        float elapsedBeat     = 0.0f;
        float elapsedPosition = 0.0f;

        // 所属しているテンポデータを調べる
        PiarhythmDatas.TempoData tempoData = m_tempoDataList[0];
        for (int i = 1; i < m_tempoDataList.Length; ++i)
        {
            if (startBeat >= m_tempoDataList[i].m_startMeasure * 4)
            {
                // 一拍当たりの時間を求める
                float beatPerTempo = 60.0f / tempoData.m_tempo;
                // 時間を座標に変換する
                float beatPosition = PiarhythmUtility.ConvertTimeToPosition(beatPerTempo, m_settingData.m_noteSpeed * 20.0f);

                // テンポデータの終了座標を求める
                elapsedPosition += beatPosition * ((m_tempoDataList[i].m_startMeasure - tempoData.m_startMeasure) * 4);

                // 経過拍数を増やす
                elapsedBeat += (m_tempoDataList[i].m_startMeasure - tempoData.m_startMeasure) * 4;

                tempoData = m_tempoDataList[i];
            }
            else
            {
                break;
            }
        }

        {
            // 一拍当たりの時間を求める
            float beatPerTempo = 60.0f / tempoData.m_tempo;
            // 時間を座標に変換する
            float beatPosition = PiarhythmUtility.ConvertTimeToPosition(beatPerTempo, m_settingData.m_noteSpeed * 20.0f);

            // テンポデータを元に座標と長さを決める
            positionData.m_position = elapsedPosition + (startBeat - elapsedBeat) * beatPosition;

            switch (noteLenght)
            {
            case 0:
                positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.WHOLE_NOTE_SEMIBREVE;
                break;

            case 1:
                positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.HALF_NOTE_MININ;
                break;

            case 2:
                positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.QUARTER_NOTE_CROCHET;
                break;

            case 3:
                positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.EIGHTH_NOTE_QUAVER;
                break;

            case 4:
                positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.SIXTEENTH_NOTE_SEMIQUAVER;
                break;

            case 5:
                positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.WHOLE_DOTTED_NOTE_SEMIBREVE;
                break;

            case 6:
                positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.HALF_DOTTED_NOTE_MININ;
                break;

            case 7:
                positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.QUARTER_DOTTED_NOTE_CROCHET;
                break;

            case 8:
                positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.EIGHTH_DOTTED_NOTE_QUAVER;
                break;
            }
        }

        return(positionData);
    }
示例#22
0
    //-----------------------------------------------------------------
    //! @summary   ノーツの開始座標と長さから開始拍と音符に変換する
    //!
    //! @parameter [positionData] 座標データ
    //!
    //! @return    ノーツデータ
    //-----------------------------------------------------------------
    public PiarhythmDatas.NoteData ConvertToNotesData(PiarhythmDatas.PositionData positionData)
    {
        PiarhythmDatas.NoteData notesData = ScriptableObject.CreateInstance <PiarhythmDatas.NoteData>();
        float elapsedBeat     = 0.0f;
        float elapsedPosition = 0.0f;

        // 所属しているテンポデータを調べる
        PiarhythmDatas.TempoData tempoData = m_tempoDataList[0];
        for (int i = 1; i < m_tempoDataList.Count; ++i)
        {
            // 一拍当たりの時間を求める
            float beatPerTempo = 60.0f / tempoData.m_tempo;
            // 時間を座標に変換する
            float beatPosition = PiarhythmUtility.ConvertTimeToPosition(beatPerTempo, NotesManager.NOTES_SPEED);

            // テンポデータの終了座標を求める
            float endPosition = beatPosition * ((m_tempoDataList[i].m_startMeasure - tempoData.m_startMeasure) * 4) + elapsedPosition;

            if (positionData.m_position >= endPosition)
            {
                // 経過座標を更新する
                elapsedPosition = endPosition;

                // 経過拍数を増やす
                elapsedBeat += (m_tempoDataList[i].m_startMeasure - tempoData.m_startMeasure) * 4;

                // 現在のテンポデータを更新する
                tempoData = m_tempoDataList[i];
            }
            else
            {
                break;
            }
        }

        // 現在のテンポデータから正確な位置を確定させる
        {
            float beatPerTempo = 60.0f / tempoData.m_tempo;
            float beatPosition = PiarhythmUtility.ConvertTimeToPosition(beatPerTempo, NotesManager.NOTES_SPEED);

            // 残りの座標を求める
            float residualPosition = positionData.m_position - elapsedPosition;

            // 残りの拍数を求める
            float residualBeat = residualPosition / beatPosition;

            // 残りの拍数を0.25倍に丸める
            residualBeat = PiarhythmUtility.MRound(residualBeat, 0.25f);

            // 経過拍数に加算する
            elapsedBeat += residualBeat;

            // データを保存する
            notesData.m_startBeat = elapsedBeat;


            // 長さを求める
            float noteLength = positionData.m_lenght / beatPosition;

            // 0.25倍に丸める
            noteLength = PiarhythmUtility.MRound(noteLength, 0.25f);

            // 一番近い長さを元に音符を決める
            if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.WHOLE_NOTE_SEMIBREVE))
            {
                notesData.m_noteLength = 0;
            }
            else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.HALF_NOTE_MININ))
            {
                notesData.m_noteLength = 1;
            }
            else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.QUARTER_NOTE_CROCHET))
            {
                notesData.m_noteLength = 2;
            }
            else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.EIGHTH_NOTE_QUAVER))
            {
                notesData.m_noteLength = 3;
            }
            else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.SIXTEENTH_NOTE_SEMIQUAVER))
            {
                notesData.m_noteLength = 4;
            }
            else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.WHOLE_DOTTED_NOTE_SEMIBREVE))
            {
                notesData.m_noteLength = 5;
            }
            else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.HALF_DOTTED_NOTE_MININ))
            {
                notesData.m_noteLength = 6;
            }
            else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.QUARTER_DOTTED_NOTE_CROCHET))
            {
                notesData.m_noteLength = 7;
            }
            else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.EIGHTH_DOTTED_NOTE_QUAVER))
            {
                notesData.m_noteLength = 8;
            }
            else
            {
                notesData.m_noteLength = 2;
            }
        }

        return(notesData);
    }
示例#23
0
    //-----------------------------------------------------------------
    //! @summary   初期化処理
    //!
    //! @parameter [void] なし
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    void Start()
    {
        // 設定データを読み込む
        string jsonString = null;

        PiarhythmUtility.ReadFileText(PiarhythmDatas.SETTING_DATA_FILE_PATH, ref jsonString);

        // インスタンスを作成する
        m_settingData = JsonConvert.DeserializeObject <PiarhythmDatas.SettingData>(jsonString);

        // 設定データを設定する
        m_musicController.SetSettingData(m_settingData);

        // プレイする楽曲データのファイルパスを取得する
        string filePath = PlayerPrefs.GetString(PiarhythmDatas.PLAY_MUSIC_PIECE_FILE_PATH, null);

        if (filePath == "")
        {
            filePath = PiarhythmDatas.MUSIC_PIECE_DIRECTORY_PATH + "YUBIKIRI-GENMAN -special edit-.json";
        }

        // 楽曲データを読み込む
        PiarhythmUtility.ReadFileText(filePath, ref jsonString);

        // インスタンスを作成する
        m_musicPieceData = JsonConvert.DeserializeObject <PiarhythmDatas.MusicPieceData>(jsonString);

        // 背景を作成する
        if (m_musicPieceData.m_optionData.m_tempDatas.Length != 0)
        {
            for (int i = 1; i < m_musicPieceData.m_optionData.m_tempDatas.Length; ++i)
            {
                m_musicPieceData.m_optionData.m_tempDatas[i].m_startMeasure += 2;
            }
        }
        m_musicPieceData.m_optionData.m_wholeMeasure += 5;
        m_musicController.CreateMusicScoreBackGround(m_musicPieceData.m_optionData);

        // 楽曲全体の時間を取得する
        m_wholeTime = m_musicController.GetWholeTime();

        // ノーツを生成する
        for (int i = 0; i < m_musicPieceData.m_noteDataList.Length; ++i)
        {
            m_musicPieceData.m_noteDataList[i].m_startBeat += 8;
        }
        m_musicController.CreateNoteList(m_musicPieceData.m_noteDataList);

        // BGMを読み込む
        if (m_musicPieceData.m_bgmData != null)
        {
            if (m_musicPieceData.m_bgmData.m_path != null)
            {
                // 読み込み開始フラグをたてる
                m_loadFlag = true;

                // コルーチンを設定する
                m_coroutine = PiarhythmUtility.LoadAudioFile(m_musicPieceData.m_bgmData.m_path);
            }
            else
            {
                // アニメーションを開始する
                m_keyboardController.PlayAnimation();
            }
        }
        else
        {
            // アニメーションを開始する
            m_keyboardController.PlayAnimation();
        }


        // BGMの開始時間を計算する
        // 一拍当たりの時間を求める
        float beatPerTempo = 60.0f / m_musicPieceData.m_optionData.m_tempDatas[0].m_tempo;

        m_bgmStartTime = beatPerTempo * 8.0f;
    }