이 웹 사이트를 사용하여 비트 감지 엔진을 만들려고했습니다. http://www.gamedev.net/reference/articles/article1952.aspwav 파일 및 개방형 iPhone으로 비트 감지
{
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){
for(int i = start; i<(start+512); i++){
energy+= ((alDatal[i]*alDatal[i]) + (alDatal[i]*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 및 alDatar는 (short *) 유형입니다.
myDat는 22050 khz 및 16 비트 스테레오로 포맷 된 wav 파일의 실제 오디오 데이터를 보유하는 NSdata입니다.
올바르게 작동하지 않는 것 같습니다. 누군가 나를 도울 수 있다면 그것은 놀라운 일이 될 것입니다. 나는 3 일 동안이 일에 매달 렸습니다.
원하는 결과는 10 초 분량의 데이터가 처리 된 후에 6을 곱할 수 있고 분당 예상 박자 수를 얻을 수 있어야합니다.
나의 현재 결과는 매 10 초마다 389 비트, 2334 BPM 내가 알고있는 노래는 약 120 BPM입니다.
[+ 코드 스 니펫] + [ "올바르게 작동하지 않는 것 같습니다."] = [예상 결과를 설명하는 데 실사를하지 않았으며 3 일간의 결과가 예상과 다를 때] – HostileFork
죄송합니다. 원래 질문을 업데이트했습니다. – Dmacpro