- Home /
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? :(
Answer by taxvi · Oct 03, 2014 at 05:45 PM
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.
I feel kinda asshole to accept my own answer but I hope other people find this useful too
it's the right thing to do. better than having no answer.
Answer by smoggach · Oct 03, 2014 at 04:29 PM
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.
Thank you for your answer. I had tried all of your suggestions except using the GetOutputData. But I already found a solution, I'll post it as a separate comment to let the others see.
Your answer
Follow this Question
Related Questions
How to play a playlist of mp3s randomly? 1 Answer
How to stop music from restarting when reloading scene it began? 0 Answers
Music skips when playing sound effects 2 Answers
How to check if an AudioClip has looped? 0 Answers
C sharp cant play Audio 2 Answers