Как найти максимальное значение UnsafeMutablePointer<Float> с bufferSize типа данных UInt32 в Swift?
Я новичок в разработке и работаю над проектом, в котором мне нужно было визуализировать звуковые волны! Я использую модуль EZAudio, где для отображения волн на экране используется функция UpdatePlot и в параметре передается UnsafeMutablePoiter>. Я хочу, чтобы максимальное значение в каждом UnUnsafeMutablePointer находило наибольшую длину волны на графике.
buffer[0]//with a bufferSize UInt32
Я хочу найти самое высокое значение в этом массиве buffer[0]!
Пожалуйста помоги!!! ps: заранее спасибо
2 ответа
Для буфера массива []
Свифт 3:
buffer.max()
Свифт 2:
buffer.maxElement()
Эти две строки настолько сбивают с толку:
buffer[0]//with a bufferSize UInt32
Я хочу найти самое высокое значение в этом массиве buffer[0]!
Который является UnsafeMutablePointer<Float>
, buffer
сам или buffer[0]
? Является buffer
Свифт Array
?
Я предполагаю buffer
имеет тип UnsafeMutablePointer<Float>
,
Вручную:
func myMax(buf: UnsafePointer<Float>, count: UInt32) -> Float? {
guard case let bufCount = Int(count) where count > 0 else {return nil}
var max = -Float.infinity
for i in 0..<bufCount {
if buf[i] > max {
max = buf[i]
}
}
return max
}
Используйте это так:
if let maxValue = myMax(buffer, count: bufferSize) {
//Use the maximum value
print(maxValue)
} else {
//No maximum value when empty
print("empty")
}
Если вы хотите использовать Swift Library, вы можете написать myMax
как:
func myMax(buf: UnsafePointer<Float>, count: UInt32) -> Float? {
return UnsafeBufferPointer(start: buf, count: Int(count)).maxElement()
}