큐 버퍼 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
..... 생략 .....
}
}
'Swift > 문법' 카테고리의 다른 글
[SWIFT]UITextFiled 입력 char 문자 KeyCode 처리 (strcmp) (0) | 2023.06.27 |
---|---|
[SWIFT]String 문자열 마지막 글자 삭제 (0) | 2023.06.27 |
[SWIFT]UnsafeMutablePointer<AudioBufferList> to Int16 Array 변경 (0) | 2023.06.26 |
[SWIFT]UnsafeMutablePointer<AudioBufferList> to CMSampleBuffer 변경 (0) | 2023.06.26 |
[SWIFT]AVAudioPCMBuffer to CMSampleBuffer 변경 (0) | 2023.06.26 |