Beat Detection on iPhone with wav files and openal

Posted by Dmacpro on Stack Overflow See other posts from Stack Overflow or by Dmacpro
Published on 2010-06-06T05:16:03Z Indexed on 2010/06/06 5:22 UTC
Read the original article Hit count: 296

Filed under:
|
|
|

Using this website i have tried to make a beat detection engine. http://www.gamedev.net/reference/articles/article1952.asp

{


ALfloat energy = 0;
ALfloat aEnergy = 0;
ALint beats = 0;
bool init = false;
ALfloat Ei[42];
ALfloat V = 0;
ALfloat C = 0;


ALshort *hold;
hold = new ALshort[[myDat length]/2];

[myDat getBytes:hold length:[myDat length]];

ALuint uiNumSamples;
uiNumSamples = [myDat length]/4;

if(alDatal == NULL)
    alDatal = (ALshort *) malloc(uiNumSamples*2);
if(alDatar == NULL)
    alDatar = (ALshort *) malloc(uiNumSamples*2);
for (int i = 0; i < uiNumSamples; i++)
{
    alDatal[i] = hold[i*2];
    alDatar[i] = hold[i*2+1];
}
energy = 0;
for(int start = 0; start<(22050*10); start+=512){  //detect for 10 seconds of data
for(int i = start; i<(start+512); i++){
    energy+= fabs(alDatal[i]) + fabs(alDatar[i]);

}
    aEnergy = 0;
for(int i = 41; i>=0; i--){

    if(i ==0){
        Ei[0] = energy;
    }
    else {
    Ei[i] = Ei[i-1];
    }
    if(start >= 21504){
    aEnergy+=Ei[i];
    }
}
    aEnergy = aEnergy/43.f;
    if (start >= 21504) {
        for(int i = 0; i<42; i++){
            V += (Ei[i]-aEnergy);
        }
        V = V/43.f;
        C = (-0.0025714*V)+1.5142857;
        init = true;
        if(energy >(C*aEnergy)) beats++;
    }

}

}

alDatal and alDatar are (short*) type;

myDat is NSdata that holds the actual audio data of a wav file formatted to 22050 khz and 16 bit stereo.

This doesn't seem to work correctly. If anyone could help me out that would be amazing. I've been stuck on this for 3 days.

© Stack Overflow or respective owner

Related posts about iphone

Related posts about objective-c