예제 #1
0
    //-----------------------------------------------------------------
    //! @summary   曲を外すボタンが押された時の処理
    //!
    //! @parameter [void] なし
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void OnOnClickRemoveButton()
    {
        // パスを空にする
        m_filePath = null;

        // オーディオクリップを削除する
        if (m_audioClip)
        {
            Destroy(m_audioClip);
            m_audioClip = null;
        }

        // オーディオソースの設定を外す
        m_editManager.SetAudioClip(m_audioClip);

        // BGMデータを初期化する
        m_BGMData = null;

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

        // UIを初期化する
        m_nameInputField.text      = "None";
        m_startTimeInputField.text = "0.0";
        m_endTimeInputField.text   = "0.0";
    }
예제 #2
0
    //-----------------------------------------------------------------
    //! @summary   更新処理
    //!
    //! @parameter [void] なし
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    private void Update()
    {
        // 再生中
        if (m_playFlag)
        {
            // 時間を更新
            m_elapsedTime += Time.deltaTime;

            // 譜面をスクロールさせる
            m_musicalScoreController.SetNowTime(m_elapsedTime);

            // UIへ反映させる
            m_menuController.UpdateDisplayNowTime(m_elapsedTime);

            // 全てのノーツの更新処理をする
            m_notesManager.UpdateAllEditNotes(m_elapsedTime);

            // BGMを止める
            PiarhythmDatas.BGMData bgmData = m_bgmSheetController.GetBGMData();
            if (bgmData != null)
            {
                if (m_audioSource.time >= bgmData.m_endTime)
                {
                    m_audioSource.Stop();
                }
            }

            // 楽曲が終了した
            if (m_elapsedTime >= m_optionSheetController.GetWholeTime())
            {
                FinishedMusic();
            }
        }
    }
예제 #3
0
    //-----------------------------------------------------------------
    //! @summary   楽曲を再生させる
    //!
    //! @parameter [void] なし
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void Play()
    {
        // すでに再生中だった場合、処理を終了する
        if (m_playFlag)
        {
            return;
        }

        // フラグを立てる
        m_playFlag = true;

        // 現在時間の取得
        m_elapsedTime = m_musicalScoreController.GetNowTime();

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

        // 再生位置を調節する
        if (bgmData != null)
        {
            m_audioSource.time = m_elapsedTime + bgmData.m_startTime;
        }

        // BGMを再生させる
        if (m_audioSource.clip)
        {
            m_audioSource.Play();
        }

        // 再生前にノーツの初期化をする
        m_notesManager.PlayMomentEditNotes(m_elapsedTime);
    }
예제 #4
0
    //-----------------------------------------------------------------
    //! @summary   テクスチャの更新処理
    //!
    //! @parameter [bgmData] BGMデータ
    //! @parameter [wholeTime] 曲全体の時間
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void UpdateTexture(PiarhythmDatas.BGMData bgmData, float wholeTime)
    {
        // オーディオクリップが無ければ初期化する
        if (m_audioClip == null)
        {
            for (int i = 0; i < m_imageHeight; ++i)
            {
                m_texture.SetPixel(0, i, new Color(0.01f, 0, 0));
            }

            m_texture.Apply();

            // 処理を終了する
            return;
        }

        int   textureY  = 0;
        float maxSample = 0;

        // サンプルを取得する
        float[] allSamples = new float[m_audioClip.samples * m_audioClip.channels];
        float   offset     = bgmData.m_startTime * m_audioClip.frequency * m_audioClip.channels;

        m_audioClip.GetData(allSamples, (int)offset);

        // 使用するサンプル分だけ取り出す
        float totalTime   = bgmData.m_endTime - bgmData.m_startTime;
        int   totalOffset = (int)(totalTime * m_audioClip.frequency * m_audioClip.channels);

        float[] samples = new float[totalOffset];
        for (int i = 0; i < totalOffset; ++i)
        {
            samples[i] = allSamples[i];
        }

        // 画像の高さ分を超えるまで処理する
        int wholeOffset = (int)(wholeTime * m_audioClip.frequency * m_audioClip.channels);

        for (int i = 0; textureY < m_imageHeight; ++i)
        {
            // 大きい方の値を取得する
            if (i < samples.Length)
            {
                maxSample = Mathf.Max(maxSample, samples[i]);
            }

            int denominator = (wholeOffset < m_imageHeight) ? i : wholeOffset / m_imageHeight;

            if (i % denominator == 0)
            {
                m_texture.SetPixel(0, textureY, new Color(maxSample, 0, 0));
                maxSample = 0;
                textureY++;
            }
        }

        m_texture.Apply();
    }
예제 #5
0
    //-----------------------------------------------------------------
    //! @summary   BGMデータを設定する
    //!
    //! @parameter [void] なし
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    private void SetBGMData()
    {
        m_BGMData = ScriptableObject.CreateInstance <PiarhythmDatas.BGMData>();

        // ファイル名を切り取る
        string fileName = Path.GetFileName(m_filePath);

        m_BGMData.m_path      = PiarhythmDatas.BGM_DIRECTORY_PATH + fileName;
        m_BGMData.m_startTime = 0.0f;
        m_BGMData.m_endTime   = m_audioClip.length;
    }
예제 #6
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);
    }
예제 #7
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);
    }
예제 #8
0
    //-----------------------------------------------------------------
    //! @summary   曲の終了時間が入力された時の処理
    //!
    //! @parameter [void] なし
    //!
    //! @return    なし
    //-----------------------------------------------------------------
    public void OnEndEditEndTimeInputField()
    {
        // 入力が無ければ、初期化する
        if (m_endTimeInputField.text == "")
        {
            m_endTimeInputField.text = "0.0";
        }

        // 開始時間超えていれば処理を終了する
        float endTime = float.Parse(m_endTimeInputField.text);

        if (m_BGMData.m_startTime >= endTime)
        {
            return;
        }

        // データを更新する
        PiarhythmDatas.BGMData bgmData = m_BGMData;
        bgmData.m_endTime = endTime;
        m_BGMData         = bgmData;

        // スクロールバーのテクスチャの更新
        m_notesEditScrollbarController.UpdateTexture(m_BGMData, m_optionSheetController.GetWholeTime());
    }