Objective-C: Cross correlation of two audio files

大兔子大兔子 提交于 2021-01-28 12:03:27

问题


I want to perform a cross-correlation of two audio files (which are actually NSData objects). I found a vDSP_convD function in accelerate framework. NSData has a property bytes which returns a pointer to an array of voids - that is the parameter of the filter and signal vector.

I struggled with other parameters. What is the length of these vectors or the length of the result vectors?

I guess:

it's the sum of the filter and signal vector.

Could anyone give me an example of using the vDSP_convD function?

Apple reference to the function is here

Thanks


回答1:


After reading a book - Learning Core Audio, I have made a demo which demonstrates delay between two audio files. I used new iOS 8 API to get samples from the audio files and a good performance optimization.

Github Project.




回答2:


a call would look like this:

vDSP_conv ( signal *, signalStride, filter *, filterStride, result*, resultStride, resultLenght, filterLength );

where we have:

  • signal*: a pointer to the first element of your signal array
  • signalStride: the lets call it "step size" throug your signal array. 1 is every element, 2 is every second ...
  • same for filter and result array
  • length for result and filter array

How long do the arrays have to be?:

As stated in the docs you linked our signal array has to be lenResult + lenFilter - 1 which it is where it gets a little messy. You can find a demonstration of this by Apple here or a shorter answer by SO user Rasman here. You have to do the zero padding of the signal array by yourself so the vector functions can apply the sliding window without preparation.

Note: You might consider using the Fast-Fourier-Transformation for this, because when you work with audio files i assume, that you have quite some data and there is a significant performance increase from a certain point onwards when using:

FFT -> complex multiplication in frequency domain (which results in a correlation in time domain) -> reverse FFT

here you can find a useful piece of code for this!



来源:https://stackoverflow.com/questions/28981813/objective-c-cross-correlation-of-two-audio-files

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!