저는 대학생입니다. 나는 내년 프로젝트를위한 음악 식별 시스템을 개발 중이다. "2 차원 크로마를 기반으로 한 강력한 오디오 지문 추출 알고리즘"연구 논문에 따르면, 다음과 같은 함수가 내 시스템에 포함되어야합니다.오디오 샘플에 해닝 기능을 적용하려면 어떻게해야합니까?
캡처 오디오 신호 ----> 프레임 창 (해닝 창) -----> FFT ----->
하이 패스 필터 -----> 등 .....
오디오 캡처 기능을 코딩 할 수 있었고 코드에 FFT API도 적용되었습니다. 하지만 내 코드에 해닝 창 함수를 적용하는 방법에 대해 혼란스러워합니다. 누군가이 기능을 수행하도록 도와 줄 수 있습니까? 이 함수를 추가해야하는 곳과 코드에 코드를 추가하는 방법을 알려주십시오.
private class RecordAudio extends AsyncTask<Void, double[], Void> {
@Override
protected Void doInBackground(Void... params) {
started = true;
try {
DataOutputStream dos = new DataOutputStream(
new BufferedOutputStream(new FileOutputStream(
recordingFile)));
int bufferSize = AudioRecord.getMinBufferSize(frequency,
channelConfiguration, audioEncoding);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
frequency, channelConfiguration, audioEncoding,
bufferSize);
short[] buffer = new short[blockSize];
double[] toTransform = new double[blockSize];
long t = System.currentTimeMillis();
long end = t + 15000;
audioRecord.startRecording();
double[] w = new double[blockSize];
while (started && System.currentTimeMillis() < end) {
int bufferReadResult = audioRecord.read(buffer, 0,
blockSize);
for (int i = 0; i < blockSize && i < bufferReadResult; i++) {
toTransform[i] = (double) buffer[i]/32768.0;
dos.writeShort(buffer[i]);
}
// new part
toTransform = hanning (toTransform);
transformer.ft(toTransform);
publishProgress(toTransform);
}
audioRecord.stop();
dos.close();
} catch (Throwable t) {
Log.e("AudioRecord", "Recording Failed");
}
return null;
}
이러한 링크는 해닝 창 알고리즘과 코드 조각을 제공하고 있습니다 : :이
을 다음 여기에
는 내 오디오 캡처 코드와 적용 FFT 코드 코드 난 내 응용 프로그램에 기능을 해닝을 적용하는 데 사용하고 그것은 나를 위해 일합니다 ....public double[] hanningWindow(double[] recordedData) {
// iterate until the last line of the data buffer
for (int n = 1; n < recordedData.length; n++) {
// reduce unnecessarily performed frequency part of each and every frequency
recordedData[n] *= 0.5 * (1 - Math.cos((2 * Math.PI * n)
/(recordedData.length - 1)));
}
// return modified buffer to the FFT function
return recordedData;
}
제발 좀 도와주세요이 기능을 수행하십시오. 왜냐하면 그것은 매우 시급하기 때문입니다. –
긴급한 것은 당신 자신의 문제입니다. 이런 방식으로 현장에서 자원 봉사자를 격려하려고해서는 안됩니다. –
그것에 대해 ....... : ( –