의 단일 악기의 화음을 찾을 내가내가 단일 악기의 화음을 찾기 위해 노력하고 어떻게 안드로이드
private AnalyzedSound getFrequency() {
//audioData has the audio array of recored.
elementsRead =
audioData.getElements(audioDataAnalyzis,0,audioDataSize);
double loudness = 0.0;
for(int i=0; i<elementsRead; ++i)
loudness+=Math.abs(audioDataAnalyzis[i]);
//loudness of the data is divided by the elementsRead
loudness/=elementsRead;
// Check loudness first - it's root of all evil. loudnessThreshold = 30.0
if(loudness<loudnessThreshold)
return new AnalyzedSound(loudness,ReadingType.TOO_QUIET);
//FFT computation analyzed data is in audioDataAnalyzis
computeAutocorrelation();
//chopOffEdges(0.2);
double maximum=0;
for(int i=1; i<elementsRead; ++i)
maximum = Math.max(audioDataAnalyzis[i], maximum);
int lastStart = -1;
wavelengths = 0;
boolean passedZero = true;
for(int i=0; i<elementsRead; ++i) {
if(audioDataAnalyzis[i]*audioDataAnalyzis[i+1] <=0) passedZero = true;
if(passedZero && audioDataAnalyzis[i] > MPM*maximum &&
audioDataAnalyzis[i] > audioDataAnalyzis[i+1]) {
if(lastStart != -1)
wavelength[wavelengths++]=i-lastStart;
lastStart=i; passedZero = false;
maximum = audioDataAnalyzis[i];
}
}
if(wavelengths <2)
return new AnalyzedSound(loudness,ReadingType.ZERO_SAMPLES);
removeFalseSamples();
double mean = getMeanWavelength(), stdv=getStDevOnWavelength();
double calculatedFrequency = (double)AUDIO_SAMPLING_RATE/mean;
//Log.d(TAG, "MEAN: " + mean + " STDV: " + stdv);
//Log.d(TAG, "Frequency:" + calculatedFrequency);
if(stdv >= maxStDevOfMeanFrequency)
return new AnalyzedSound(loudness,ReadingType.BIG_VARIANCE);
else if(calculatedFrequency>MaxPossibleFrequency)
return new AnalyzedSound(loudness,ReadingType.BIG_FREQUENCY);
else
return new AnalyzedSound(loudness, calculatedFrequency);
}
하지만 평균 값을 찾을 수 없습니다입니다 찾을 수있는 방법을했다. 이 코드는 실시간 녹음에 문제가 없지만 저장된 wav 파일을 분석하고 싶습니다. 나는 평균값을 정확하게 얻을 수 없다. 어떻게 오디오 데이터를 분할하여 입력 할 수 있습니까?