//----------------------------------------------------------------- //! @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"; }
//----------------------------------------------------------------- //! @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(); } } }
//----------------------------------------------------------------- //! @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); }
//----------------------------------------------------------------- //! @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(); }
//----------------------------------------------------------------- //! @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; }
//----------------------------------------------------------------- //! @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); }
//----------------------------------------------------------------- //! @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); }
//----------------------------------------------------------------- //! @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()); }