@@ -8,6 +8,7 @@ class AmplitudeModel: ObservableObject {
8
8
var nodeTap : AmplitudeTap !
9
9
var node : Node ?
10
10
var stereoMode : StereoMode = . center
11
+ var analysisMode : AnalysisMode = . peak
11
12
@Environment ( \. isPreview) var isPreview
12
13
13
14
init ( ) {
@@ -19,7 +20,12 @@ class AmplitudeModel: ObservableObject {
19
20
func updateNode( _ node: Node ) {
20
21
if node !== self . node {
21
22
self . node = node
22
- nodeTap = AmplitudeTap ( node, stereoMode: stereoMode, analysisMode: . peak, callbackQueue: . main) { amp in
23
+ nodeTap = AmplitudeTap (
24
+ node,
25
+ stereoMode: stereoMode,
26
+ analysisMode: analysisMode,
27
+ callbackQueue: . main
28
+ ) { amp in
23
29
self . pushData ( amp)
24
30
}
25
31
nodeTap. start ( )
@@ -43,26 +49,54 @@ public struct AmplitudeView: View {
43
49
@StateObject var amplitudeModel = AmplitudeModel ( )
44
50
let node : Node
45
51
let stereoMode : StereoMode
52
+ let analysisMode : AnalysisMode
46
53
let numberOfSegments : Int
47
54
let fillType : FillType
48
-
49
- public init ( _ node: Node , stereoMode: StereoMode = . center, numberOfSegments: Int = 20 ) {
55
+ let backgroundColor : Color
56
+
57
+ public init (
58
+ _ node: Node ,
59
+ stereoMode: StereoMode = . center,
60
+ analysisMode: AnalysisMode = . peak,
61
+ backgroundColor: Color = . black,
62
+ numberOfSegments: Int = 20
63
+ ) {
50
64
self . node = node
51
65
self . stereoMode = stereoMode
66
+ self . analysisMode = analysisMode
67
+ self . backgroundColor = backgroundColor
52
68
self . fillType = . gradient( gradient: Gradient ( colors: [ . red, . yellow, . green] ) )
53
69
self . numberOfSegments = numberOfSegments
54
70
}
55
71
56
- public init ( _ node: Node , color: Color , stereoMode: StereoMode = . center, numberOfSegments: Int = 20 ) {
72
+ public init (
73
+ _ node: Node ,
74
+ color: Color ,
75
+ stereoMode: StereoMode = . center,
76
+ analysisMode: AnalysisMode = . peak,
77
+ backgroundColor: Color = . black,
78
+ numberOfSegments: Int = 20
79
+ ) {
57
80
self . node = node
58
81
self . stereoMode = stereoMode
82
+ self . analysisMode = analysisMode
83
+ self . backgroundColor = backgroundColor
59
84
self . fillType = . solid( color: color)
60
85
self . numberOfSegments = numberOfSegments
61
86
}
62
87
63
- public init ( _ node: Node , colors: Gradient , stereoMode: StereoMode = . center, numberOfSegments: Int = 20 ) {
88
+ public init (
89
+ _ node: Node ,
90
+ colors: Gradient ,
91
+ stereoMode: StereoMode = . center,
92
+ analysisMode: AnalysisMode = . peak,
93
+ backgroundColor: Color = . black,
94
+ numberOfSegments: Int = 20
95
+ ) {
64
96
self . node = node
65
97
self . stereoMode = stereoMode
98
+ self . analysisMode = analysisMode
99
+ self . backgroundColor = backgroundColor
66
100
self . fillType = . gradient( gradient: colors)
67
101
self . numberOfSegments = numberOfSegments
68
102
}
@@ -88,15 +122,16 @@ public struct AmplitudeView: View {
88
122
// some are "on" or "off" - based on their opacity to create the colored regions
89
123
addSegments ( width: geometry. size. width, height: geometry. size. height, numberOfBlackSegments: numberOfBlackSegments)
90
124
} else {
91
- // simply cover a certain amount of the colored rectangle with black from the top
125
+ // simply cover a certain amount of the colored rectangle with the background color from the top
92
126
Rectangle ( )
93
- . fill ( Color . black )
127
+ . fill ( self . backgroundColor )
94
128
. mask ( Rectangle ( ) . padding ( . bottom, geometry. size. height * CGFloat( amplitudeModel. amplitude) ) )
95
129
. animation ( . linear( duration: 0.05 ) , value: amplitudeModel. amplitude)
96
130
}
97
131
}
98
132
. onAppear {
99
133
amplitudeModel. stereoMode = stereoMode
134
+ amplitudeModel. analysisMode = analysisMode
100
135
amplitudeModel. updateNode ( node)
101
136
}
102
137
}
@@ -113,7 +148,7 @@ public struct AmplitudeView: View {
113
148
114
149
if index != numberOfBlackSegments + 1 {
115
150
Rectangle ( )
116
- . fill ( Color . black )
151
+ . fill ( self . backgroundColor )
117
152
. frame ( height: spaceHeight)
118
153
}
119
154
addOpacityRectangle ( height: solidHeight, index: index, n: numberOfBlackSegments)
@@ -127,7 +162,7 @@ public struct AmplitudeView: View {
127
162
let opacity = amplitudeModel. amplitude > Double ( index - 1 ) / Double( n + 1 ) ? 0.0 : 1.0
128
163
129
164
return Rectangle ( )
130
- . fill ( Color . black )
165
+ . fill ( self . backgroundColor )
131
166
. frame ( height: height)
132
167
. opacity ( opacity)
133
168
. animation ( . linear( duration: 0.05 ) , value: amplitudeModel. amplitude)
0 commit comments