Loop GetSpectrumData() through a song

I’m working on a musical trivia game. I need to pre-process the audio clip. I want to get the spectrum data of the audioSource’s every 1/30th of a second. this is what I’m doing:

for(int n = 0; n < numOfSpectrums; n++){
    
    		source.time += 1f / 30f;
    			
    		source.GetSpectrumData (samples, 0, FFTWindow.BlackmanHarris);

			//add the samples up in sumOfSamples

    		results.Add(sumOfSamples);
    
    	}

but then the results look like something like this:

0, 0, 0, 0, 45, 45, 29, 29, 29, 29, 29, 29, 5, 5, 5, 5…

how can I get unique samples on each loop? anyone? :frowning:

What is the value of samples? This must be a power of two.
If samples is a small value (like 64) your results are calculated with very generalized data. Try something higher like 8192.

Also make sure you’re not losing precision by mixing floats and ints.

If all else fails, try GetOutputData instead. This data has not had an FFT applied to it yet and will yield the most accurate information.

You might also try doing this in a coroutine instead, waiting a frame between each iteration.

SOLVED with a little hack. I figured out there was no way to pre-process the audio in this manner in any reasonable time (the best solution took around 30% of the audio’s total length). So, I duplicated the AudioSource object:

The first one is muted but starts playing on Awake(). The appropriate spectrum data is stored dynamically in real time.

The second one starts playing 3-4 seconds later and is being listened by the AudioListener. Being 3-4 seconds ahead of the actual playback is enough for me to extract all the necessary info and get things ready.