Skip to content

Commit 6ff600b

Browse files
committed
simplified equalizer logic
1 parent fddbb4e commit 6ff600b

2 files changed

Lines changed: 22 additions & 52 deletions

File tree

native/app/Source/Audio/Effects/Equalizers/Equalizer.swift

Lines changed: 18 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -10,74 +10,53 @@ import Foundation
1010
import AVFoundation
1111

1212
class Equalizer: Effect {
13-
let numberOfBands: Int!
14-
var eqs: [AVAudioUnitEQ] = []
13+
var eq: AVAudioUnitEQ
1514
var globalGain: Double {
1615
get {
17-
return Double(eqs[0].globalGain)
16+
return Double(eq.globalGain)
1817
}
1918
set {
20-
eqs[0].globalGain = Float(newValue)
19+
eq.globalGain = Float(newValue)
2120
}
2221
}
2322

2423
var gains: [Double] {
2524
var gains: [Double] = []
26-
for eq in eqs {
27-
for band in eq.bands {
28-
gains.append(Double(band.gain))
29-
}
25+
for band in eq.bands {
26+
gains.append(Double(band.gain))
3027
}
3128
return gains
3229
}
3330

3431
init (numberOfBands: Int) {
35-
self.numberOfBands = numberOfBands
36-
let numberOfEQs = Int(ceil(Double(numberOfBands) / 16))
37-
let remainder = numberOfBands % 16
38-
for i in 1...numberOfEQs {
39-
let eq = AVAudioUnitEQ(numberOfBands: i == numberOfEQs ? remainder : 16)
40-
eq.globalGain = 0
41-
for band in eq.bands {
42-
band.filterType = .parametric
43-
band.bandwidth = 0.5
44-
band.bypass = false
45-
}
46-
eqs.append(eq)
32+
eq = AVAudioUnitEQ(numberOfBands: numberOfBands)
33+
eq.globalGain = 0
34+
for band in eq.bands {
35+
band.filterType = .parametric
36+
band.bandwidth = 0.5
37+
band.bypass = false
4738
}
4839
}
4940

5041
func getFrequency (index: Int) -> Double {
51-
return Double(getBandFromIndex(index: index)!.frequency)
42+
return Double(eq.bands[index].frequency)
5243
}
5344

5445
func setFrequency (index: Int, frequency: Double) {
55-
let band = getBandFromIndex(index: index)
56-
band!.frequency = Float(frequency)
46+
let band = eq.bands[index]
47+
band.frequency = Float(frequency)
5748
}
5849

5950
func getGain (index: Int) -> Double {
60-
return Double(getBandFromIndex(index: index)!.gain)
51+
return Double(eq.bands[index].gain)
6152
}
6253

6354
func setGain (index: Int, gain: Double) {
64-
let band = getBandFromIndex(index: index)
65-
band!.gain = Float(gain)
55+
let band = eq.bands[index]
56+
band.gain = Float(gain)
6657
}
6758

6859
override func enabledDidSet() {
69-
for eq in eqs {
70-
eq.bypass = !enabled
71-
}
72-
}
73-
74-
private func getBandFromIndex (index: Int) -> AVAudioUnitEQFilterParameters? {
75-
if (index >= numberOfBands) {
76-
Console.log("Trying to get out of bounds AppleEqualizer Band")
77-
return nil
78-
}
79-
let eqIndex = Int(floor(Double(index / 16)))
80-
let bandIndex = index % 16
81-
return eqs[eqIndex].bands[bandIndex]
60+
eq.bypass = !enabled
8261
}
8362
}

native/app/Source/Audio/Engine.swift

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,7 @@ class Engine {
9898

9999
private func attachEqualizers () {
100100
equalizerNodes = []
101-
for eq in effects.equalizers.active.eqs {
102-
engine.attach(eq)
103-
equalizerNodes.append(eq)
104-
}
101+
engine.attach(effects.equalizers.active.eq)
105102
}
106103

107104
private func detachEqualizers () {
@@ -134,26 +131,20 @@ class Engine {
134131
}
135132

136133
private func chainVolumeToEffects () {
137-
engine.connect(volume.booster.avAudioNode, to: effects.equalizers.active.eqs.first!, format: format)
134+
engine.connect(volume.booster.avAudioNode, to: effects.equalizers.active.eq, format: format)
138135
}
139136

140137
private func chainEffects () {
141138
Console.log("Chaining Effects")
142-
for (i, eq) in effects.equalizers.active.eqs.enumerated() {
143-
let nextIndex = i + 1
144-
if (nextIndex < effects.equalizers.active.eqs.count) {
145-
engine.connect(eq, to: effects.equalizers.active.eqs[nextIndex], format: format)
146-
}
147-
}
148139
}
149140

150141
private func chainEffectsToSink () {
151-
engine.connect(effects.equalizers.active.eqs.last!, to: engine.mainMixerNode, format: format)
142+
engine.connect(effects.equalizers.active.eq, to: engine.mainMixerNode, format: format)
152143
}
153144

154145
private func setupRenderCallback () {
155146
Console.log("Setting up Input Render Callback")
156-
let lastAVUnit = effects.equalizers.active.eqs.last! as AVAudioUnit
147+
let lastAVUnit = effects.equalizers.active.eq as AVAudioUnit
157148
if let err = checkErr(AudioUnitAddRenderNotify(lastAVUnit.audioUnit,
158149
inputRenderedNotification,
159150
UnsafeMutableRawPointer(Unmanaged<Engine>.passUnretained(self).toOpaque()))) {

0 commit comments

Comments
 (0)