# Unity Problem implementing GameDev's beat detection algorithm

This topic is 1425 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hello, I'm new here so I don't really know if this should go to Game Programming or General Programming. Hopefully I'm in the right place.

I am currently having a problem implementing GameDev's beat detection algorithm in a Unity game to introduce rythm based elements (a la Audiosurf), more precisely Frequency selected sound energy algorithm #1. I'm pretty sure I've implemented the full algorithm, but I am doing it wrong somewhere. I put the print if a beat is found thanks to the last step, where I compare a subband's energy to the average of its history buffer multiplied by a threshold (250 as advised by the article), but nothing gets printed at all (and it should probably freeze Unity because of the billions of print that would occur if it did work, but anyway...)

I have included my implementation of the algorithm in the post. Note that Unity doesn't seem to let me separate the data between left and right channel with AudioClip.GetData but packs both together instead, so I'm only using the real part of the complex numbers since the imaginary part is empty.

audio.clip.GetData(samples, 0);

int i = 0;
while(i < samples.Length){ //navigate through the samples
if(i%(1024 - 1) < 1){ //every 1024 samples...
int k = 0;
for(int j = i; j < i+1024; j++){
if(j<samples.Length){
data[k] = (double)samples[j]; //...fill a 1024 values array so we can FFT it
k++;
}
}
FFT.FFT(data, true); //FFT the data!

for(int j = 0; j < data.Length; j++){
buffer[j] = data[j]*data[j]; //we compute the square of our data to get frequency amplitudes
}

//divide the buffer in 32 subbands, compute the energy of these subbands and store them
for(int j = 0; j < energySubband.Length; j++){
double sum = 0;
for(int l = j*32; l < (j+1)*32; l++){
sum += buffer[l];
}
energySubband[j] = 32/1024 * sum;

shift (energyHistoryBuffer, j); //shifts the history buffer

energyHistoryBuffer[j,0] = energySubband[j]; //pile in the new energy of subband j

//we compute the average of the current subband's history buffer
double average = 0;
for(int l = 0; l<43; l++){
average += energyHistoryBuffer[j,l];
}
average *= 1/43;

//For each subband 'i' if energySubband[j] > (C*<energyHistoryBuffer[j]>) we have a beat !
//C == 250 here
if(energySubband[j] > (250 * average))
Debug.Log ("Beat! at subband number " + j);
}
}
i++;
}


##### Share on other sites

This topic is 1425 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Create an account

Register a new account

• ### Similar Content

• By red1m3n
Hi I'm a hobbyist getting together a team to pursue game creation, we'll do both 2D and 3D games, we would definitely build different types of games, and hopefully have a great time doing it. you dont have to have much experience, just enough that you think you can fill the position. I have plenty of ideas for games that I'd love your help with, and am completely open to fulfilling your game ideas . As of right now this is a for fun project thing, but if me and my team are satisfied with our work it can be published to steam or other platforms.
The positions I'm currently looking to fill are:
2D Pixel artist
3D Modeler
C# programmer
Musician/Sound engineer
I am currently working on a project it is a 2D Merchant adventure game with survival elements. It does not have a name yet, that's because I'm bad with names.

If interested please feel free to leave me a PM or email at dealtavu@gmail.com so we can talk more about it..
• By Aggrojag
Hello!
I'm working on a game that is quite personal to me. It touches on my own depression, obsessions, phobias, etc. It's a narrative driven dark comedy with some small aspects of platforming and puzzle solving. The project is rather small as well. It touches on topics such as suicide, mental illness, family, corruption, free-will, and redemption.
First, I'm looking for a 2D animator that can compliment the style of the attached image. The player character's animations will be a bit more extensive than a typical platformer. There will be many death animations, and some other strange dealings with the character that will need animation. Other items will include some objects in the world that are in need of animation. All static pieces of art will be handled by the artist that drew the attached image.
Second, I'm looking for a male voice actor. There will be at minimum two characters that will need to be brought to life through vocals. They are a very core part of the game, though they will never be shown on screen. As a reminder, this is a rather dark comedy, so be prepared for some insanity in your portrayal of these characters. The first voice is that of a game show host's voice, while the other will be a devilish voice (without SFX, I think it cheapens it, does not necessarily need to be a low voice, this is more about the portrayal than how the voice sounds).
Last, I would love to have an editor on board. More than just avoiding disaster in the writing, I'm looking for someone that can elevate it. There is not a ton of writing that will be in the final project, but it's important enough of an aspect to be trying to bring someone in to help with it.
To those interested:
I have a crappy prototype that exists, along with a couple game design docs. More than anything, I'd like to present the project through a voice chat via discord to any interested. Discord - Bobdul Thundercuck#4590
I do plan to post this on itch.io and wherever else I can put it that makes sense. I fully expect to make nothing off this project, as should you. However, in the case that money is made, a rev share model will be in place.

Edit: Editor position has been filled, title has been changed to reflect this, and crossed out the section detailing this.

• Hey guys and girls,   Have you ever found yourself trying to apply for a job to be a game developer or a game artist? Maybe a sound engineer or a script writer? Only to not even get an interview due to lack of ‘experience’, teamwork projects or released game titles you have worked on? I have for sure. The game industry is hard and competitive to get into for someone new, especially when you might have a full time job or even have to support a family. So I have come up with an idea and I wanted to throw something out there to see if people could be interested in such an idea.   What if you could be part of a virtual game development company? A place where you can work on projects with a team of people from the internet, soon to be known as your colleagues, which could be from anywhere in the world all working at your own pace when you have time to do as little or as much as you want.   The idea is we can create the power of a company and release titles together. Not only do you then have a released game title you have worked on under your resume, but also work experience, team work skills, and the power of helping each other and learning from each other.    My dream idea is to create a solid place for people to join a party and develop ideas and create games and level up it experience points.   As far as money is concerned, the games would either be released for free or any money would go towards charity, it’s not about making money, it’s about building a career or justness having fun building games and socialising with like minded people.    I want to make something amazing, I think it would benefit me, and I think others who are serious would benefit greatly too.   I await your critasism on the ‘prototype’ idea, I just wanted to see how many people would be interested in such a concept. And if you are very much into the idea, let’s make it happen.   Thanks,   Will. www.feelingterrible.com

• Hey guys,
Like the title says, I'm trying to find out if it's possible to automatically set which scenes will be built for different platforms. For instance, I have scenes that I want to include when building for PC, but exclude them for mobile platforms. Is it possible to do this automatically (by some settings file, or by coding some editor extension), or do I have to manually (de)select them each time I switch platforms?

Dungeon Chop Chop is a Singleplayer / Co-Op Rogue-like Adventure game currently in development.
All feedback is greatly appreciated

An admirable soul tainted by darkness has laid waste to
the land. He has robbed civilians of their riches and lurks in
a dungeon locked with sorcery and guarded by monsters.
With treasure to claim, demons to slay and eternal fame to
be won, adventurers travel from far and wide to test their
strength against this enemy.
Many have tried and not a single one has returned!
Will you be the challenger who finally breaks the seal and
restore peace to the land?

Consider supporting us at:     https://www.patreon.com/SlackDragon
Designers: