Я хочу сравнить два аудиофайла (запись голоса) и определить, являются ли они идентичными или нет (в некоторой степени). Я придумала FFT (OouraFFT). Я интегрировала код и передала свой аудиофайл в качестве входных данных и Вызывается "CalculateWelchPeriodogramWithNewSignalSegment". В методе "CalculateWelchPeriodogramWithNewSignalSegment" используются данные о спектре. Что мне следует использовать для сравнения двух звуковых файлов. мне следует продолжить? Любая ценная информация будет более полезной. Заранее спасибо.
EDIT:
MyAudioFile *audioFile = [[MyAudioFile alloc]init];
OSStatus result = [audioFile open:var ofType:@"wav"];
int numFrequencies=16384;
int kNumFFTWindows=10;
OouraFFT *myFFT = [[OouraFFT alloc] initForSignalsOfLength:numFrequencies*2 andNumWindows:kNumFFTWindows];
for(long i=0; i<myFFT.dataLength; i++)
{
myFFT.inputData[i] = (double)audioFile.audioData[i];
}
[myFFT calculateWelchPeriodogramWithNewSignalSegment];
NSLog(@"the spectrum data 1 is %f ",myFFT.spectrumData[1]);
NSLog(@"the spectrum data 2 is %f",myFFT.spectrumData[2]);
NSLog(@"the spectrum data 8192 is %f ",myFFT.spectrumData[8192]);
Я создал класс MyAudioFile, который содержит
-(OSStatus)open:(NSString *)fileName ofType:(NSString *)fileType{
OSStatus result = -1;
CFStringRef filePath=fileName;
CFURLRef audioFileURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)filePath, kCFURLPOSIXPathStyle, false);
//open audio file
result = AudioFileOpenURL (audioFileURL, kAudioFileReadPermission, 0, &mAudioFile);
if (result == noErr) {
//get format info
UInt32 size = sizeof(mASBD);
result = AudioFileGetProperty(mAudioFile, kAudioFilePropertyDataFormat, &size, &mASBD);
UInt32 dataSize = sizeof packetCount;
result = AudioFileGetProperty(mAudioFile, kAudioFilePropertyAudioDataPacketCount, &dataSize, &packetCount);
NSLog([NSString stringWithFormat:@"File Opened, packet Count: %d", packetCount]);
UInt32 packetsRead = packetCount;
UInt32 numBytesRead = -1;
if (packetCount > 0) {
//allocate buffer
audioData = (SInt16*)malloc( 2 *packetCount);
//read the packets
result = AudioFileReadPackets (mAudioFile, false, &numBytesRead, NULL, 0, &packetsRead, audioData);
NSLog([NSString stringWithFormat:@"Read %d bytes, %d packets", numBytesRead, packetsRead]);
}
}
else
NSLog([NSString stringWithFormat:@"Could not open file: %@", filePath]);
CFRelease (audioFileURL);
return result;
}
Я думаю, теперь я закончил с БПФ, myFFT.spectrumData [i] имеет сэмплированные выходные значения, отличающиеся от i.
Хочу ли я сейчас прекратить это и интегрировать Accelerate framework для выполнения FFT. Я в замешательстве. Скажите, пожалуйста, какой из них использовать?