我正在創建一個音頻波形,應該如下所示:

請注意線條的拐角是如何根據方向彎曲的。
我的波形目前只有直線:

我怎樣才能達到預期的效果?
我當前的波形代碼:
fileprivate func createPath(with points: [CGPoint], pointCount: Int, in rect: CGRect) -> CGPath {
let path = UIBezierPath()
guard pointCount > 0 else {
return path.cgPath
}
guard rect.height > 0, rect.width > 0 else {
return path.cgPath
}
path.move(to: CGPoint(x: 0, y: 0))
let minValue = 1 / (rect.height / 2)
for index in 0..<(pointCount / 2) {
var point = points[index * 2]
path.move(to: point)
point.y = max(point.y, minValue)
point.y = -point.y
path.addLine(to: point)
}
let scaleX = (rect.width - 1) / CGFloat(pointCount - 1)
let halfHeight = rect.height / 2
let scaleY = halfHeight
var transform = CGAffineTransform(scaleX: scaleX, y: scaleY)
transform.ty = halfHeight
path.apply(transform)
return path.cgPath
}
uj5u.com熱心網友回復:
有兩種方法可以做到這一點:
與其將每個條視為一條寬線,不如將其填充為一個形狀,每個都有自己的左、上、右和下。然后頂部將是貝塞爾曲線。
無需調整每個條形的頂部,您可以使條形全部從最小值變為最大值,然后在整個圖形上添加蒙版以呈現平滑的形狀。
例如,這顯示了一些資料點,覆寫了

其他意見:
請注意,您的第一張帶有彎曲頂部的影像有另一個使它看起來平滑的特征:資料點本身是平滑的。您的第二張圖片比第一張具有更大的波動性。
這種波動性的來源(在音軌或幾乎任何 DSP 資料集中很常見)或缺乏波動性的來源與這里無關。相關的是,如果資料樣本高度可變,則用于彎曲條形頂部的插值演算法實際上會夸大波動性。單點尖峰將例外尖銳。雙點尖峰實際上會比實際出現的要高。
例如考慮這個資料集:

有了這種可變性,可以說條形的“四舍五入”使結果更難閱讀和/或具有誤導性:

雖然我試圖回答這個問題,但人們必須問這整個練習是否謹慎。雖然條形頂部的曲線可能具有美學吸引力,但它表明一定程度的連續性/精確性大于基礎資料可能支持的程度。方條更準確地表示資料聚合的值范圍的實際情況,因此是常見的視覺表示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/524225.html
