Skip to content

Commit 16a012e

Browse files
authored
Merge pull request #77 from hoopes/add-analysis-mode-to-amplitude-view
Add analysisMode to AmplitudeView
2 parents a5b6c27 + 9459fc0 commit 16a012e

File tree

1 file changed

+44
-9
lines changed

1 file changed

+44
-9
lines changed

Sources/AudioKitUI/Visualizations/AmplitudeView.swift

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ class AmplitudeModel: ObservableObject {
88
var nodeTap: AmplitudeTap!
99
var node: Node?
1010
var stereoMode: StereoMode = .center
11+
var analysisMode: AnalysisMode = .peak
1112
@Environment(\.isPreview) var isPreview
1213

1314
init() {
@@ -19,7 +20,12 @@ class AmplitudeModel: ObservableObject {
1920
func updateNode(_ node: Node) {
2021
if node !== self.node {
2122
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
2329
self.pushData(amp)
2430
}
2531
nodeTap.start()
@@ -43,26 +49,54 @@ public struct AmplitudeView: View {
4349
@StateObject var amplitudeModel = AmplitudeModel()
4450
let node: Node
4551
let stereoMode: StereoMode
52+
let analysisMode: AnalysisMode
4653
let numberOfSegments: Int
4754
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+
) {
5064
self.node = node
5165
self.stereoMode = stereoMode
66+
self.analysisMode = analysisMode
67+
self.backgroundColor = backgroundColor
5268
self.fillType = .gradient(gradient: Gradient(colors: [.red, .yellow, .green]))
5369
self.numberOfSegments = numberOfSegments
5470
}
5571

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+
) {
5780
self.node = node
5881
self.stereoMode = stereoMode
82+
self.analysisMode = analysisMode
83+
self.backgroundColor = backgroundColor
5984
self.fillType = .solid(color: color)
6085
self.numberOfSegments = numberOfSegments
6186
}
6287

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+
) {
6496
self.node = node
6597
self.stereoMode = stereoMode
98+
self.analysisMode = analysisMode
99+
self.backgroundColor = backgroundColor
66100
self.fillType = .gradient(gradient: colors)
67101
self.numberOfSegments = numberOfSegments
68102
}
@@ -88,15 +122,16 @@ public struct AmplitudeView: View {
88122
// some are "on" or "off" - based on their opacity to create the colored regions
89123
addSegments(width: geometry.size.width, height: geometry.size.height, numberOfBlackSegments: numberOfBlackSegments)
90124
} 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
92126
Rectangle()
93-
.fill(Color.black)
127+
.fill(self.backgroundColor)
94128
.mask(Rectangle().padding(.bottom, geometry.size.height * CGFloat(amplitudeModel.amplitude)))
95129
.animation(.linear(duration: 0.05), value: amplitudeModel.amplitude)
96130
}
97131
}
98132
.onAppear {
99133
amplitudeModel.stereoMode = stereoMode
134+
amplitudeModel.analysisMode = analysisMode
100135
amplitudeModel.updateNode(node)
101136
}
102137
}
@@ -113,7 +148,7 @@ public struct AmplitudeView: View {
113148

114149
if index != numberOfBlackSegments + 1 {
115150
Rectangle()
116-
.fill(Color.black)
151+
.fill(self.backgroundColor)
117152
.frame(height: spaceHeight)
118153
}
119154
addOpacityRectangle(height: solidHeight, index: index, n: numberOfBlackSegments)
@@ -127,7 +162,7 @@ public struct AmplitudeView: View {
127162
let opacity = amplitudeModel.amplitude > Double(index - 1) / Double(n + 1) ? 0.0 : 1.0
128163

129164
return Rectangle()
130-
.fill(Color.black)
165+
.fill(self.backgroundColor)
131166
.frame(height: height)
132167
.opacity(opacity)
133168
.animation(.linear(duration: 0.05), value: amplitudeModel.amplitude)

0 commit comments

Comments
 (0)