Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by taxvi · Oct 03, 2014 at 01:08 PM · audiosourceaudioclipmusic

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? :(

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

2 Replies

· Add your reply
  • Sort: 
avatar image
0
Best Answer

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.

Comment
Add comment · Show 2 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image taxvi · Oct 03, 2014 at 05:48 PM 0
Share

I feel kinda asshole to accept my own answer but I hope other people find this useful too

avatar image smoggach · Oct 03, 2014 at 07:09 PM 0
Share

it's the right thing to do. better than having no answer.

avatar image
0

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.

Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image taxvi · Oct 03, 2014 at 05:26 PM 0
Share

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

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

27 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

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


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges