@@ -13,12 +13,12 @@ public class AudioVisualizationView: BaseNibView {
13
13
case read
14
14
case write
15
15
}
16
-
17
- private enum LevelBarType {
18
- case upper
19
- case lower
20
- case single
21
- }
16
+
17
+ private enum LevelBarType {
18
+ case upper
19
+ case lower
20
+ case single
21
+ }
22
22
23
23
@IBInspectable public var meteringLevelBarWidth : CGFloat = 3.0 {
24
24
didSet {
@@ -35,22 +35,22 @@ public class AudioVisualizationView: BaseNibView {
35
35
self . setNeedsDisplay ( )
36
36
}
37
37
}
38
- @IBInspectable public var meteringLevelBarSingleStick : Bool = false {
39
- didSet {
40
- self . setNeedsDisplay ( )
41
- }
42
- }
38
+ @IBInspectable public var meteringLevelBarSingleStick : Bool = false {
39
+ didSet {
40
+ self . setNeedsDisplay ( )
41
+ }
42
+ }
43
43
44
44
public var audioVisualizationMode : AudioVisualizationMode = . read
45
-
45
+
46
46
public var audioVisualizationTimeInterval : TimeInterval = 0.05 // Time interval between each metering bar representation
47
47
48
48
// Specify a `gradientPercentage` to have the width of gradient be that percentage of the view width (starting from left)
49
49
// The rest of the screen will be filled by `self.gradientStartColor` to display nicely.
50
50
// Do not specify any `gradientPercentage` for gradient calculating fitting size automatically.
51
51
public var currentGradientPercentage : Float ?
52
52
53
- private var meteringLevelsArray : [ Float ] = [ ] // Mutating recording array (values are percentage: 0.0 to 1.0)
53
+ private var meteringLevelsArray : [ Float ] = [ ] // Mutating recording array (values are percentage: 0.0 to 1.0)
54
54
private var meteringLevelsClusteredArray : [ Float ] = [ ] // Generated read mode array (values are percentage: 0.0 to 1.0)
55
55
56
56
private var currentMeteringLevelsArray : [ Float ] {
@@ -78,7 +78,7 @@ public class AudioVisualizationView: BaseNibView {
78
78
static var audioVisualizationDefaultGradientEndColor : UIColor {
79
79
return UIColor ( red: 166.0 / 255.0 , green: 150.0 / 255.0 , blue: 225.0 / 255.0 , alpha: 1.0 )
80
80
}
81
-
81
+
82
82
@IBInspectable public var gradientStartColor : UIColor = AudioVisualizationView . audioVisualizationDefaultGradientStartColor {
83
83
didSet {
84
84
self . setNeedsDisplay ( )
@@ -90,13 +90,13 @@ public class AudioVisualizationView: BaseNibView {
90
90
}
91
91
}
92
92
93
- override public init ( frame: CGRect ) {
94
- super. init ( frame: frame)
95
- }
93
+ override public init ( frame: CGRect ) {
94
+ super. init ( frame: frame)
95
+ }
96
96
97
- required public init ? ( coder aDecoder: NSCoder ) {
98
- super. init ( coder: aDecoder)
99
- }
97
+ required public init ? ( coder aDecoder: NSCoder ) {
98
+ super. init ( coder: aDecoder)
99
+ }
100
100
101
101
override public func draw( _ rect: CGRect ) {
102
102
super. draw ( rect)
@@ -176,7 +176,7 @@ public class AudioVisualizationView: BaseNibView {
176
176
self . play ( for: 2 )
177
177
}
178
178
}
179
-
179
+
180
180
public func play( for duration: TimeInterval ) {
181
181
guard self . audioVisualizationMode == . read else {
182
182
fatalError ( " trying to read audio visualization in write mode " )
@@ -198,12 +198,12 @@ public class AudioVisualizationView: BaseNibView {
198
198
guard let this = self else {
199
199
return
200
200
}
201
-
201
+
202
202
if timerDuration >= duration {
203
203
this. stop ( )
204
204
return
205
205
}
206
-
206
+
207
207
this. currentGradientPercentage = Float ( timerDuration) / Float( duration)
208
208
this. setNeedsDisplay ( )
209
209
}
@@ -305,37 +305,43 @@ public class AudioVisualizationView: BaseNibView {
305
305
let offset = max ( self . currentMeteringLevelsArray. count - self . maximumNumberBars, 0 )
306
306
307
307
for index in offset..< self . currentMeteringLevelsArray. count {
308
- if self . meteringLevelBarSingleStick {
309
- self . drawBar ( index - offset, meteringLevelIndex: index, levelBarType: . single, context: context)
310
- } else {
311
- self . drawBar ( index - offset, meteringLevelIndex: index, levelBarType: . upper, context: context)
312
- self . drawBar ( index - offset, meteringLevelIndex: index, levelBarType: . lower, context: context)
313
- }
308
+ if self . meteringLevelBarSingleStick {
309
+ self . drawBar ( index - offset, meteringLevelIndex: index, levelBarType: . single, context: context)
310
+ } else {
311
+ self . drawBar ( index - offset, meteringLevelIndex: index, levelBarType: . upper, context: context)
312
+ self . drawBar ( index - offset, meteringLevelIndex: index, levelBarType: . lower, context: context)
313
+ }
314
314
}
315
315
}
316
316
317
317
private func drawBar( _ barIndex: Int , meteringLevelIndex: Int , levelBarType: LevelBarType , context: CGContext ) {
318
318
context. saveGState ( )
319
319
320
- var barRect : CGRect
320
+ var barRect : CGRect
321
321
322
322
let xPointForMeteringLevel = self . xPointForMeteringLevel ( barIndex)
323
323
let heightForMeteringLevel = self . heightForMeteringLevel ( self . currentMeteringLevelsArray [ meteringLevelIndex] )
324
324
325
- switch levelBarType {
326
- case . upper:
327
- barRect = CGRect ( x: xPointForMeteringLevel, y: self . centerY - heightForMeteringLevel,
328
- width: self . meteringLevelBarWidth, height: heightForMeteringLevel)
329
- case . lower:
330
- barRect = CGRect ( x: xPointForMeteringLevel, y: self . centerY, width: self . meteringLevelBarWidth,
331
- height: heightForMeteringLevel)
332
- case . single:
333
- barRect = CGRect ( x: xPointForMeteringLevel, y: self . centerY - heightForMeteringLevel,
334
- width: self . meteringLevelBarWidth, height: heightForMeteringLevel * 2 )
335
- }
336
-
337
- let barPath : UIBezierPath = UIBezierPath ( roundedRect: barRect, cornerRadius: self . meteringLevelBarCornerRadius)
338
-
325
+ switch levelBarType {
326
+ case . upper:
327
+ barRect = CGRect ( x: xPointForMeteringLevel,
328
+ y: self . centerY - heightForMeteringLevel,
329
+ width: self . meteringLevelBarWidth,
330
+ height: heightForMeteringLevel)
331
+ case . lower:
332
+ barRect = CGRect ( x: xPointForMeteringLevel,
333
+ y: self . centerY,
334
+ width: self . meteringLevelBarWidth,
335
+ height: heightForMeteringLevel)
336
+ case . single:
337
+ barRect = CGRect ( x: xPointForMeteringLevel,
338
+ y: self . centerY - heightForMeteringLevel,
339
+ width: self . meteringLevelBarWidth,
340
+ height: heightForMeteringLevel * 2 )
341
+ }
342
+
343
+ let barPath : UIBezierPath = UIBezierPath ( roundedRect: barRect, cornerRadius: self . meteringLevelBarCornerRadius)
344
+
339
345
UIColor . black. set ( )
340
346
barPath. fill ( )
341
347
0 commit comments