public static void Create(BGMList.Param param) { //TimelineAssetの生成 TimelineAsset timeline = Initialize <TimelineAsset>(param.dictKey); AudioTrack[] audioTracks = timeline.GetRootTracks() as AudioTrack[]; List <AudioClip> audioClips = AssetLoader.LoadAll <AudioClip>("BGM/" + param.dictKey); //ここでファイル名でソートさせる必要がありそう foreach (AudioTrack audioTrack in audioTracks) { timeline.DeleteTrack(audioTrack); } //AudioTrackの作成 for (int i = 0; i <= param.subTrackTimeMarkers.Count; i++) { timeline.CreateTrack <AudioTrack>(); } audioTracks = timeline.GetRootTracks() as AudioTrack[]; //AudioClipの割り当て //メイントラック audioTracks[0].CreateClip(audioClips[0]); IEnumerable <TimelineClip> timelineClips = audioTracks[0].GetClips(); foreach (TimelineClip clip in timelineClips) { clip.clipIn = 0; clip.duration = audioClips[1].length; clip.start = 0; } timeline.CreateMarkerTrack(); //ループマーカーの追加 timeline.markerTrack.CreateMarker(typeof(LoopStartMarker), param.loopTimeMarkers.loopStartTime); timeline.markerTrack.CreateMarker(typeof(LoopEndMarker), param.loopTimeMarkers.loopEndTime); //セクションマーカーの追加 if (param.sectionMarkers.Count > 0) { foreach (double sectionmarker in param.sectionMarkers) { timeline.markerTrack.CreateMarker(typeof(SectionMarker), sectionmarker); } } if (param.subTrackTimeMarkers.Count <= 0) { return; } //サブトラックの割り当て for (int i = 1; i <= param.subTrackTimeMarkers.Count; i++) { audioTracks[i].CreateClip(audioClips[i]); timelineClips = audioTracks[i].GetClips(); foreach (TimelineClip clip in timelineClips) { clip.clipIn = 0; clip.duration = param.subTrackTimeMarkers[i - 1].endTime - param.subTrackTimeMarkers[i - 1].startTime; clip.start = param.subTrackTimeMarkers[i - 1].startTime; } } }
public static void Format(string asset, string exportedFile) { BGMList bgmList = ScriptableObjectLoader.Initialize <BGMList>(exportedFile); bgmList.Params.Clear(); foreach (List <string> data in CSVParser.ProcessingData <BGMList>(asset)) { BGMList.Param param = ScriptableObject.CreateInstance <BGMList.Param>(); param.dictKey = data[0]; param.songTitle = data[1]; param.Tags = data[2].Split(',').ToList(); param.BPM = int.Parse(data[3]); if (data.Count < 4) { continue; } param.numBeatsPerSegments = (int.Parse(data[4].Split('/')[0]), int.Parse(data[4].Split('/')[1])); if (data.Count < 5) { continue; } param.loopTimeMarkers = (int.Parse(data[5].Split(',')[0]), int.Parse(data[5].Split(',')[1])); if (data.Count < 6) { continue; } param.sectionMarkers = data[6].Split(',').ToList().ConvertAll(a => double.Parse(a)); if (data.Count < 7) { continue; } param.subTrackTimeMarkers = data.GetRange(7, data.Count - 6).Select(x => (double.Parse(x.Split(',')[0]), double.Parse(x.Split(',')[1]))).ToList(); bgmList.Params.Add(param); //ここに比較処理を挟みたい BGMList.Param checkedParam = ScriptableObjectLoader.Initialize <BGMList.Param>(param.dictKey); //ファイル名がdictkeyのScriptableObjectの読込/生成 bool isDataChanged = param.CompareParam(checkedParam); if (!isDataChanged) { checkedParam = param; BGMTimelineCreator.Create(param); } } }