0

i'm trying to capture sound from several interfaces of single audio card. Can i get arrays that not shifted relative to each other ? I want to use 4 microphones (2 microphone in one interface for each channels) to detect sound emitter position.I use windows, so i can't create aggregated device. I also recorded sound from different threads, but delay between arrays was very randomly. This is main problem, because i want to apply intercorrelation function for array to get delay(shift) that gives maximum value, this shift defines angle to sound source, so i can use anything different against of ASIO, but it's must be stable for all recording interval. If there isn't solution for c#, i know c++. Please, tell me how i can solve my problem.

roma2341
  • 111
  • 2
  • 10

1 Answers1

0

If all mics are connected to the same hardware device you can use ASIO, assuming the device actually has ASIO drivers. If not, you can either try ASIO4All (but i have no idea whether it will synchronize independent devices) or use WASAPI and perform synchronization manually. WASAPI's IAudioCaptureClient::GetBuffer method will give you both the stream position and stream time at which the position was recorded, from there you should be able to work out the time shift between each of the 4 mics and then perform "unshifting" yourself.

Sjoerd van Kreel
  • 1,000
  • 6
  • 19
  • Thank you for answer, i solve my problem using ASIO4ALL, it give my list of values for each input channel, i have little difference between received arrays (const value around 17 samples and 1-6 samples of random shift). So i decide to use only 3 microphones (one of them send same signal to line input and mic input, so i can get shift between arrays preciously). – roma2341 May 26 '16 at 14:42