private IEnumerator GenerateAllWaveforms() { yield return(new WaitUntil(() => !SceneTransitionManager.IsLoading)); //How we know "Start" has been called // Start the background worker audioManager.Begin(WaveformType == 2, WaveformType == 2 ? spectrogramHeightGradient : spectrogramGradient2d, source.clip, waveformData, atsc, BeatmapObjectContainerCollection.ChunkSize); int chunkId; // Loop while we have completed calulations waiting to be rendered // or there are threads still running generating new chunks // or we are still writing a previous save to disk (we save again at the end) while (audioManager.chunksComplete.Count > 0 || audioManager.IsAlive()) { if (audioManager.chunksComplete.TryDequeue(out chunkId)) { float[][] toRender = new float[audioManager.ColumnsPerChunk][]; waveformData.GetChunk(chunkId, audioManager.ColumnsPerChunk, ref toRender); SpectrogramChunk chunk = Instantiate(spectrogramChunkPrefab, spectroParent).GetComponent <SpectrogramChunk>(); chunk.UpdateMesh(toRender, waveformData.BandColors[chunkId], chunkId, this); // Wait 2 frames for smoooth yield return(new WaitForEndOfFrame()); } yield return(new WaitForEndOfFrame()); } Debug.Log("WaveformGenerator: Main thread done"); }
private IEnumerator RefreshVisuals() { if (BeatSaberSongContainer.Instance.loadedSong == null) { yield break; } foreach (RawImage image in activeTiles) { image.gameObject.SetActive(false); } cachedTiles = new Queue <RawImage>(activeTiles); activeTiles.Clear(); previewSelection.gameObject.SetActive(false); WaveformData = new WaveformData(); audioManager.SetSecondPerChunk(5); audioManager.Begin(false, spectrogramGradient2d, BeatSaberSongContainer.Instance.loadedSong, WaveformData, null, 5); while (audioManager.IsAlive()) { previewGenerationSlider.value = (float)WaveformData.ProcessedChunks / WaveformData.Chunks; yield return(new WaitForEndOfFrame()); } for (int i = 0; i < WaveformData.Chunks; i++) { float[][] toRender = new float[audioManager.ColumnsPerChunk][]; WaveformData.GetChunk(i, audioManager.ColumnsPerChunk, ref toRender); RawImage image = RetrieveOrCreateRawImage(); image.texture = WaveformData.BandColors[i]; image.gameObject.SetActive(true); activeTiles.Add(image); } UpdatePreviewSelection(); previewSelection.gameObject.SetActive(true); }