큐 버퍼 2개를 더하는 함수로 일반 for문으로 합치는거 보다 3배정도 속도가 빠르다.

vDSP.add 함수의 파라메터 버퍼 1과 버터 2는 동일한 크기를 가지고 있어야 되서 긴쪽을 기준으로 짧은쪽을 0으로 채우던가

짧은쪽을 기준으로 긴쪽으 버퍼 크기를 짧은쪽 버퍼의 크기만 가져와서 사용 하면 된다.

* IOS 13 이상부터 지원함.

import Accelerate

func sum(first count: Int) {

	let q1Count = self.queues[0].count
	let q2Count = self.queues[1].count
    
	if #available(iOS 13.0, *) {

		var sum: Int = 0
    
		// vDSP.add 함수를 사용하려면 두 배열의 길이가 동일해야된다. 버퍼의 길이가 다를수 있어 더 긴쪽을 기준으로 작은 쪽을 0으로 채워준다.
		if queues[1].count < count {
			sum = count - queues[1].count
			queues[1] += Array(repeating: Float(0), count: sum)
		}
            
		let samples1 = queues[0][0...count - 1]
		let samples2 = queues[1][0...count - 1]
            
		let queue_buffer = vDSP.add(samples1, samples2)
					..... 생략 .....
                    
		queues[0].removeSubrange(0...count - 1)
		queues[1].removeSubrange(0...count - 1)
        
	} else {
    	// Fallback on earlier versions
		for index in 0..<count {
        	var buffer1: Float = 0
			var buffer2: Float = 0
                
			if q1Count > index {
				buffer1 = self.queues[0][0]
				self.queues[0].remove(at: 0)
			}
			if q2Count > index {
				buffer2 = self.queues[1][0]
				self.queues[1].remove(at: 0)
			}
            
            let sum = buffer1 + buffer2
            		..... 생략 .....
    }
}

+ Recent posts